diff --git a/.github/update.log b/.github/update.log index 9f1c6027e7..0c131bc17e 100644 --- a/.github/update.log +++ b/.github/update.log @@ -932,3 +932,4 @@ Update On Sat Mar 1 19:31:26 CET 2025 Update On Sun Mar 2 19:33:02 CET 2025 Update On Mon Mar 3 19:34:32 CET 2025 Update On Tue Mar 4 19:36:12 CET 2025 +Update On Wed Mar 5 19:38:24 CET 2025 diff --git a/clash-nyanpasu/backend/Cargo.lock b/clash-nyanpasu/backend/Cargo.lock index 62b9920fab..df6391b035 100644 --- a/clash-nyanpasu/backend/Cargo.lock +++ b/clash-nyanpasu/backend/Cargo.lock @@ -4959,9 +4959,9 @@ dependencies = [ [[package]] name = "indoc" -version = "2.0.5" +version = "2.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5" +checksum = "f4c7245a08504955605670dbf141fceab975f15ca21570696aebe9d2e71576bd" [[package]] name = "infer" @@ -10925,13 +10925,13 @@ dependencies = [ [[package]] name = "textwrap" -version = "0.16.1" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9" +checksum = "c13547615a44dc9c452a8a534638acdf07120d4b6847c8178705da06306a3057" dependencies = [ "smawk", "unicode-linebreak", - "unicode-width 0.1.14", + "unicode-width 0.2.0", ] [[package]] diff --git a/clash-nyanpasu/frontend/nyanpasu/package.json b/clash-nyanpasu/frontend/nyanpasu/package.json index 51275f2867..5eb697d549 100644 --- a/clash-nyanpasu/frontend/nyanpasu/package.json +++ b/clash-nyanpasu/frontend/nyanpasu/package.json @@ -77,7 +77,7 @@ "clsx": "2.1.1", "core-js": "3.41.0", "filesize": "10.1.6", - "meta-json-schema": "1.19.1", + "meta-json-schema": "1.19.3", "monaco-yaml": "5.3.1", "nanoid": "5.1.2", "sass-embedded": "1.85.1", @@ -87,7 +87,7 @@ "validator": "13.12.0", "vite": "6.2.0", "vite-plugin-html": "3.2.2", - "vite-plugin-sass-dts": "1.3.30", + "vite-plugin-sass-dts": "1.3.31", "vite-plugin-svgr": "4.3.0", "vite-tsconfig-paths": "5.1.4", "zod": "3.24.2" diff --git a/clash-nyanpasu/pnpm-lock.yaml b/clash-nyanpasu/pnpm-lock.yaml index ea11e85ee2..f083c158bb 100644 --- a/clash-nyanpasu/pnpm-lock.yaml +++ b/clash-nyanpasu/pnpm-lock.yaml @@ -405,8 +405,8 @@ importers: specifier: 10.1.6 version: 10.1.6 meta-json-schema: - specifier: 1.19.1 - version: 1.19.1 + specifier: 1.19.3 + version: 1.19.3 monaco-yaml: specifier: 5.3.1 version: 5.3.1(monaco-editor@0.52.2) @@ -435,8 +435,8 @@ importers: specifier: 3.2.2 version: 3.2.2(vite@6.2.0(@types/node@22.13.9)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.1)(sass-embedded@1.85.1)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0)) vite-plugin-sass-dts: - specifier: 1.3.30 - version: 1.3.30(postcss@8.5.3)(prettier@3.5.2)(sass-embedded@1.85.1)(vite@6.2.0(@types/node@22.13.9)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.1)(sass-embedded@1.85.1)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0)) + specifier: 1.3.31 + version: 1.3.31(postcss@8.5.3)(prettier@3.5.2)(sass-embedded@1.85.1)(vite@6.2.0(@types/node@22.13.9)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.1)(sass-embedded@1.85.1)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0)) vite-plugin-svgr: specifier: 4.3.0 version: 4.3.0(rollup@4.34.3)(typescript@5.8.2)(vite@6.2.0(@types/node@22.13.9)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.1)(sass-embedded@1.85.1)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0)) @@ -5874,8 +5874,8 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - meta-json-schema@1.19.1: - resolution: {integrity: sha512-v4fhAmMDLx2R1HLmRF5i2kVht+hS29Nr3ezhEaobkfKpy+5GqiLosc07JHLNgxLk1pgqNmvDWVfC30+Bm2A+zg==} + meta-json-schema@1.19.3: + resolution: {integrity: sha512-jkVUw6tI/FsvIQWBkQeC21b0BVPpG5Mu99T8PefxB1Zin3oqSrSneDAgjofbORzeW1gm8RYOocj7mivyISptyQ==} engines: {node: '>=18', pnpm: '>=9'} micromark-core-commonmark@2.0.1: @@ -7882,8 +7882,8 @@ packages: peerDependencies: vite: '>=2.0.0' - vite-plugin-sass-dts@1.3.30: - resolution: {integrity: sha512-hqhQRPESqbibtiyg89C5geK3p/HJ85jLk1bspgQsVnk0WOps5UkoUyEWYBETciP6w+IA7R0i/T85TuB7eEYg3w==} + vite-plugin-sass-dts@1.3.31: + resolution: {integrity: sha512-9egcHbUZdnCr2l1g9X2bHl6LjXv2mXb9xWRX3CVXHt/t4Io+HL5dYsBimlY4QImzbSeH26d7Bw6v0NUrQfwEDA==} engines: {node: '>=20'} peerDependencies: postcss: ^8 @@ -14044,7 +14044,7 @@ snapshots: merge2@1.4.1: {} - meta-json-schema@1.19.1: {} + meta-json-schema@1.19.3: {} micromark-core-commonmark@2.0.1: dependencies: @@ -16241,7 +16241,7 @@ snapshots: pathe: 0.2.0 vite: 6.2.0(@types/node@22.13.9)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.1)(sass-embedded@1.85.1)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0) - vite-plugin-sass-dts@1.3.30(postcss@8.5.3)(prettier@3.5.2)(sass-embedded@1.85.1)(vite@6.2.0(@types/node@22.13.9)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.1)(sass-embedded@1.85.1)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0)): + vite-plugin-sass-dts@1.3.31(postcss@8.5.3)(prettier@3.5.2)(sass-embedded@1.85.1)(vite@6.2.0(@types/node@22.13.9)(jiti@2.4.2)(less@4.2.0)(lightningcss@1.29.1)(sass-embedded@1.85.1)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.3)(yaml@2.7.0)): dependencies: postcss: 8.5.3 postcss-js: 4.0.1(postcss@8.5.3) diff --git a/clash-verge-rev/scripts/alpha_version.mjs b/clash-verge-rev/scripts/alpha_version.mjs index ce5a303db7..636317b6bf 100644 --- a/clash-verge-rev/scripts/alpha_version.mjs +++ b/clash-verge-rev/scripts/alpha_version.mjs @@ -26,36 +26,26 @@ async function getLatestCommitHash() { /** * @param string 传入格式化后的hash - * 将新的版本号写入文件 package.json / tauri.conf.json + * 将新的版本号写入文件 package.json */ async function updatePackageVersion(newVersion) { // 获取内容根目录 const _dirname = process.cwd(); const packageJsonPath = path.join(_dirname, "package.json"); - const tauriDir = path.join(_dirname, "src-tauri"); - const internalfile = path.join(tauriDir, "tauri.conf.json"); try { + // 读取文件 const data = await fs.readFile(packageJsonPath, "utf8"); - const tauriData = await fs.readFile(internalfile, "utf8"); - const packageJson = JSON.parse(data); - const tauriJson = JSON.parse(tauriData); - + // 获取键值替换 let result = packageJson.version.replace("alpha", newVersion); console.log("[INFO]: Current version is: ", result); packageJson.version = result; - tauriJson.version = result; // 写入版本号 await fs.writeFile( packageJsonPath, JSON.stringify(packageJson, null, 2), "utf8", ); - await fs.writeFile( - internalfile, - JSON.stringify(tauriJson, null, 2), - "utf8", - ); console.log(`[INFO]: Alpha version update to: ${newVersion}`); } catch (error) { console.error("pnpm run fix-alpha-version ERROR", error); diff --git a/clash-verge-rev/src-tauri/src/cmd/proxy.rs b/clash-verge-rev/src-tauri/src/cmd/proxy.rs index 3e0f0823a2..d9874845ec 100644 --- a/clash-verge-rev/src-tauri/src/cmd/proxy.rs +++ b/clash-verge-rev/src-tauri/src/cmd/proxy.rs @@ -1,26 +1,16 @@ use super::CmdResult; -use crate::core; -use mihomo_api; - +use crate::module::mihomo::MihomoManager; #[tauri::command] pub async fn get_proxies() -> CmdResult { - let (mihomo_server, _) = core::clash_api::clash_client_info().unwrap(); - let mihomo = mihomo_api::MihomoManager::new(mihomo_server); - Ok(mihomo - .refresh_proxies() - .await - .unwrap() - .get_proxies()) + let mannager = MihomoManager::global(); + mannager.refresh_proxies().await.unwrap(); + Ok(mannager.get_proxies()) } #[tauri::command] pub async fn get_providers_proxies() -> CmdResult { - let (mihomo_server, _) = core::clash_api::clash_client_info().unwrap(); - let mihomo = mihomo_api::MihomoManager::new(mihomo_server); - Ok(mihomo - .refresh_providers_proxies() - .await - .unwrap() - .get_providers_proxies()) + let mannager = MihomoManager::global(); + mannager.refresh_providers_proxies().await.unwrap(); + Ok(mannager.get_providers_proxies()) } diff --git a/clash-verge-rev/src-tauri/src/core/service.rs b/clash-verge-rev/src-tauri/src/core/service.rs index 2426c081bc..154bd4e089 100644 --- a/clash-verge-rev/src-tauri/src/core/service.rs +++ b/clash-verge-rev/src-tauri/src/core/service.rs @@ -154,8 +154,21 @@ pub async fn reinstall_service() -> Result<()> { let install_shell: String = install_path.to_string_lossy().into_owned(); let uninstall_shell: String = uninstall_path.to_string_lossy().into_owned(); + + // 获取提示文本,如果 i18n 失败则使用硬编码默认值 + let prompt = crate::utils::i18n::t("Service Administrator Prompt"); + let prompt = if prompt == "Service Administrator Prompt" { + if Config::verge().latest().language.as_deref() == Some("zh") || Config::verge().latest().language.is_none() { + "Clash Verge 需要使用管理员权限来重新安装系统服务" + } else { + "Clash Verge needs administrator privileges to reinstall the system service" + } + } else { + &prompt + }; + let command = format!( - r#"do shell script "sudo '{uninstall_shell}' && sudo '{install_shell}'" with administrator privileges"# + r#"do shell script "sudo '{uninstall_shell}' && sudo '{install_shell}'" with administrator privileges with prompt "{prompt}""# ); log::debug!(target: "app", "command: {}", command); diff --git a/clash-verge-rev/src-tauri/src/crate_mihomo_api/src/lib.rs b/clash-verge-rev/src-tauri/src/crate_mihomo_api/src/lib.rs index 0b50365013..3106a7f31a 100644 --- a/clash-verge-rev/src-tauri/src/crate_mihomo_api/src/lib.rs +++ b/clash-verge-rev/src-tauri/src/crate_mihomo_api/src/lib.rs @@ -1,3 +1,4 @@ +use reqwest::header::HeaderMap; use std::{ sync::{Arc, Mutex}, time::Duration, @@ -6,13 +7,14 @@ pub mod model; pub use model::{MihomoData, MihomoManager}; impl MihomoManager { - pub fn new(mihomo_server: String) -> Self { + pub fn new(mihomo_server: String, headers: HeaderMap) -> Self { Self { mihomo_server, data: Arc::new(Mutex::new(MihomoData { proxies: serde_json::Value::Null, providers_proxies: serde_json::Value::Null, })), + headers: headers, } } @@ -26,6 +28,10 @@ impl MihomoManager { data.providers_proxies = providers_proxies; } + pub fn get_mihomo_server(&self) -> String { + self.mihomo_server.clone() + } + pub fn get_proxies(&self) -> serde_json::Value { let data = self.data.lock().unwrap(); data.proxies.clone() @@ -39,6 +45,7 @@ impl MihomoManager { pub async fn refresh_proxies(&self) -> Result<&Self, String> { let url = format!("{}/proxies", self.mihomo_server); let response = reqwest::ClientBuilder::new() + .default_headers(self.headers.clone()) .no_proxy() .timeout(Duration::from_secs(3)) .build() @@ -58,6 +65,7 @@ impl MihomoManager { pub async fn refresh_providers_proxies(&self) -> Result<&Self, String> { let url = format!("{}/providers/proxies", self.mihomo_server); let response = reqwest::ClientBuilder::new() + .default_headers(self.headers.clone()) .no_proxy() .timeout(Duration::from_secs(3)) .build() diff --git a/clash-verge-rev/src-tauri/src/crate_mihomo_api/src/model.rs b/clash-verge-rev/src-tauri/src/crate_mihomo_api/src/model.rs index 4af4b1bec4..61ab191c00 100644 --- a/clash-verge-rev/src-tauri/src/crate_mihomo_api/src/model.rs +++ b/clash-verge-rev/src-tauri/src/crate_mihomo_api/src/model.rs @@ -1,4 +1,5 @@ use std::sync::{Arc, Mutex}; +use reqwest::header::HeaderMap; pub struct MihomoData { pub(crate) proxies: serde_json::Value, @@ -9,6 +10,7 @@ pub struct MihomoData { pub struct MihomoManager { pub(crate) mihomo_server: String, pub(crate) data: Arc>, + pub(crate) headers: HeaderMap, } #[cfg(feature = "debug")] diff --git a/clash-verge-rev/src-tauri/src/crate_mihomo_api/tests/test_mihomo_api.rs b/clash-verge-rev/src-tauri/src/crate_mihomo_api/tests/test_mihomo_api.rs index 681c6b1075..80137d22dc 100644 --- a/clash-verge-rev/src-tauri/src/crate_mihomo_api/tests/test_mihomo_api.rs +++ b/clash-verge-rev/src-tauri/src/crate_mihomo_api/tests/test_mihomo_api.rs @@ -1,15 +1,16 @@ use mihomo_api; +use reqwest::header::HeaderMap; #[test] fn test_mihomo_manager_init() { - let manager = mihomo_api::MihomoManager::new("url".into()); + let manager = mihomo_api::MihomoManager::new("url".into(), HeaderMap::new()); assert_eq!(manager.get_proxies(), serde_json::Value::Null); assert_eq!(manager.get_providers_proxies(), serde_json::Value::Null); } #[tokio::test] async fn test_refresh_proxies() { - let manager = mihomo_api::MihomoManager::new("http://127.0.0.1:9097".into()); + let manager = mihomo_api::MihomoManager::new("http://127.0.0.1:9097".into(), HeaderMap::new()); let manager = manager.refresh_proxies().await.unwrap(); let proxies = manager.get_proxies(); let providers = manager.get_providers_proxies(); @@ -19,7 +20,7 @@ async fn test_refresh_proxies() { #[tokio::test] async fn test_refresh_providers_proxies() { - let manager = mihomo_api::MihomoManager::new("http://127.0.0.1:9097".into()); + let manager = mihomo_api::MihomoManager::new("http://127.0.0.1:9097".into(), HeaderMap::new()); let manager = manager.refresh_providers_proxies().await.unwrap(); let proxies = manager.get_proxies(); let providers = manager.get_providers_proxies(); diff --git a/clash-verge-rev/src-tauri/src/module/mihomo.rs b/clash-verge-rev/src-tauri/src/module/mihomo.rs new file mode 100644 index 0000000000..3089116e5b --- /dev/null +++ b/clash-verge-rev/src-tauri/src/module/mihomo.rs @@ -0,0 +1,33 @@ +use crate::core::clash_api; +use mihomo_api; +use once_cell::sync::{Lazy, OnceCell}; +use std::sync::Mutex; + +pub struct MihomoManager { + mihomo: Mutex>, +} + +impl MihomoManager { + fn __global() -> &'static MihomoManager { + static INSTANCE: Lazy = Lazy::new(|| MihomoManager { + mihomo: Mutex::new(OnceCell::new()), + }); + &INSTANCE + } + + pub fn global() -> mihomo_api::MihomoManager { + let instance = MihomoManager::__global(); + let (current_server, headers) = clash_api::clash_client_info().unwrap(); + + let lock = instance.mihomo.lock().unwrap(); + if let Some(mihomo) = lock.get() { + if mihomo.get_mihomo_server() == current_server { + return mihomo.clone(); + } + } + + lock.set(mihomo_api::MihomoManager::new(current_server, headers)) + .ok(); + lock.get().unwrap().clone() + } +} diff --git a/clash-verge-rev/src-tauri/src/module/mod.rs b/clash-verge-rev/src-tauri/src/module/mod.rs index f146b31013..9b6f1f38ba 100644 --- a/clash-verge-rev/src-tauri/src/module/mod.rs +++ b/clash-verge-rev/src-tauri/src/module/mod.rs @@ -1 +1,2 @@ -pub mod sysinfo; \ No newline at end of file +pub mod sysinfo; +pub mod mihomo; \ No newline at end of file diff --git a/clash-verge-rev/src/components/connection/connection-detail.tsx b/clash-verge-rev/src/components/connection/connection-detail.tsx index 3ee9da0698..515fd90c9a 100644 --- a/clash-verge-rev/src/components/connection/connection-detail.tsx +++ b/clash-verge-rev/src/components/connection/connection-detail.tsx @@ -30,7 +30,13 @@ export const ConnectionDetail = forwardRef( anchorOrigin={{ vertical: "bottom", horizontal: "right" }} open={open} onClose={onClose} - sx={{ maxWidth: "520px" }} + sx={{ + ".MuiSnackbarContent-root": { + maxWidth: "520px", + maxHeight: "480px", + overflowY: "auto", + }, + }} message={ detail ? ( @@ -69,7 +75,10 @@ const InnerConnectionDetail = ({ data, onClose }: InnerProps) => { label: t("UL Speed"), value: parseTraffic(data.curUpload ?? -1).join(" ") + "/s", }, - { label: t("Chains"), value: chains }, + { + label: t("Chains"), + value: chains, + }, { label: t("Rule"), value: rule }, { label: t("Process"), @@ -93,7 +102,8 @@ const InnerConnectionDetail = ({ data, onClose }: InnerProps) => { {information.map((each) => (
- {each.label}: {each.value} + {each.label} + : {each.value}
))} diff --git a/clash-verge-rev/src/locales/ar.json b/clash-verge-rev/src/locales/ar.json index 122dd9c9fd..0cff6cfd18 100644 --- a/clash-verge-rev/src/locales/ar.json +++ b/clash-verge-rev/src/locales/ar.json @@ -449,5 +449,9 @@ "Core Changed Successfully": "تم تغيير النواة بنجاح", "Failed to Change Core": "فشل تغيير النواة", "Verge Basic Setting": "الإعدادات الأساسية Verge", - "Verge Advanced Setting": "الإعدادات الأساسية Verge" + "Verge Advanced Setting": "الإعدادات الأساسية Verge", + "TUN requires Service Mode": "يتطلب وضع TUN خدمة", + "Install Service": "تثبيت الخدمة ", + "Installing Service...": "جاري تثبيت الخدمة...", + "Service Administrator Prompt": "يتطلب Clash Verge امتيازات المسؤول لإعادة تثبيت خدمة النظام" } diff --git a/clash-verge-rev/src/locales/en.json b/clash-verge-rev/src/locales/en.json index a9ef453285..31f797b36e 100644 --- a/clash-verge-rev/src/locales/en.json +++ b/clash-verge-rev/src/locales/en.json @@ -470,5 +470,6 @@ "Validate YAML File": "Validate YAML File", "Validate Merge File": "Validate Merge File", "Validation Success": "Validation Success", - "Validation Failed": "Validation Failed" + "Validation Failed": "Validation Failed", + "Service Administrator Prompt": "Clash Verge requires administrator privileges to reinstall the system service" } diff --git a/clash-verge-rev/src/locales/fa.json b/clash-verge-rev/src/locales/fa.json index b9d6a7668d..77a8db2f83 100644 --- a/clash-verge-rev/src/locales/fa.json +++ b/clash-verge-rev/src/locales/fa.json @@ -446,5 +446,9 @@ "Core Changed Successfully": "هسته با موفقیت تغییر کرد", "Failed to Change Core": "تغییر هسته ناموفق بود", "Verge Basic Setting": "تنظیمات پایه Verge", - "Verge Advanced Setting": "تنظیمات پیشرفته Verge" + "Verge Advanced Setting": "تنظیمات پیشرفته Verge", + "TUN requires Service Mode": "حالت تونل‌زنی نیاز به سرویس دارد", + "Install Service": "نصب سرویس", + "Installing Service...": "در حال نصب سرویس...", + "Service Administrator Prompt": "Clash Verge برای نصب مجدد سرویس سیستم به امتیازات مدیر نیاز دارد" } diff --git a/clash-verge-rev/src/locales/id.json b/clash-verge-rev/src/locales/id.json index 6bf1b8487f..1e110708c4 100644 --- a/clash-verge-rev/src/locales/id.json +++ b/clash-verge-rev/src/locales/id.json @@ -445,5 +445,9 @@ "Core Changed Successfully": "Inti berhasil diubah", "Failed to Change Core": "Gagal mengubah inti", "Verge Basic Setting": "Pengaturan Dasar Verge", - "Verge Advanced Setting": "Pengaturan Lanjutan Verge" + "Verge Advanced Setting": "Pengaturan Lanjutan Verge", + "TUN requires Service Mode": "Mode TUN memerlukan layanan", + "Install Service": "Instal Layanan", + "Installing Service...": "Memasang Layanan...", + "Service Administrator Prompt": "Clash Verge memerlukan hak administrator untuk menginstal ulang layanan sistem" } diff --git a/clash-verge-rev/src/locales/ru.json b/clash-verge-rev/src/locales/ru.json index fc8146ead1..99cdb77b0e 100644 --- a/clash-verge-rev/src/locales/ru.json +++ b/clash-verge-rev/src/locales/ru.json @@ -446,5 +446,9 @@ "Core Changed Successfully": "Ядро успешно сменено", "Failed to Change Core": "Не удалось сменить ядро", "Verge Basic Setting": "Основные настройки Verge", - "Verge Advanced Setting": "Расширенные настройки Verge" + "Verge Advanced Setting": "Расширенные настройки Verge", + "TUN requires Service Mode": "Режим TUN требует обслуживания", + "Install Service": "Установить службу", + "Installing Service...": "Установка службы...", + "Service Administrator Prompt": "Clash Verge требует прав администратора для переустановки системной службы" } diff --git a/clash-verge-rev/src/locales/tt.json b/clash-verge-rev/src/locales/tt.json index 4c3b065cd0..5c53075005 100644 --- a/clash-verge-rev/src/locales/tt.json +++ b/clash-verge-rev/src/locales/tt.json @@ -445,5 +445,9 @@ "Core Changed Successfully": "Ядро уңышлы алыштырылды", "Failed to Change Core": "Ядро алыштыру уңышсыз булды", "Verge Basic Setting": "Verge Төп көйләүләр", - "Verge Advanced Setting": "Verge Киңәйтелгән көйләүләр" + "Verge Advanced Setting": "Verge Киңәйтелгән көйләүләр", + "TUN requires Service Mode": "TUN режимы хезмәт күрсәтүне таләп итә", + "Install Service": "Хезмәтне урнаштыру", + "Installing Service...": "Хезмәт урнаштырыла...", + "Service Administrator Prompt": "Clash Verge система хезмәтен яңадан урнаштыру өчен администратор хокукларын таләп итә" } diff --git a/clash-verge-rev/src/locales/zh.json b/clash-verge-rev/src/locales/zh.json index 288b5df6ab..20d099f2c4 100644 --- a/clash-verge-rev/src/locales/zh.json +++ b/clash-verge-rev/src/locales/zh.json @@ -462,5 +462,6 @@ "Validation Success": "验证成功", "Validation Failed": "验证失败", "Verge Basic Setting": "Verge 基础设置", - "Verge Advanced Setting": "Verge 高级设置" + "Verge Advanced Setting": "Verge 高级设置", + "Service Administrator Prompt": "Clash Verge 需要使用管理员权限来重新安装系统服务" } diff --git a/lede/package/kernel/r8125/Makefile b/lede/package/kernel/r8125/Makefile index bf8d5cd778..62d27cba02 100644 --- a/lede/package/kernel/r8125/Makefile +++ b/lede/package/kernel/r8125/Makefile @@ -1,12 +1,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=r8125 -PKG_VERSION:=9.014.01 +PKG_VERSION:=9.015.00 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 PKG_SOURCE_URL:=https://github.com/openwrt/rtl8125/releases/download/$(PKG_VERSION) -PKG_HASH:=f006aa95501738ca55c522812c9d1b473ac781675f3ad88ce341a09316b8aa13 +PKG_HASH:=7d6906336c3ad960c3e7c0299ad655659d7110bdc933c5b568b7f2536cb8ffc3 PKG_BUILD_PARALLEL:=1 PKG_LICENSE:=GPLv2 diff --git a/lede/package/kernel/r8125/patches/100-kernel-6.9-support.patch b/lede/package/kernel/r8125/patches/100-kernel-6.9-support.patch index 137692edcc..1fde48700e 100644 --- a/lede/package/kernel/r8125/patches/100-kernel-6.9-support.patch +++ b/lede/package/kernel/r8125/patches/100-kernel-6.9-support.patch @@ -1,8 +1,8 @@ --- a/src/r8125_n.c +++ b/src/r8125_n.c -@@ -7478,7 +7478,11 @@ +@@ -7314,7 +7314,11 @@ out: } - + #else static int +#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,9,0) +rtl_ethtool_get_eee(struct net_device *net, struct ethtool_keee *edata) @@ -12,8 +12,8 @@ { struct rtl8125_private *tp = netdev_priv(net); struct ethtool_eee *eee = &tp->eee; -@@ -7511,9 +7515,15 @@ - +@@ -7347,9 +7351,15 @@ rtl_ethtool_get_eee(struct net_device *n + edata->eee_enabled = !!val; edata->eee_active = !!(supported & adv & lp); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,9,0) @@ -27,10 +27,10 @@ +#endif edata->tx_lpi_enabled = edata->eee_enabled; edata->tx_lpi_timer = tx_lpi_timer; - -@@ -7521,11 +7531,18 @@ + +@@ -7357,11 +7367,18 @@ rtl_ethtool_get_eee(struct net_device *n } - + static int +#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,9,0) +rtl_ethtool_set_eee(struct net_device *net, struct ethtool_keee *edata) @@ -45,11 +45,11 @@ + u32 adv; +#endif int rc = 0; - + if (!HW_HAS_WRITE_PHY_MCU_RAM_CODE(tp) || -@@ -7557,6 +7574,18 @@ +@@ -7393,6 +7410,18 @@ rtl_ethtool_set_eee(struct net_device *n */ - + advertising = tp->advertising; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,9,0) + ethtool_convert_link_mode_to_legacy_u32(&adv, edata->advertised); @@ -66,12 +66,12 @@ if (!edata->advertised) { edata->advertised = advertising & eee->supported; } else if (edata->advertised & ~advertising) { -@@ -7565,13 +7594,23 @@ +@@ -7401,18 +7430,32 @@ rtl_ethtool_set_eee(struct net_device *n rc = -EINVAL; goto out; } +#endif - + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,9,0) + if (!linkmode_empty(edata->advertised) & ~eee->supported) { + dev_printk(KERN_WARNING, tp_to_dev(tp), "EEE advertised %x must be a subset of support %x\n", @@ -87,13 +87,10 @@ goto out; } +#endif - + //tp->eee.eee_enabled = edata->eee_enabled; - //tp->eee_adv_t = ethtool_adv_to_mmd_eee_adv_t(edata->advertised); -@@ -7579,7 +7618,11 @@ - dev_printk(KERN_WARNING, tp_to_dev(tp), "EEE tx_lpi_timer %x must be a subset of support %x\n", - edata->tx_lpi_timer, eee->tx_lpi_timer); - + //tp->eee_adv_t = rtl8125_ethtool_adv_to_mmd_eee_adv_cap1_t(edata->advertised); + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,9,0) + ethtool_convert_link_mode_to_legacy_u32(&eee->advertised, edata->advertised); +#else diff --git a/lede/package/kernel/r8125/patches/200-r8125-print-link-speed-and-duplex-mode.patch b/lede/package/kernel/r8125/patches/200-r8125-print-link-speed-and-duplex-mode.patch index ac64afad46..6177212530 100644 --- a/lede/package/kernel/r8125/patches/200-r8125-print-link-speed-and-duplex-mode.patch +++ b/lede/package/kernel/r8125/patches/200-r8125-print-link-speed-and-duplex-mode.patch @@ -17,11 +17,12 @@ Signed-off-by: Álvaro Fernández Rojas --- a/src/r8125.h +++ b/src/r8125.h -@@ -1672,6 +1672,8 @@ enum RTL8125_register_content { +@@ -1687,6 +1687,9 @@ enum RTL8125_register_content { LinkStatus = 0x02, FullDup = 0x01, +#define RTL8125_FULL_DUPLEX_MASK (_2500bpsF | _1000bpsF | FullDup) ++#define RTL8125_SPEED_1000_MASK (_1000bpsF | _1000bpsL | _2500bpsL) + /* DBG_reg */ Fix_Nak_1 = (1 << 4), @@ -36,11 +37,11 @@ Signed-off-by: Álvaro Fernández Rojas #include #include #include -@@ -5116,6 +5117,38 @@ rtl8125_link_down_patch(struct net_devic +@@ -5023,6 +5024,38 @@ rtl8125_link_down_patch(struct net_devic #endif } -+static unsigned int rtl8125_phy_duplex(u16 status) ++static unsigned int rtl8125_phy_duplex(u32 status) +{ + unsigned int duplex = DUPLEX_UNKNOWN; + @@ -54,14 +55,14 @@ Signed-off-by: Álvaro Fernández Rojas + return duplex; +} + -+static int rtl8125_phy_speed(u16 status) ++static int rtl8125_phy_speed(u32 status) +{ + int speed = SPEED_UNKNOWN; + + if (status & LinkStatus) { + if (status & _2500bpsF) + speed = SPEED_2500; -+ else if (status & _1000bpsF) ++ else if (status & RTL8125_SPEED_1000_MASK) + speed = SPEED_1000; + else if (status & _100bps) + speed = SPEED_100; @@ -75,14 +76,14 @@ Signed-off-by: Álvaro Fernández Rojas static void _rtl8125_check_link_status(struct net_device *dev, unsigned int link_state) { -@@ -5128,11 +5161,18 @@ _rtl8125_check_link_status(struct net_de +@@ -5035,11 +5068,18 @@ _rtl8125_check_link_status(struct net_de if (link_state == R8125_LINK_STATE_ON) { rtl8125_link_on_patch(dev); - if (netif_msg_ifup(tp)) - printk(KERN_INFO PFX "%s: link up\n", dev->name); + if (netif_msg_ifup(tp)) { -+ const u16 phy_status = RTL_R16(tp, PHYstatus); ++ const u32 phy_status = RTL_R32(tp, PHYstatus); + const unsigned int phy_duplex = rtl8125_phy_duplex(phy_status); + const int phy_speed = rtl8125_phy_speed(phy_status); + printk(KERN_INFO PFX "%s: Link is Up - %s/%s\n", diff --git a/lede/package/kernel/r8125/patches/300-r8125-add-LED-configuration-from-OF.patch b/lede/package/kernel/r8125/patches/300-r8125-add-LED-configuration-from-OF.patch index 198606da7d..4e92edcc05 100644 --- a/lede/package/kernel/r8125/patches/300-r8125-add-LED-configuration-from-OF.patch +++ b/lede/package/kernel/r8125/patches/300-r8125-add-LED-configuration-from-OF.patch @@ -8,7 +8,7 @@ #include #include #include -@@ -14756,6 +14757,22 @@ rtl8125_setup_mqs_reg(struct rtl8125_pri +@@ -14265,6 +14266,22 @@ rtl8125_setup_mqs_reg(struct rtl8125_pri } static void @@ -31,7 +31,7 @@ rtl8125_init_software_variable(struct net_device *dev) { struct rtl8125_private *tp = netdev_priv(dev); -@@ -15358,6 +15375,7 @@ rtl8125_init_software_variable(struct ne +@@ -14720,6 +14737,7 @@ rtl8125_init_software_variable(struct ne else if (tp->InitRxDescType == RX_DESC_RING_TYPE_4) tp->rtl8125_rx_config &= ~EnableRxDescV4_1; diff --git a/lede/package/kernel/r8126/Makefile b/lede/package/kernel/r8126/Makefile index acf82a9930..3fc8a6cc05 100644 --- a/lede/package/kernel/r8126/Makefile +++ b/lede/package/kernel/r8126/Makefile @@ -1,12 +1,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=r8126 -PKG_VERSION:=10.014.01 +PKG_VERSION:=10.015.00 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 PKG_SOURCE_URL:=https://github.com/openwrt/rtl8126/releases/download/$(PKG_VERSION) -PKG_HASH:=dbb10a7abd0972e4abd1b89ea4eb22fc55d6c1dc2f711b5acf4a3bc376275e21 +PKG_HASH:=fac513aa925264a95b053e7532fcda56022d29db288f6625fafee2759a8a6124 PKG_BUILD_PARALLEL:=1 PKG_LICENSE:=GPLv2 diff --git a/lede/package/kernel/r8126/patches/200-r8126-print-link-speed-and-duplex-mode.patch b/lede/package/kernel/r8126/patches/200-r8126-print-link-speed-and-duplex-mode.patch index ab8be04015..8b85de6736 100644 --- a/lede/package/kernel/r8126/patches/200-r8126-print-link-speed-and-duplex-mode.patch +++ b/lede/package/kernel/r8126/patches/200-r8126-print-link-speed-and-duplex-mode.patch @@ -17,11 +17,13 @@ Signed-off-by: Álvaro Fernández Rojas --- a/src/r8126.h +++ b/src/r8126.h -@@ -1740,6 +1740,8 @@ enum RTL8126_register_content { +@@ -1756,6 +1756,10 @@ enum RTL8126_register_content { LinkStatus = 0x02, FullDup = 0x01, +#define RTL8126_FULL_DUPLEX_MASK (_5000bpsF | _2500bpsF | _1000bpsF | FullDup) ++#define RTL8126_SPEED_1000_MASK (_1000bpsF | _1000bpsL | _2500bpsL) ++#define RTL8126_SPEED_2500_MASK (_2500bpsF | _5000bpsL) + /* DBG_reg */ Fix_Nak_1 = (1 << 4), @@ -36,11 +38,11 @@ Signed-off-by: Álvaro Fernández Rojas #include #include #include -@@ -4744,6 +4745,40 @@ rtl8126_link_down_patch(struct net_devic +@@ -4661,6 +4662,40 @@ rtl8126_link_down_patch(struct net_devic #endif } -+static unsigned int rtl8126_phy_duplex(u16 status) ++static unsigned int rtl8126_phy_duplex(u32 status) +{ + unsigned int duplex = DUPLEX_UNKNOWN; + @@ -54,16 +56,16 @@ Signed-off-by: Álvaro Fernández Rojas + return duplex; +} + -+static int rtl8126_phy_speed(u16 status) ++static int rtl8126_phy_speed(u32 status) +{ + int speed = SPEED_UNKNOWN; + + if (status & LinkStatus) { + if (status & _5000bpsF) + speed = SPEED_5000; -+ else if (status & _2500bpsF) ++ else if (status & RTL8126_SPEED_2500_MASK) + speed = SPEED_2500; -+ else if (status & _1000bpsF) ++ else if (status & RTL8126_SPEED_1000_MASK) + speed = SPEED_1000; + else if (status & _100bps) + speed = SPEED_100; @@ -77,14 +79,14 @@ Signed-off-by: Álvaro Fernández Rojas static void _rtl8126_check_link_status(struct net_device *dev, unsigned int link_state) { -@@ -4756,11 +4791,18 @@ _rtl8126_check_link_status(struct net_de +@@ -4673,11 +4708,18 @@ _rtl8126_check_link_status(struct net_de if (link_state == R8126_LINK_STATE_ON) { rtl8126_link_on_patch(dev); - if (netif_msg_ifup(tp)) - printk(KERN_INFO PFX "%s: link up\n", dev->name); + if (netif_msg_ifup(tp)) { -+ const u16 phy_status = RTL_R16(tp, PHYstatus); ++ const u32 phy_status = RTL_R32(tp, PHYstatus); + const unsigned int phy_duplex = rtl8126_phy_duplex(phy_status); + const int phy_speed = rtl8126_phy_speed(phy_status); + printk(KERN_INFO PFX "%s: Link is Up - %s/%s\n", diff --git a/naiveproxy/CHROMIUM_VERSION b/naiveproxy/CHROMIUM_VERSION index 8b0896e84b..b616f71fa4 100644 --- a/naiveproxy/CHROMIUM_VERSION +++ b/naiveproxy/CHROMIUM_VERSION @@ -1 +1 @@ -133.0.6943.49 +134.0.6998.39 diff --git a/naiveproxy/src/.gn b/naiveproxy/src/.gn index 44a11ec90e..3f65718281 100644 --- a/naiveproxy/src/.gn +++ b/naiveproxy/src/.gn @@ -90,7 +90,7 @@ no_check_targets = [ "//v8:v8_libplatform", # 2 errors ] -# These are the list of GN files that run exec_script. This whitelist exists +# These are the list of GN files that run exec_script. This allowlist exists # to force additional review for new uses of exec_script, which is strongly # discouraged. # @@ -145,11 +145,11 @@ no_check_targets = [ # this situation much easier to create. if the build always lists the # files and passes them to a script, it will always be correct. -exec_script_whitelist = - build_dotfile_settings.exec_script_whitelist + +exec_script_allowlist = + build_dotfile_settings.exec_script_allowlist + angle_dotfile_settings.exec_script_whitelist + [ - # Whitelist entries for //build should go into + # Allowlist entries for //build should go into # //build/dotfile_settings.gni instead, so that they can be shared # with other repos. The entries in this list should be only for files # in the Chromium repo outside of //build. diff --git a/naiveproxy/src/AUTHORS b/naiveproxy/src/AUTHORS index 08171a56f2..e96a3afdab 100644 --- a/naiveproxy/src/AUTHORS +++ b/naiveproxy/src/AUTHORS @@ -118,6 +118,7 @@ Andreas Papacharalampous Andrei Borza Andrei Parvu Andrei Parvu +Andrei Volykhin Andres Salomon Andreu Botella Andrew Boyarshin @@ -312,6 +313,7 @@ Daniel Lockyer Daniel Nishi Daniel Platz Daniel Playfair Cal +Daniel Richard G. Daniel Shaulov Daniel Trebbien Daniel Waxweiler @@ -329,6 +331,7 @@ Darshini KN Dave Vandyke David Benjamin David Brown +David Cernoch David Davidovic David Erceg David Faden @@ -938,6 +941,7 @@ Martin Persson Martin Rogalla Martina Kollarova Martino Fontana +Marvin Giessing Masahiro Yado Masaru Nishida Masayuki Wakizaka @@ -977,6 +981,7 @@ Md Jobed Hossain Md Raiyan bin Sayeed Md. Sadiqul Amin Md Sami Uddin +Mego Tan Merajul Arefin Micha Hanselmann Michael Cirone @@ -1004,6 +1009,7 @@ Milko Leporis Milton Chiang Milutin Smiljanic Minchul Kang +Ming Lei Mingeun Park Minggang Wang Mingmin Xie @@ -1461,6 +1467,7 @@ Tom Harwood Tomas Popela Tomasz Edward Posłuszny Tony Shen +Topi Lassila Torsten Kurbad Toshihito Kikuchi Toshiaki Tanaka @@ -1512,6 +1519,7 @@ Wojciech Bielawski Wang Chen Wang Chen Wang Weiwei +Wang Zirui Wangyang Dai Wanming Lin Wei Li @@ -1646,6 +1654,7 @@ Zsolt Borbely 迷渡 郑苏波 (Super Zheng) 一丝 (Yisi) +林训杰 (XunJie Lin) # Please DO NOT APPEND here. See comments at the top of the file. # END individuals section. diff --git a/naiveproxy/src/DEPS b/naiveproxy/src/DEPS index 928234f52f..846076ad1c 100644 --- a/naiveproxy/src/DEPS +++ b/naiveproxy/src/DEPS @@ -224,7 +224,7 @@ vars = { # luci-go CIPD package version. # Make sure the revision is uploaded by infra-packagers builder. # https://ci.chromium.org/p/infra-internal/g/infra-packagers/console - 'luci_go': 'git_revision:320a8df0f7934159fda7721f3b507e707531d284', + 'luci_go': 'git_revision:c36fd1e86ba464371c3e6d817c14f2b40d43cb29', # This can be overridden, e.g. with custom_vars, to build clang from HEAD # instead of downloading the prebuilt pinned revision. @@ -243,17 +243,17 @@ vars = { # reclient CIPD package 'reclient_package': 'infra/rbe/client/', # reclient CIPD package version - 'reclient_version': 're_client_version:0.172.0.3cf60ba5-gomaip', + 'reclient_version': 're_client_version:0.175.0.98046de5-gomaip', # screen-ai CIPD packages - 'screen_ai_linux': 'version:127.8', - 'screen_ai_macos_amd64': 'version:127.8', - 'screen_ai_macos_arm64': 'version:127.8', - 'screen_ai_windows_amd64': 'version:127.8', - 'screen_ai_windows_386': 'version:127.8', + 'screen_ai_linux': 'version:127.14', + 'screen_ai_macos_amd64': 'version:127.14', + 'screen_ai_macos_arm64': 'version:127.14', + 'screen_ai_windows_amd64': 'version:127.14', + 'screen_ai_windows_386': 'version:127.14', # siso CIPD package version. - 'siso_version': 'git_revision:f9bfa081826a4ffb6f2a96b640d009cef900e69f', + 'siso_version': 'git_revision:0b6159c39573013a79a47f8544200df07a6a74fc', # download libaom test data 'download_libaom_testdata': False, @@ -276,35 +276,35 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. - 'src_internal_revision': '53adca0f257db63d7fb40aa9a7b7f3765945fcbe', + 'src_internal_revision': '2e824a94d03fa4ebf8bdba03e89345171424bf83', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Skia # and whatever else without interference from each other. - 'skia_revision': 'ecebe831881cdf52c65df518777210071f7970dd', + 'skia_revision': 'fb519f2fe5d4409bc0033a4ae00ab9a7095fe566', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. - 'v8_revision': 'fe051262efbbd92479a08436f733eba9f756e008', + 'v8_revision': 'debba63b78f8791411bff379835982cb2e8cabfa', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling ANGLE # and whatever else without interference from each other. - 'angle_revision': '8304737811a7851e2bfdcf6f667b68dbac4e962a', + 'angle_revision': '914c97c116e09ef01a99fbbbe9cd28cda56552c7', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. - 'swiftshader_revision': '52586b554f93e50bc67277c6031673ed23a8d903', + 'swiftshader_revision': '86cf34f50cbe5a9f35da7eedad0f4d4127fb8342', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling PDFium # and whatever else without interference from each other. - 'pdfium_revision': 'c674dba647e81805158339785c0c7e3b57643f8c', + 'pdfium_revision': '12f7715a6390050c5cffb7e4c9b2be1c2f2956d0', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling BoringSSL # and whatever else without interference from each other. - 'boringssl_revision': 'd777ea2a7004ff7ef40ef983b41a5125f316f898', + 'boringssl_revision': 'ea42fe28775844ec8fe0444fc421398be42d51fe', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Fuchsia sdk # and whatever else without interference from each other. - 'fuchsia_version': 'version:26.20250103.4.1', + 'fuchsia_version': 'version:27.20250130.7.1', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling google-toolbox-for-mac # and whatever else without interference from each other. @@ -312,7 +312,7 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling googletest # and whatever else without interference from each other. - 'googletest_revision': '7d76a231b0e29caf86e68d1df858308cd53b2a66', + 'googletest_revision': 'e235eb34c6c4fed790ccdad4b16394301360dcd4', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling lighttpd # and whatever else without interference from each other. @@ -324,19 +324,19 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling NaCl # and whatever else without interference from each other. - 'nacl_revision': '6944e6b79dbd1b9776681c025bd4f4c281bb4791', + 'nacl_revision': 'a4ea8c1d3f066dd9ff0d41be07d2ea02d00cee9b', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling freetype # and whatever else without interference from each other. - 'freetype_revision': 'afc7000cacb8cc90ae61036858c5306defa1236a', + 'freetype_revision': 'b1f47850878d232eea372ab167e760ccac4c4e32', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling freetype # and whatever else without interference from each other. - 'freetype_testing_revision': '7a69b1a2b028476f840ab7d4a2ffdfe4eb2c389f', + 'freetype_testing_revision': '04fa94191645af39750f5eff0a66c49c5cb2c2cc', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling HarfBuzz # and whatever else without interference from each other. - 'harfbuzz_revision': '1c249be96e27eafd15eb86d832b67fbc3751634b', + 'harfbuzz_revision': '6d8035a99c279e32183ad063f0de201ef1b2f05c', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Emoji Segmenter # and whatever else without interference from each other. @@ -348,15 +348,15 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling catapult # and whatever else without interference from each other. - 'catapult_revision': '8e5d239c953a309d4bf8aa70481bafa921834cc3', + 'catapult_revision': 'd5166861902b565df446e15181eba270fe168275', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling chromium_variations # and whatever else without interference from each other. - 'chromium_variations_revision': '0fcd7c5b11aca584c5c03b2af870c9f3af6c631c', + 'chromium_variations_revision': '84c18c7a0205fbd0a27b0214b16ded7fc44dc062', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling CrossBench # and whatever else without interference from each other. - 'crossbench_revision': '1b41ed2574ef931f2d1157ebb153c9d552f69670', + 'crossbench_revision': '0391f0d11cbf3cf3c5bcf82e19e9d9839b1936ed', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libFuzzer # and whatever else without interference from each other. @@ -364,7 +364,7 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling fuzztest # and whatever else without interference from each other. - 'fuzztest_revision': '3b4a590f7fc75a77823580c4c4e19d1c7bd6da52', + 'fuzztest_revision': '44ac6c2594a880edbb9cb1e4e197c2b53d078130', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling domato # and whatever else without interference from each other. @@ -372,7 +372,7 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling devtools-frontend # and whatever else without interference from each other. - 'devtools_frontend_revision': '41deafc3d1ae776a97d8fd1cfb457a06908e3a6d', + 'devtools_frontend_revision': '044764a564924c9aa0897ba8c50149acc7ddf364', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libprotobuf-mutator # and whatever else without interference from each other. @@ -396,15 +396,15 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. - 'dawn_revision': 'd4321eef8c5c94107783d903355c1cbbbb8a3776', + 'dawn_revision': '7056f50fdefc6bc46aa442e720d0336e2855b570', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. - 'quiche_revision': '981c424462d9e5210dc843e92b325c93d3bee4e9', + 'quiche_revision': 'e7d001c82ee5bead5140481671828d5e156a525a', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling ink # and whatever else without interference from each other. - 'ink_revision': 'e5673a4ff2d82f29b22f7bec114161cbc1ff8cf8', + 'ink_revision': 'bf387a71d7def4b48bf24c8e09d412dfb9962746', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling ink_stroke_modeler # and whatever else without interference from each other. @@ -422,17 +422,13 @@ vars = { # and whatever else without interference from each other. 'wuffs_revision': 'e3f919ccfe3ef542cfc983a82146070258fb57f8', # Three lines of non-changing comments so that - # the commit queue can handle CLs rolling libavif - # and whatever else without interference from each other. - 'libavif_revision': 'e9a27bc6a84f01b6670c05c301c445f33a464992', - # Three lines of non-changing comments so that # the commit queue can handle CLs rolling crabbyavif # and whatever else without interference from each other. - 'crabbyavif_revision': '879ca873d6648a01de65e4cb0b86336b581aa513', + 'crabbyavif_revision': 'c5938b119ef52f9ff628436c1e66c9a5322ece83', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Speedometer v3.0 # and whatever else without interference from each other. - 'speedometer_main_revision': '67bc21f1f44567a3ba41d7a3d8d0bec0e74f4a9e', + 'speedometer_main_revision': 'd6b5ffea959ad31e231c203d7446bf8b39e987ce', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Speedometer v3.0 # and whatever else without interference from each other. @@ -448,7 +444,7 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling nearby # and whatever else without interference from each other. - 'nearby_revision': '1864b0b55506bfc1eafc3785502f085f41aa0921', + 'nearby_revision': '97690c6996f683a6f3e07d75fc4557958c55ac7b', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling securemessage # and whatever else without interference from each other. @@ -460,7 +456,7 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. - 'cros_components_revision': '59dd6e3d06e111c6a3d323a92e6478b9bbf15915', + 'cros_components_revision': '1f1c782f06956a2deb5d33f09c466e4852099c71', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -468,11 +464,11 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. - 'libcxxabi_revision': '83dfa1f5bfce32d5f75695542468e37ead8163b8', + 'libcxxabi_revision': '634228a732a1d9ae1a6d459556e8fc58707cf961', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. - 'libunwind_revision': 'd1e95b102f113ded38974cf06a65fe0457b6004b', + 'libunwind_revision': 'e55d8cf51c6db1fdd4bb56c158945ec59772c8ee', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -496,14 +492,14 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling llvm-libc # and whatever else without interference from each other. - 'llvm_libc_revision': '039fea2058d14b408637a931b36a717169617227', + 'llvm_libc_revision': '6d0c8ee02e2fd44e69ac30e721e13be463035ee5', # If you change this, also update the libc++ revision in # //buildtools/deps_revisions.gni. - 'libcxx_revision': '1f7db7501cf902d5d3ad5fd9b31bea33bb8bf9da', + 'libcxx_revision': '2e25154d49c29fa9aa42c30ad4a027bd30123434', # GN CIPD package version. - 'gn_version': 'git_revision:c97a86a72105f3328a540f5a5ab17d11989ab7dd', + 'gn_version': 'git_revision:ed1abc107815210dc66ec439542bee2f6cbabc00', # ninja CIPD package. 'ninja_package': 'infra/3pp/tools/ninja/', @@ -575,10 +571,10 @@ deps = { 'dep_type': 'gcs', 'objects': [ { - 'generation': 1714590045814759, - 'object_name': 'dec7a3a0fc5b83b909cba1b6d119077e0429a138eadef6bf5a0f2e03b1904631', - 'sha256sum': 'dec7a3a0fc5b83b909cba1b6d119077e0429a138eadef6bf5a0f2e03b1904631', - 'size_bytes': 129948576, + 'generation': 1738186811481804, + 'object_name': 'ac6166be1352e9e66a7574e0d6891c90868a564dd26b52ba6595db28cb81c9f1', + 'sha256sum': 'ac6166be1352e9e66a7574e0d6891c90868a564dd26b52ba6595db28cb81c9f1', + 'size_bytes': 19716896, }, ], }, @@ -588,10 +584,10 @@ deps = { 'dep_type': 'gcs', 'objects': [ { - 'generation': 1714589974958986, - 'object_name': '308e23faba3174bd01accfe358467b8a40fad4db4c49ef629da30219f65a275f', - 'sha256sum': '308e23faba3174bd01accfe358467b8a40fad4db4c49ef629da30219f65a275f', - 'size_bytes': 108470444, + 'generation': 1738186807601616, + 'object_name': '963550f05d3325262f6a601ee5ff82a1c84da639b11d5dea6d9f3ac5fbf299f7', + 'sha256sum': '963550f05d3325262f6a601ee5ff82a1c84da639b11d5dea6d9f3ac5fbf299f7', + 'size_bytes': 18408964, }, ], }, @@ -601,10 +597,10 @@ deps = { 'dep_type': 'gcs', 'objects': [ { - 'generation': 1714589870087834, - 'object_name': 'fe81e7114b97440262bce004caf02c1514732e2fa7f99693b2836932ad1c4626', - 'sha256sum': 'fe81e7114b97440262bce004caf02c1514732e2fa7f99693b2836932ad1c4626', - 'size_bytes': 99265992, + 'generation': 1738186801749657, + 'object_name': '6b89f9afce71ceb0ba5e6430996abbda73092dc0fb8cc4e9167e298f89a8b725', + 'sha256sum': '6b89f9afce71ceb0ba5e6430996abbda73092dc0fb8cc4e9167e298f89a8b725', + 'size_bytes': 18375680, }, ], }, @@ -614,10 +610,10 @@ deps = { 'dep_type': 'gcs', 'objects': [ { - 'generation': 1714589989387491, - 'object_name': 'b53933120bb08ffc38140a817e3f0f99782254a6bf9622271574fa004e8783a4', - 'sha256sum': 'b53933120bb08ffc38140a817e3f0f99782254a6bf9622271574fa004e8783a4', - 'size_bytes': 122047968, + 'generation': 1738186808868372, + 'object_name': 'b62fcf15801fee0ae59e69ab515aaf4941e855d5ce342a002a7ac75185c293d7', + 'sha256sum': 'b62fcf15801fee0ae59e69ab515aaf4941e855d5ce342a002a7ac75185c293d7', + 'size_bytes': 19769972, }, ], }, @@ -627,10 +623,10 @@ deps = { 'dep_type': 'gcs', 'objects': [ { - 'generation': 1714590006168779, - 'object_name': '783cb79f26736c69e8125788d95ffb65a28172349009d75188838a004280a92b', - 'sha256sum': '783cb79f26736c69e8125788d95ffb65a28172349009d75188838a004280a92b', - 'size_bytes': 103362108, + 'generation': 1738186802302544, + 'object_name': '2b5e7783121b184b5847ee9ab24da09763b593d312ef91a619f12f03569dad02', + 'sha256sum': '2b5e7783121b184b5847ee9ab24da09763b593d312ef91a619f12f03569dad02', + 'size_bytes': 19040956, }, ], }, @@ -640,10 +636,23 @@ deps = { 'dep_type': 'gcs', 'objects': [ { - 'generation': 1714589936675352, - 'object_name': 'fcf8c3931476dd097c58f2f5d44621c7090b135e85ab56885aa4b44f4bd6cdb5', - 'sha256sum': 'fcf8c3931476dd097c58f2f5d44621c7090b135e85ab56885aa4b44f4bd6cdb5', - 'size_bytes': 96161964, + 'generation': 1738186809356214, + 'object_name': 'e83949b9242fb00d38a93c3c4b043e473135a1a8f99aa53af3642cbc4edb86ab', + 'sha256sum': 'e83949b9242fb00d38a93c3c4b043e473135a1a8f99aa53af3642cbc4edb86ab', + 'size_bytes': 18936452, + }, + ], + }, + 'src/build/linux/debian_bullseye_ppc64el-sysroot': { + 'bucket': 'chrome-linux-sysroot', + 'condition': 'checkout_linux and checkout_ppc and non_git_source', + 'dep_type': 'gcs', + 'objects': [ + { + 'generation': 1738186808800578, + 'object_name': '52044855dbbb7056a5ff2a51c88faca856278ca3ebf1c5c088704cf633d7e39c', + 'sha256sum': '52044855dbbb7056a5ff2a51c88faca856278ca3ebf1c5c088704cf633d7e39c', + 'size_bytes': 18586988, }, ], }, @@ -707,7 +716,7 @@ deps = { 'packages': [ { 'package': 'chrome_internal/third_party/google3/data_sharing_sdk', - 'version': 'auu6Zggy4Soot7tUJT28qMhahwQ0zuXEmd1b3EGcpeEC', + 'version': '1AiuMQvftg7NphwiFSv3eX_FyV67nakduSoBatfsKNIC', }, ], 'condition': 'checkout_src_internal and non_git_source', @@ -799,143 +808,143 @@ deps = { 'objects': [ { # The Android libclang_rt.builtins libraries are currently only included in the Linux clang package. - 'object_name': 'Linux_x64/clang-llvmorg-20-init-16062-g091448e3-1.tar.xz', - 'sha256sum': '312f81ba0a77fb66f077f4af105fed1ae3f7068c63127b79c560336befd7e957', - 'size_bytes': 54162056, - 'generation': 1734710928554494, + 'object_name': 'Linux_x64/clang-llvmorg-20-init-17108-g29ed6000-3.tar.xz', + 'sha256sum': 'c6a9f5cf8a1f3e7a6d3e58ec1d9555379317ae07a7a725cac74c9b6b9eef30e3', + 'size_bytes': 54170388, + 'generation': 1737979737856872, 'condition': '(host_os == "linux" or checkout_android) and non_git_source', }, { - 'object_name': 'Linux_x64/clang-tidy-llvmorg-20-init-16062-g091448e3-1.tar.xz', - 'sha256sum': '53b1db6cc843ffca33075ced2ebb02f288dfe96377b53d1ca7c873b7c15cbb91', - 'size_bytes': 13132028, - 'generation': 1734710928725653, + 'object_name': 'Linux_x64/clang-tidy-llvmorg-20-init-17108-g29ed6000-3.tar.xz', + 'sha256sum': 'e2ae13bd4de46ea5d40c40bc3636f8efd14b65a6f68910f5a748ddc0781df9ba', + 'size_bytes': 13156884, + 'generation': 1737979738052976, 'condition': 'host_os == "linux" and checkout_clang_tidy and non_git_source', }, { - 'object_name': 'Linux_x64/clangd-llvmorg-20-init-16062-g091448e3-1.tar.xz', - 'sha256sum': '8a104f0285327201712496fe039425f859002dc9ecdec52b00f86122097adce0', - 'size_bytes': 27649620, - 'generation': 1734710928800469, + 'object_name': 'Linux_x64/clangd-llvmorg-20-init-17108-g29ed6000-3.tar.xz', + 'sha256sum': '3211cea97f1d5ed2f377d2c292e60f5fe4559eea7de277e6c27a2fc610e8f60b', + 'size_bytes': 27723916, + 'generation': 1737979738202360, 'condition': 'host_os == "linux" and checkout_clangd and non_git_source', }, { - 'object_name': 'Linux_x64/llvm-code-coverage-llvmorg-20-init-16062-g091448e3-1.tar.xz', - 'sha256sum': 'b461b1ef2783b55403eb5002cb2a5e4a833b668cf6983457cb9e8b341b9b0cba', - 'size_bytes': 2291412, - 'generation': 1734710929037009, + 'object_name': 'Linux_x64/llvm-code-coverage-llvmorg-20-init-17108-g29ed6000-3.tar.xz', + 'sha256sum': '7c7c375be9f537278561eff1f586477ae441fe05a31cda8096684fdf49acd02f', + 'size_bytes': 2290180, + 'generation': 1737979738680937, 'condition': 'host_os == "linux" and checkout_clang_coverage_tools and non_git_source', }, { - 'object_name': 'Linux_x64/llvmobjdump-llvmorg-20-init-16062-g091448e3-1.tar.xz', - 'sha256sum': 'fd415f35825401b91c02bb4883bab3ee0bb2981fa3c83268242dbb83da494a17', - 'size_bytes': 5374952, - 'generation': 1734710928876309, + 'object_name': 'Linux_x64/llvmobjdump-llvmorg-20-init-17108-g29ed6000-3.tar.xz', + 'sha256sum': '2ca3b64e63bc86198798198473bc9a978c55c0f16afe43316f1b0946a7743b56', + 'size_bytes': 5340940, + 'generation': 1737979738712289, 'condition': '(checkout_linux or checkout_mac or checkout_android and host_os != "mac") and non_git_source', }, { - 'object_name': 'Mac/clang-llvmorg-20-init-16062-g091448e3-1.tar.xz', - 'sha256sum': 'a87e78f91148b227e2791606f1d6491e65a3343e488a5d9afb28739e89b892b9', - 'size_bytes': 49075240, - 'generation': 1734710930234741, + 'object_name': 'Mac/clang-llvmorg-20-init-17108-g29ed6000-3.tar.xz', + 'sha256sum': '5221d33f71549c0fb53e239e2709ada8fbbb5c9d6b4340f1a5bd89b7c3e3361a', + 'size_bytes': 49144068, + 'generation': 1737979740504215, 'condition': 'host_os == "mac" and host_cpu == "x64"', }, { - 'object_name': 'Mac/clang-mac-runtime-library-llvmorg-20-init-16062-g091448e3-1.tar.xz', - 'sha256sum': '6126aa8fb58ac245aa3fcc3da7500aa218943a062a66b10facf9034dff50b837', - 'size_bytes': 973872, - 'generation': 1734710937791397, + 'object_name': 'Mac/clang-mac-runtime-library-llvmorg-20-init-17108-g29ed6000-3.tar.xz', + 'sha256sum': '1f0564b2e61067ca7317a179b4c680efb1b9e4f070f449e57e6638a3d93edf11', + 'size_bytes': 975572, + 'generation': 1737979760834327, 'condition': 'checkout_mac and not host_os == "mac"', }, { - 'object_name': 'Mac/clang-tidy-llvmorg-20-init-16062-g091448e3-1.tar.xz', - 'sha256sum': '4c64b2240cb7b914f688e63359af9f12c05ade20c2fc535a77269e4ab791c1c3', - 'size_bytes': 12745672, - 'generation': 1734710930422203, + 'object_name': 'Mac/clang-tidy-llvmorg-20-init-17108-g29ed6000-3.tar.xz', + 'sha256sum': '19765faea4a8d0b531417492153ac6701d6e3b78b06683a549848b5a93ffda70', + 'size_bytes': 12769100, + 'generation': 1737979741149075, 'condition': 'host_os == "mac" and host_cpu == "x64" and checkout_clang_tidy', }, { - 'object_name': 'Mac/clangd-llvmorg-20-init-16062-g091448e3-1.tar.xz', - 'sha256sum': '108cb2d05898954bbecb6ea7f0892f89f2ec4956d91e360fbf62dc200cc28582', - 'size_bytes': 26510732, - 'generation': 1734710930517598, + 'object_name': 'Mac/clangd-llvmorg-20-init-17108-g29ed6000-3.tar.xz', + 'sha256sum': '9fadb52c6684e176ff5d262175100e24807053ab5123ce12f3655fd5b80ebddd', + 'size_bytes': 26564472, + 'generation': 1737979741277920, 'condition': 'host_os == "mac" and host_cpu == "x64" and checkout_clangd', }, { - 'object_name': 'Mac/llvm-code-coverage-llvmorg-20-init-16062-g091448e3-1.tar.xz', - 'sha256sum': '227998c40ca12ed2e35c45f306baeee7b8e0e44ee149ddc85aece82ff6964aad', - 'size_bytes': 2249192, - 'generation': 1734710930772724, + 'object_name': 'Mac/llvm-code-coverage-llvmorg-20-init-17108-g29ed6000-3.tar.xz', + 'sha256sum': 'd250168bcfee74716512a90f10954dbd56ddc76cb2f72419831597b4179d87ae', + 'size_bytes': 2252028, + 'generation': 1737979742376561, 'condition': 'host_os == "mac" and host_cpu == "x64" and checkout_clang_coverage_tools', }, { - 'object_name': 'Mac_arm64/clang-llvmorg-20-init-16062-g091448e3-1.tar.xz', - 'sha256sum': '7783806795f320f06abf77f8066e64448a101a1a40695ba6252b9c6315b7fdf2', - 'size_bytes': 43083188, - 'generation': 1734710939037981, + 'object_name': 'Mac_arm64/clang-llvmorg-20-init-17108-g29ed6000-3.tar.xz', + 'sha256sum': 'f833b2a2f67fdba55888568aabfe4af798c40656e39d4618c1260784911990ee', + 'size_bytes': 43140044, + 'generation': 1737979762194506, 'condition': 'host_os == "mac" and host_cpu == "arm64"', }, { - 'object_name': 'Mac_arm64/clang-tidy-llvmorg-20-init-16062-g091448e3-1.tar.xz', - 'sha256sum': '6d90f4b059a505baf0090ccbc8bf3a55a4d17715569645e575d47cff60d4ddd4', - 'size_bytes': 11350532, - 'generation': 1734710939102253, + 'object_name': 'Mac_arm64/clang-tidy-llvmorg-20-init-17108-g29ed6000-3.tar.xz', + 'sha256sum': '6755fb74c665dd95f4b1c6a1673511409457f630ccc76597f36a524262c8f294', + 'size_bytes': 11366344, + 'generation': 1737979762841762, 'condition': 'host_os == "mac" and host_cpu == "arm64" and checkout_clang_tidy', }, { - 'object_name': 'Mac_arm64/clangd-llvmorg-20-init-16062-g091448e3-1.tar.xz', - 'sha256sum': '73de9e6907e145a21fc23125baeedfbca512121a0ed4417d6b180376cc14eb9d', - 'size_bytes': 22968152, - 'generation': 1734710939199537, + 'object_name': 'Mac_arm64/clangd-llvmorg-20-init-17108-g29ed6000-3.tar.xz', + 'sha256sum': '050775e5f4745eae59309debb366027b779a49ad2a7d2118719778a3d8cdfa58', + 'size_bytes': 23010960, + 'generation': 1737979762661022, 'condition': 'host_os == "mac" and host_cpu == "arm64" and checkout_clangd', }, { - 'object_name': 'Mac_arm64/llvm-code-coverage-llvmorg-20-init-16062-g091448e3-1.tar.xz', - 'sha256sum': 'bd7b522a4b5f1a8741d41fe7bab3a36ff1dccba093ec3eed9cb32dce48c86b6a', - 'size_bytes': 1975468, - 'generation': 1734710939499752, + 'object_name': 'Mac_arm64/llvm-code-coverage-llvmorg-20-init-17108-g29ed6000-3.tar.xz', + 'sha256sum': 'a8801c35a54ea6e270f653377b2050abcebf1460a9ac7d0b7413e1b9b77d0af2', + 'size_bytes': 1976852, + 'generation': 1737979763119024, 'condition': 'host_os == "mac" and host_cpu == "arm64" and checkout_clang_coverage_tools', }, { - 'object_name': 'Win/clang-llvmorg-20-init-16062-g091448e3-1.tar.xz', - 'sha256sum': '1b197f968fdc7e5a9a4ce3c76f8490d5b35877fca755771510a9e9292275128f', - 'size_bytes': 46308816, - 'generation': 1734710948582253, + 'object_name': 'Win/clang-llvmorg-20-init-17108-g29ed6000-3.tar.xz', + 'sha256sum': 'f85d42c59a85f0a0bbdace7884ead38b2f0524c454e1d19af1e9739f26452951', + 'size_bytes': 46349424, + 'generation': 1737979785741764, 'condition': 'host_os == "win"', }, { - 'object_name': 'Win/clang-tidy-llvmorg-20-init-16062-g091448e3-1.tar.xz', - 'sha256sum': '3a2fb754132ced5c22ef6dec34e411b07947c0e03ff7c05db60c8923c23814b6', - 'size_bytes': 12944020, - 'generation': 1734710948743476, + 'object_name': 'Win/clang-tidy-llvmorg-20-init-17108-g29ed6000-3.tar.xz', + 'sha256sum': 'f7c45d0ef4b85f97d59c197cd8676d67b53a838a2a542002f703f9caafb3ce3a', + 'size_bytes': 12968388, + 'generation': 1737979785989137, 'condition': 'host_os == "win" and checkout_clang_tidy', }, { - 'object_name': 'Win/clang-win-runtime-library-llvmorg-20-init-16062-g091448e3-1.tar.xz', - 'sha256sum': 'b0db5463446fdc218f4ae998c6f78d275c274fe023dd2f9d78941c01827dcd46', - 'size_bytes': 2457348, - 'generation': 1734710956415612, + 'object_name': 'Win/clang-win-runtime-library-llvmorg-20-init-17108-g29ed6000-3.tar.xz', + 'sha256sum': 'f4debb41e8929585957fbbf924f7569d01f27a7f9fc0aa0e36638cad189c1763', + 'size_bytes': 2458076, + 'generation': 1737979807456919, 'condition': 'checkout_win and not host_os == "win"', }, { - 'object_name': 'Win/clangd-llvmorg-20-init-16062-g091448e3-1.tar.xz', - 'sha256sum': 'f6a920b6f0325133affac130eab0ab27dc2cc602a0ab604660b526ed2e0d4914', - 'size_bytes': 25572060, - 'generation': 1734710948820492, + 'object_name': 'Win/clangd-llvmorg-20-init-17108-g29ed6000-3.tar.xz', + 'sha256sum': '5335d1aa460fa436192d8af92d63c8b8309217623886ce63888af32657937e32', + 'size_bytes': 25591096, + 'generation': 1737979786486441, 'condition': 'host_os == "win" and checkout_clangd', }, { - 'object_name': 'Win/llvm-code-coverage-llvmorg-20-init-16062-g091448e3-1.tar.xz', - 'sha256sum': '29b1eb6e91a1a084632f2621911c1f835eef9411275b6741d961e2eac4efe0d3', - 'size_bytes': 2360676, - 'generation': 1734710949094107, + 'object_name': 'Win/llvm-code-coverage-llvmorg-20-init-17108-g29ed6000-3.tar.xz', + 'sha256sum': '4802396a59eee144697484da2f7f2c72536ca8dd6a03c18a9cea63eb0aa221d9', + 'size_bytes': 2362756, + 'generation': 1737979786553080, 'condition': 'host_os == "win" and checkout_clang_coverage_tools', }, { - 'object_name': 'Win/llvmobjdump-llvmorg-20-init-16062-g091448e3-1.tar.xz', - 'sha256sum': '958f0271bac109b5b6952ed3a84b7e334d0392f847d2038334dbb61688574ed0', - 'size_bytes': 5455196, - 'generation': 1734710948890307, + 'object_name': 'Win/llvmobjdump-llvmorg-20-init-17108-g29ed6000-3.tar.xz', + 'sha256sum': '43faae6a83eb2dc4e8bae16b7627b9e1aa0dd21225f5cf4369f942f965e2647a', + 'size_bytes': 5442064, + 'generation': 1737979786291120, 'condition': 'checkout_linux or checkout_mac or checkout_android and host_os == "win"', }, ] @@ -946,31 +955,31 @@ deps = { 'bucket': 'chromium-browser-clang', 'objects': [ { - 'object_name': 'Linux_x64/rust-toolchain-8a1f8039a7ded79d3d4fe97b110016d89f2b11e2-1-llvmorg-20-init-16062-g091448e3.tar.xz', - 'sha256sum': 'd95be7651ce879e92b18949e1228775e01352960600ed4ff389815ce8848676d', - 'size_bytes': 124379804, - 'generation': 1734710923416010, + 'object_name': 'Linux_x64/rust-toolchain-ad211ced81509462cdfe4c29ed10f97279a0acae-1-llvmorg-20-init-17108-g29ed6000.tar.xz', + 'sha256sum': '1363529d7285ca8623c6408d49419921d459bbc461fa26ae57f5b5a620a57cc2', + 'size_bytes': 124591376, + 'generation': 1736456746490086, 'condition': 'host_os == "linux" and non_git_source', }, { - 'object_name': 'Mac/rust-toolchain-8a1f8039a7ded79d3d4fe97b110016d89f2b11e2-1-llvmorg-20-init-16062-g091448e3.tar.xz', - 'sha256sum': '01b25314a55fe0818b1f0b5ea8a8c6a469408618bb20f74f1e744c3d64b6c3eb', - 'size_bytes': 117354480, - 'generation': 1734710924611322, + 'object_name': 'Mac/rust-toolchain-ad211ced81509462cdfe4c29ed10f97279a0acae-1-llvmorg-20-init-17108-g29ed6000.tar.xz', + 'sha256sum': 'bc2446c14bf6316ab2a5797b65daf229aecb65e1fa25184ec740137196ec111e', + 'size_bytes': 117535632, + 'generation': 1736456748324065, 'condition': 'host_os == "mac" and host_cpu == "x64"', }, { - 'object_name': 'Mac_arm64/rust-toolchain-8a1f8039a7ded79d3d4fe97b110016d89f2b11e2-1-llvmorg-20-init-16062-g091448e3.tar.xz', - 'sha256sum': '0bb931bdb9e68573a8ad8298d6ecd50a3cc9d37ba9af492aa386aedab25517e6', - 'size_bytes': 102273988, - 'generation': 1734710925809018, + 'object_name': 'Mac_arm64/rust-toolchain-ad211ced81509462cdfe4c29ed10f97279a0acae-1-llvmorg-20-init-17108-g29ed6000.tar.xz', + 'sha256sum': '879947f21091c62096297c34c3e0a3f2e1f79260fb9b3c3c40091d62c65fb04e', + 'size_bytes': 102626588, + 'generation': 1736456750286270, 'condition': 'host_os == "mac" and host_cpu == "arm64"', }, { - 'object_name': 'Win/rust-toolchain-8a1f8039a7ded79d3d4fe97b110016d89f2b11e2-1-llvmorg-20-init-16062-g091448e3.tar.xz', - 'sha256sum': 'd709f967e0dcfa8aaba98b98111145e6f1e0b41aa0816c6e46144176b0c7d645', - 'size_bytes': 176629828, - 'generation': 1734710927011110, + 'object_name': 'Win/rust-toolchain-ad211ced81509462cdfe4c29ed10f97279a0acae-1-llvmorg-20-init-17108-g29ed6000.tar.xz', + 'sha256sum': '294a0a338bc46626b38d0d243f6f9a308dc2517cbf8961e2dc0edbf51b8d0ae9', + 'size_bytes': 176895424, + 'generation': 1736456752082017, 'condition': 'host_os == "win"', }, ], @@ -1016,7 +1025,7 @@ deps = { 'version': Var('reclient_version'), } ], - 'condition': 'non_git_source', + 'condition': '(host_cpu != "arm64" or host_os == "mac") and non_git_source', 'dep_type': 'cipd', }, @@ -1081,7 +1090,7 @@ deps = { 'packages': [ { 'package': 'chromium/third_party/cronet_android_mainline_clang/linux-amd64', - 'version': 'YBJ6tRxent4zFvyGNyAxWQ160dRHZ6vj7in9Al3VeGAC', + 'version': 'V0dPF9Cc6TYEaE6vsPyJoFO6xD2_NglmR7Gbqrp7d-sC', }, ], 'condition': 'checkout_android and host_os == "linux"', @@ -1092,7 +1101,7 @@ deps = { 'packages': [ { 'package': 'chromium/android_webview/tools/cts_archive', - 'version': 'UYQZhJpB3MWpJIAcesI-M1bqRoTghiKCYr_SD9tPDewC', + 'version': '8BpUBTnmt5bH3GiqPKpmTWTP-Ie2X1TuUgf4F0IsgVgC', }, ], 'condition': 'checkout_android and non_git_source', @@ -1110,7 +1119,7 @@ deps = { }, 'src/chrome/release_scripts': { - 'url': Var('chrome_git') + '/chrome/tools/release/scripts' + '@' + '2d23cdc03824f73a4fce61d34cbbe9828e56b962', + 'url': Var('chrome_git') + '/chrome/tools/release/scripts' + '@' + 'cc3ac97c66a56f4218fee70f28958eaf11ef5d66', 'condition': 'checkout_chrome_release_scripts', }, @@ -1439,21 +1448,21 @@ deps = { 'src/clank': { 'url': Var('chrome_git') + '/clank/internal/apps.git' + '@' + - 'c7cfa27ad20913fe776a78dd10e1659cfe4c15de', + '6d95aa1fce7ca853818e818c4146c4f796c03559', 'condition': 'checkout_android and checkout_src_internal', }, 'src/docs/website': { - 'url': Var('chromium_git') + '/website.git' + '@' + '4d214097ba7305ec2b3f2dfcf0aa4fd2104c960a', + 'url': Var('chromium_git') + '/website.git' + '@' + '600fc3a0b121d5007b4bb97b001e756625e6d418', }, 'src/ios/third_party/earl_grey2/src': { - 'url': Var('chromium_git') + '/external/github.com/google/EarlGrey.git' + '@' + '7bf6fffe602a0149a6a028a923484819352ed796', + 'url': Var('chromium_git') + '/external/github.com/google/EarlGrey.git' + '@' + '9a1922c5c949677ab699ec5de42b67cf689dc096', 'condition': 'checkout_ios', }, 'src/ios/third_party/edo/src': { - 'url': Var('chromium_git') + '/external/github.com/google/eDistantObject.git' + '@' + '8c825efc8ba6ca9147a148445449470a66b9dc54', + 'url': Var('chromium_git') + '/external/github.com/google/eDistantObject.git' + '@' + '13fd3068bf462e6d55a405f5ec3c62abcf1dd9bb', 'condition': 'checkout_ios', }, @@ -1468,7 +1477,7 @@ deps = { }, 'src/ios/third_party/material_components_ios/src': { - 'url': Var('chromium_git') + '/external/github.com/material-components/material-components-ios.git' + '@' + '0ac0dfe5adf41700ef61e3bb0a1ece2362757433', + 'url': Var('chromium_git') + '/external/github.com/material-components/material-components-ios.git' + '@' + '4d98ee5cb59109408e755fd3d9118709c6e1b035', 'condition': 'checkout_ios', }, @@ -1524,7 +1533,7 @@ deps = { }, 'src/media/cdm/api': - Var('chromium_git') + '/chromium/cdm.git' + '@' + '06395a2863cb1ebdb47617a995b73f95c14fe120', + Var('chromium_git') + '/chromium/cdm.git' + '@' + '5a1675c86821a48f8983842d07f774df28dfb43c', 'src/native_client': { 'url': Var('chromium_git') + '/native_client/src/native_client.git' + '@' + Var('nacl_revision'), @@ -1541,7 +1550,7 @@ deps = { 'packages' : [ { 'package': 'infra/3pp/tools/copybara', - 'version': 'IGfMEXgS5ZJsyZqZ8RRICpBymRDCShc1fYuAvRggdnMC', + 'version': 'yFlI6qhMaPhCGPTKfP-fsxevn1mujoo8BfOPSFKBbhgC', }, ], 'condition': 'host_os == "linux" and checkout_copybara', @@ -1598,7 +1607,7 @@ deps = { 'packages': [ { 'package': 'chromium/third_party/androidx', - 'version': 'gUjEawxv5mQO8yfbuC8W-rx4V3zYE-4LTWggXpZHI4sC', + 'version': 'vVIWspe_J70MLicHbkdl63jVE1iFQ6KMFQ4Xa-bmD-UC', }, ], 'condition': 'checkout_android and non_git_source', @@ -1647,7 +1656,7 @@ deps = { 'packages': [ { 'package': 'chromium/third_party/android_build_tools/bundletool', - 'version': 'Q-7KJYcc15Cn9iVy-7bk0tPH9-oUrhqHis6HmUzck80C', + 'version': 'tal0sHGlqsDFNFQ5lV1zRomrRs0Ppq6ngUOYbACAAUwC', }, ], 'condition': 'checkout_android and non_git_source', @@ -1669,7 +1678,7 @@ deps = { 'packages': [ { 'package': 'chromium/third_party/android_build_tools/error_prone', - 'version': 'a-wq097LhH9krgIuF0T5waFnHU4KilRItqhJPGFZxtwC', + 'version': 'PW_AkPGAdnmLPk-dG161a_wYd9FRhQ9INn9f8HKj3fcC', }, ], 'condition': 'checkout_android and non_git_source', @@ -1691,7 +1700,7 @@ deps = { 'packages': [ { 'package': 'chromium/third_party/android_build_tools/lint', - 'version': 'Q2AdRKMr8eMrKgLZ9CwGTRx4BwGOL2wc6Ad942McdDUC', + 'version': 'jsEEMs5gHWH0oWH-A-WwE4Q4a5JnfgwwHYdaNd9UP9oC', }, ], 'condition': 'checkout_android and non_git_source', @@ -1702,7 +1711,7 @@ deps = { 'packages': [ { 'package': 'chromium/third_party/android_build_tools/manifest_merger', - 'version': 'T3B_dWqgDISstbC0L7CrQOOf9xe-27KUYK8UCTq6trgC', + 'version': 'no0RMx3qPOc-XlBlr8d_hUdnAYnHUeN6-qd2kXZO9e0C', }, ], 'condition': 'checkout_android and non_git_source', @@ -1713,7 +1722,7 @@ deps = { 'packages': [ { 'package': 'chromium/third_party/android_build_tools/nullaway', - 'version': 'KGEP4hGbArGQwI_HL3iJWEYMP1PVa2J_QRLPo-9wwiwC', + 'version': '65WJkoinJEXvtu9xwdDNDb3QCbqBAl8FKDpgnXr3iiEC', }, ], 'condition': 'checkout_android and non_git_source', @@ -1751,7 +1760,7 @@ deps = { Var('chromium_git') + '/angle/angle.git' + '@' + Var('angle_revision'), 'src/third_party/anonymous_tokens/src': - Var('chromium_git') + '/external/github.com/google/anonymous-tokens.git' + '@' + '6ea6ec78f9e4998d0a7a5677b2aec08f0ac858f8', + Var('chromium_git') + '/external/github.com/google/anonymous-tokens.git' + '@' + '2e328dd4eace9648adcc943cac6a1792b5dcdec5', 'src/third_party/blink/renderer/core/css/perftest_data': { 'dep_type': 'gcs', @@ -1828,7 +1837,7 @@ deps = { Var('chromium_git') + '/external/github.com/chromium/content_analysis_sdk.git' + '@' + '9a408736204513e0e95dd2ab3c08de0d95963efc', 'src/third_party/dav1d/libdav1d': - Var('chromium_git') + '/external/github.com/videolan/dav1d.git' + '@' + 'b129d9f2cb897cedba77a60bd5e3621c14ee5484', + Var('chromium_git') + '/external/github.com/videolan/dav1d.git' + '@' + '42b2b24fb8819f1ed3643aa9cf2a62f03868e3aa', 'src/third_party/dawn': Var('dawn_git') + '/dawn.git' + '@' + Var('dawn_revision'), @@ -1842,7 +1851,7 @@ deps = { }, 'src/third_party/barhopper': { - 'url': Var('chrome_git') + '/chrome/deps/barhopper.git' + '@' + '865bd06ef4a839b0a15d17e38e25f8911e4cdf9f', + 'url': Var('chrome_git') + '/chrome/deps/barhopper.git' + '@' + '9230af4dc38c6d2cc9c0841692267762ebfca991', 'condition': 'checkout_src_internal and checkout_chromeos', }, @@ -1869,7 +1878,7 @@ deps = { Var('boringssl_git') + '/boringssl.git' + '@' + Var('boringssl_revision'), 'src/third_party/breakpad/breakpad': - Var('chromium_git') + '/breakpad/breakpad.git' + '@' + '02dd5c3ffbfed2bcbc93b553ed0e90a1ac951cb4', + Var('chromium_git') + '/breakpad/breakpad.git' + '@' + '0dfd77492fdb0dcd06027c5842095e2e908adc90', 'src/third_party/cast_core/public/src': Var('chromium_git') + '/cast_core/public' + '@' + 'fbc5e98031e1271a0a566fcd4d9092b2d3275d05', @@ -1904,7 +1913,7 @@ deps = { # Tools used when building Chrome for Chrome OS. This affects both the Simple # Chrome workflow, as well as the chromeos-chrome ebuild. 'src/third_party/chromite': { - 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + 'bcc0e90690a83cc09d4bc39860cf152a47b38347', + 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '5c737a884f9eff76cef00bea5cff97aae4acb4c1', 'condition': 'checkout_chromeos', }, @@ -1918,14 +1927,14 @@ deps = { Var('chromium_git') + '/external/github.com/google/cpu_features.git' + '@' + '936b9ab5515dead115606559502e3864958f7f6e', 'src/third_party/cpuinfo/src': - Var('chromium_git') + '/external/github.com/pytorch/cpuinfo.git' + '@' + 'ca156f7bc9109c552973414a63d310f76ef0cbf8', + Var('chromium_git') + '/external/github.com/pytorch/cpuinfo.git' + '@' + '8a1772a0c5c447df2d18edf33ec4603a8c9c04a6', 'src/third_party/crc32c/src': Var('chromium_git') + '/external/github.com/google/crc32c.git' + '@' + 'd3d60ac6e0f16780bcfcc825385e1d338801a558', # For Linux and Chromium OS. 'src/third_party/cros_system_api': { - 'url': Var('chromium_git') + '/chromiumos/platform2/system_api.git' + '@' + '497b90c6e283745f976d783ed2beaafeef42b1bf', + 'url': Var('chromium_git') + '/chromiumos/platform2/system_api.git' + '@' + 'ea21b22629965105426f3df5e58190513e95a17e', 'condition': 'checkout_linux or checkout_chromeos', }, @@ -1934,7 +1943,7 @@ deps = { 'src/third_party/depot_tools': - Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '423f1e1914ab4aa7b2bdf804e216d4c097853ba2', + Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'e42fac3e9c1726ab14a61a25e6291d9ccc49e688', 'src/third_party/devtools-frontend/src': Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'), @@ -1943,7 +1952,7 @@ deps = { Var('chromium_git') + '/chromium/dom-distiller/dist.git' + '@' + '199de96b345ada7c6e7e6ba3d2fa7a6911b8767d', 'src/third_party/eigen3/src': - Var('chromium_git') + '/external/gitlab.com/libeigen/eigen.git' + '@' + '24e0c2a125d2b37b35719124d1f758777c150ca8', + Var('chromium_git') + '/external/gitlab.com/libeigen/eigen.git' + '@' + '2a35a917be47766a895be610bedd66006980b7e6', 'src/third_party/emoji-metadata/src': { 'url': Var('chromium_git') + '/external/github.com/googlefonts/emoji-metadata' + '@' + '045f146fca682a836e01cd265171312bfb300e06', @@ -1965,7 +1974,7 @@ deps = { Var('chromium_git') + '/external/github.com/google/farmhash.git' + '@' + '816a4ae622e964763ca0862d9dbd19324a1eaf45', 'src/third_party/fast_float/src': - Var('chromium_git') + '/external/github.com/fastfloat/fast_float.git' + '@' + '3e57d8dcfb0a04b5a8a26b486b54490a2e9b310f', + Var('chromium_git') + '/external/github.com/fastfloat/fast_float.git' + '@' + 'cb1d42aaa1e14b09e1452cfdef373d051b8c02a4', 'src/third_party/ffmpeg': Var('chromium_git') + '/chromium/third_party/ffmpeg.git' + '@' + Var('ffmpeg_revision'), @@ -1989,7 +1998,7 @@ deps = { Var('chromium_git') + '/external/github.com/google/gemmlowp.git' + '@' + '13d57703abca3005d97b19df1f2db731607a7dc2', 'src/third_party/grpc/src': { - 'url': Var('chromium_git') + '/external/github.com/grpc/grpc.git' + '@' + '822dab21d9995c5cf942476b35ca12a1aa9d2737', + 'url': Var('chromium_git') + '/external/github.com/grpc/grpc.git' + '@' + 'a363b6c001139b9c8ffb7cd63f60a72f15349c3b', }, 'src/third_party/freetype/src': @@ -2027,7 +2036,7 @@ deps = { Var('chromium_git') + '/external/github.com/khaledhosny/ots.git' + '@' + Var('ots_revision'), 'src/third_party/libgav1/src': - Var('chromium_git') + '/codecs/libgav1.git' + '@' + 'a2f139e9123bdb5edf7707ac6f1b73b3aa5038dd', + Var('chromium_git') + '/codecs/libgav1.git' + '@' + 'c05bf9be660cf170d7c26bd06bb42b3322180e58', 'src/third_party/google_toolbox_for_mac/src': { 'url': Var('chromium_git') + '/external/github.com/google/google-toolbox-for-mac.git' + '@' + Var('google_toolbox_for_mac_revision'), @@ -2141,8 +2150,8 @@ deps = { 'src/third_party/jdk/current': { 'packages': [ { - 'package': 'chromium/third_party/jdk', - 'version': 'G-WIGWdFIBTPPhv2xPK_lTfI5N7WmfCBh0oTKqX-c5sC', + 'package': 'chromium/third_party/jdk/linux-amd64', + 'version': '2iiuF-nKDH3moTImx2op4WTRetbfhzKoZhH7Xo44zGsC', }, ], # Needed on Linux for use on chromium_presubmit (for checkstyle). @@ -2176,7 +2185,7 @@ deps = { 'packages': [ { 'package': 'chromium/third_party/kotlin_stdlib', - 'version': 'uguVAY3NvbfV4KgHrjjwvtTioMwPwSijfAgBPpbaYk0C', + 'version': 'vDSe2YumA17HBoAJfWLoM5euQtRR4FL9fhJL9T0mbnYC', }, ], 'condition': 'checkout_android and non_git_source', @@ -2187,7 +2196,7 @@ deps = { 'packages': [ { 'package': 'chromium/third_party/kotlinc', - 'version': 'YrBSUjA4zjPf3DhU2SYlqamxAAQiM2WIeZftsDSjqTAC', + 'version': 'NstbMU2T3FwNigAPukklSBBmCKyUGheEgy8WZNY-5WIC', }, ], 'condition': 'checkout_android and non_git_source', @@ -2195,7 +2204,7 @@ deps = { }, 'src/third_party/leveldatabase/src': - Var('chromium_git') + '/external/leveldb.git' + '@' + '578eeb702ec0fbb6b9780f3d4147b1076630d633', + Var('chromium_git') + '/external/leveldb.git' + '@' + '4ee78d7ea98330f7d7599c42576ca99e3c6ff9c5', 'src/third_party/libFuzzer/src': Var('chromium_git') + '/external/github.com/llvm/llvm-project/compiler-rt/lib/fuzzer.git' + '@' + Var('libfuzzer_revision'), @@ -2207,13 +2216,10 @@ deps = { Var('chromium_git') + '/external/github.com/googleprojectzero/domato.git' + '@' + Var('domato_revision'), 'src/third_party/libaddressinput/src': - Var('chromium_git') + '/external/libaddressinput.git' + '@' + 'e8712e415627f22d0b00ebee8db99547077f39bd', + Var('chromium_git') + '/external/libaddressinput.git' + '@' + '2610f7b1043d6784ada41392fc9392d1ea09ea07', 'src/third_party/libaom/source/libaom': - Var('aomedia_git') + '/aom.git' + '@' + '0c13a5d54053f82bf8500b421b5cdefb1cc1b3ed', - - 'src/third_party/libavif/src': - Var('chromium_git') + '/external/github.com/AOMediaCodec/libavif.git' + '@' + Var('libavif_revision'), + Var('aomedia_git') + '/aom.git' + '@' + '3990233fc06a35944d6d33797e63931802122a95', 'src/third_party/crabbyavif/src': Var('chromium_git') + '/external/github.com/webmproject/CrabbyAvif.git' + '@' + Var('crabbyavif_revision'), @@ -2284,7 +2290,7 @@ deps = { }, 'src/third_party/libunwindstack': { - 'url': Var('chromium_git') + '/chromium/src/third_party/libunwindstack.git' + '@' + '215bddfd8eecb7dd990494854a31b70a96d71b3c', + 'url': Var('chromium_git') + '/chromium/src/third_party/libunwindstack.git' + '@' + 'e5061bbda4c2ba6438020669ed06b122032433dd', 'condition': 'checkout_android', }, @@ -2292,16 +2298,16 @@ deps = { Var('chromium_git') + '/chromiumos/platform/libva-fake-driver.git' + '@' + 'a9bcab9cd6b15d4e3634ca44d5e5f7652c612194', 'src/third_party/libvpx/source/libvpx': - Var('chromium_git') + '/webm/libvpx.git' + '@' + '8058a0b54991257a0e1a2fcf08d993a8b70c1d3a', + Var('chromium_git') + '/webm/libvpx.git' + '@' + '7b3fa8114cf8ef23cbf91e50c368c1ca768d95d5', 'src/third_party/libwebm/source': - Var('chromium_git') + '/webm/libwebm.git' + '@' + '26d9f667170dc75e8d759a997bb61c64dec42dda', + Var('chromium_git') + '/webm/libwebm.git' + '@' + 'b4f01ea3ed6fd00923caa383bb2cf6f7a0b7f633', 'src/third_party/libwebp/src': Var('chromium_git') + '/webm/libwebp.git' + '@' + '2af6c034ac871c967e04c8c9f8bf2dbc2e271b18', 'src/third_party/libyuv': - Var('chromium_git') + '/libyuv/libyuv.git' + '@' + '47ddac2996378c34aab9318f0d218303b1d282e7', + Var('chromium_git') + '/libyuv/libyuv.git' + '@' + '5a9a6ea936085310f3b9fbd4a774868e6a984ec4', 'src/third_party/lighttpd': { 'url': Var('chromium_git') + '/chromium/deps/lighttpd.git' + '@' + Var('lighttpd_revision'), @@ -2407,10 +2413,10 @@ deps = { }, 'src/third_party/openh264/src': - Var('chromium_git') + '/external/github.com/cisco/openh264' + '@' + '478e5ab3eca30e600006d5a0a08b176fd34d3bd1', + Var('chromium_git') + '/external/github.com/cisco/openh264' + '@' + '33f7f48613258446decb33b3575fc0a3c9ed14e3', 'src/third_party/openscreen/src': - Var('chromium_git') + '/openscreen' + '@' + '991678c7c3b66807cb40619e46ebb7de1bc45a18', + Var('chromium_git') + '/openscreen' + '@' + '38d1445b41d1eb597fcd100688dbaff98aa072ed', 'src/third_party/openxr/src': { 'url': Var('chromium_git') + '/external/github.com/KhronosGroup/OpenXR-SDK' + '@' + '781f2eab3698d653c804ecbd11e0aed47eaad1c6', @@ -2436,7 +2442,7 @@ deps = { Var('pdfium_git') + '/pdfium.git' + '@' + Var('pdfium_revision'), 'src/third_party/perfetto': - Var('android_git') + '/platform/external/perfetto.git' + '@' + '2473cc95bc0d2d0c3c240be49ce4c2d0dc48edd4', + Var('android_git') + '/platform/external/perfetto.git' + '@' + '0d78d85c2bfb993ab8dd9a85b6fee6caa6a0f357', 'src/base/tracing/test/data': { 'bucket': 'perfetto', @@ -2553,6 +2559,13 @@ deps = { 'generation': 1730148514067154, 'output_file': 'scroll_m132_with_atrace.pftrace' }, + { + 'object_name': 'test_data/scroll_m133beta.pftrace-2acc70545be1caeb3fb43218ab52872c2c749b49577b973cb8400057c680fc19', + 'sha256sum': '2acc70545be1caeb3fb43218ab52872c2c749b49577b973cb8400057c680fc19', + 'size_bytes': 1448694, + 'generation': 1738338471679054, + 'output_file': 'scroll_m133beta.pftrace' + }, { 'object_name': 'test_data/scroll_with_input_not_forwarded_to_renderer.pftrace-ceb2ff3cb64c99ddb28a29867bc82f1491c4b413bfacd8638551b80936240faf', 'sha256sum': 'ceb2ff3cb64c99ddb28a29867bc82f1491c4b413bfacd8638551b80936240faf', @@ -2573,7 +2586,7 @@ deps = { Var('chromium_git') + '/external/github.com/protocolbuffers/protobuf-javascript' + '@' + 'e34549db516f8712f678fcd4bc411613b5cc5295', 'src/third_party/pthreadpool/src': - Var('chromium_git') + '/external/github.com/Maratyszcza/pthreadpool.git' + '@' + '560c60d342a76076f0557a3946924c6478470044', + Var('chromium_git') + '/external/github.com/google/pthreadpool.git' + '@' + 'e1469417238e13eebaa001779fa031ed25c59def', # Dependency of skia. 'src/third_party/pyelftools': { @@ -2591,19 +2604,7 @@ deps = { 'packages': [ { 'package': 'fuchsia/third_party/qemu/linux-arm64', - 'version': 'hOpuGIMj1FAtBWGDlXARkCm2srxY4enn8iI3AgrDna4C' - }, - ], - # TODO(b/351926334): Do not add `non_git_source` to this condition until the bug is fixed. - 'condition': 'host_os == "linux" and checkout_fuchsia and checkout_fuchsia_for_arm64_host', - 'dep_type': 'cipd', - }, - - 'src/third_party/edk2': { - 'packages': [ - { - 'package': 'fuchsia/third_party/edk2', - 'version': 'TfGjbhGrxzU0x2fYk8elEgwMTrvwe-3DSPTQe4gb0tMC' + 'version': 'MDf3sCxn9kct3Tg1oVRHch1hkzO6-9qZZFBRPT6jDuoC' }, ], # TODO(b/351926334): Do not add `non_git_source` to this condition until the bug is fixed. @@ -2618,7 +2619,7 @@ deps = { 'packages': [ { 'package': 'chromium/third_party/r8', - 'version': 'U3Jf_ewWOZyxa6vyO3wjNIgm8XIz1yFk-4k3-wqDL44C', + 'version': 'nQxrs0NOKK81WZSfrDxDOvmAMK5KmkG2UOOi0Ofu-q8C', }, ], 'condition': 'checkout_android and non_git_source', @@ -2632,7 +2633,7 @@ deps = { 'packages': [ { 'package': 'chromium/third_party/r8', - 'version': 'U3Jf_ewWOZyxa6vyO3wjNIgm8XIz1yFk-4k3-wqDL44C', + 'version': 'ukddmPlorF_6XXPBcxDxCmK2PSAJlhu_MDUhZQCz1l8C', }, ], 'condition': 'checkout_android and non_git_source', @@ -2656,13 +2657,16 @@ deps = { }, 'src/third_party/ruy/src': - Var('chromium_git') + '/external/github.com/google/ruy.git' + '@' + '95484c3e02206f73309c08ee5ee23d2304ca092b', + Var('chromium_git') + '/external/github.com/google/ruy.git' + '@' + '83fd40d730feb0804fafbc2d8814bcc19a17b2e5', + + 'src/third_party/search_engines_data/resources': + Var('chromium_git') + '/external/search_engines_data.git' + '@' + '6dc3b54b420e6e03a34ee7259fcd2b1978fac5f3', 'src/third_party/skia': Var('skia_git') + '/skia.git' + '@' + Var('skia_revision'), 'src/third_party/smhasher/src': - Var('chromium_git') + '/external/smhasher.git' + '@' + '3e1f0d1d8340cfe136d33fd27c75eb7694148214', + Var('chromium_git') + '/external/smhasher.git' + '@' + '0ff96f7835817a27d0487325b6c16033e2992eb5', 'src/third_party/snappy/src': Var('chromium_git') + '/external/github.com/google/snappy.git' + '@' + '32ded457c0b1fe78ceb8397632c416568d6714a0', @@ -2687,10 +2691,10 @@ deps = { 'bucket': 'chromium-ads-detection', 'objects': [ { - 'object_name': '68ef948a4727c058ed027c201eed5f749a508ae2732518188043af70e6e41e75', - 'sha256sum': '68ef948a4727c058ed027c201eed5f749a508ae2732518188043af70e6e41e75', - 'size_bytes': 75076, - 'generation': 1730829357437113, + 'object_name': 'fd3ade759bd847f845fe201167de1f53e53a2275631303952f1ac4d7ab5b19dc', + 'sha256sum': 'fd3ade759bd847f845fe201167de1f53e53a2275631303952f1ac4d7ab5b19dc', + 'size_bytes': 75385, + 'generation': 1736370299437547, 'output_file': 'UnindexedRules', }, ], @@ -2739,34 +2743,34 @@ deps = { Var('chromium_git') + '/external/github.com/GoogleChromeLabs/text-fragments-polyfill.git' + '@' + 'c036420683f672d685e27415de0a5f5e85bdc23f', 'src/third_party/tflite/src': - Var('chromium_git') + '/external/github.com/tensorflow/tensorflow.git' + '@' + 'b25df276c8e912c22f57263ffcae6ca8f4c64342', + Var('chromium_git') + '/external/github.com/tensorflow/tensorflow.git' + '@' + '51c6eed226abcfeeb46864e837d01563cc5b907b', 'src/third_party/turbine/cipd': { 'packages': [ { 'package': 'chromium/third_party/turbine', - 'version': 'dz8pRLjwNlToJ0tS14T-TDQJNikmFXEDByMo-OzBbl0C', + 'version': 'qNNUfaj7w4cSHTjVawVaZpq0pABVec9LcFebN19wm4EC', }, ], 'condition': 'checkout_android and non_git_source', 'dep_type': 'cipd', }, - 'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@915d114daeb26a3dbdad1622f5a72c0aa255acbb', - 'src/third_party/glslang/src': '{chromium_git}/external/github.com/KhronosGroup/glslang@10fb91c403b2f5e2142c751884dd12ed3fb13952', + 'src/third_party/vulkan-deps': '{chromium_git}/vulkan-deps@2e4b45a53a0e2e66bcb6540ae384c53a517218d0', + 'src/third_party/glslang/src': '{chromium_git}/external/github.com/KhronosGroup/glslang@0549c7127c2fbab2904892c9d6ff491fa1e93751', 'src/third_party/spirv-cross/src': '{chromium_git}/external/github.com/KhronosGroup/SPIRV-Cross@b8fcf307f1f347089e3c46eb4451d27f32ebc8d3', - 'src/third_party/spirv-headers/src': '{chromium_git}/external/github.com/KhronosGroup/SPIRV-Headers@36d5e2ddaa54c70d2f29081510c66f4fc98e5e53', - 'src/third_party/spirv-tools/src': '{chromium_git}/external/github.com/KhronosGroup/SPIRV-Tools@f3c4a5053f1bd34056282e56659659873f9d47ad', - 'src/third_party/vulkan-headers/src': '{chromium_git}/external/github.com/KhronosGroup/Vulkan-Headers@36872f9062b17b1a30b8ed1d81ca5ea6bb608a72', - 'src/third_party/vulkan-loader/src': '{chromium_git}/external/github.com/KhronosGroup/Vulkan-Loader@081b529a37f43249225114c4c0dea12a29ce605f', - 'src/third_party/vulkan-tools/src': '{chromium_git}/external/github.com/KhronosGroup/Vulkan-Tools@86d6be76350413def51e96ed98a25cc2c9d048c9', - 'src/third_party/vulkan-utility-libraries/src': '{chromium_git}/external/github.com/KhronosGroup/Vulkan-Utility-Libraries@b538fb5b08513aa78346cd414ad5e576a2a3e920', - 'src/third_party/vulkan-validation-layers/src': '{chromium_git}/external/github.com/KhronosGroup/Vulkan-ValidationLayers@24ad452082bfbf3eb749d7894266666a8aae4bbb', + 'src/third_party/spirv-headers/src': '{chromium_git}/external/github.com/KhronosGroup/SPIRV-Headers@e7294a8ebed84f8c5bd3686c68dbe12a4e65b644', + 'src/third_party/spirv-tools/src': '{chromium_git}/external/github.com/KhronosGroup/SPIRV-Tools@ce37fd67f83cd1e8793b988d2e4126bbf72b19dd', + 'src/third_party/vulkan-headers/src': '{chromium_git}/external/github.com/KhronosGroup/Vulkan-Headers@39f924b810e561fd86b2558b6711ca68d4363f68', + 'src/third_party/vulkan-loader/src': '{chromium_git}/external/github.com/KhronosGroup/Vulkan-Loader@0508dee4ff864f5034ae6b7f68d34cb2822b827d', + 'src/third_party/vulkan-tools/src': '{chromium_git}/external/github.com/KhronosGroup/Vulkan-Tools@c52931f012cb7b48e42bbf2050a7fb2183b76406', + 'src/third_party/vulkan-utility-libraries/src': '{chromium_git}/external/github.com/KhronosGroup/Vulkan-Utility-Libraries@fe7a09b13899c5c77d956fa310286f7a7eb2c4ed', + 'src/third_party/vulkan-validation-layers/src': '{chromium_git}/external/github.com/KhronosGroup/Vulkan-ValidationLayers@a30aa23cfaff4f28f039c025c159128a6c336a7e', 'src/third_party/vulkan_memory_allocator': Var('chromium_git') + '/external/github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git' + '@' + '56300b29fbfcc693ee6609ddad3fdd5b7a449a21', - 'src/third_party/wasm_tts_engine/src': Var('chromium_git') + '/chromium/wasm-tts-engine' + '@' + '6d5bc87a28e49361dac2964015957698b04a0df8', + 'src/third_party/wasm_tts_engine/src': Var('chromium_git') + '/chromium/wasm-tts-engine' + '@' + '7a91dbfddd93afa096a69fb7d292e22d4afecad2', # Display server protocol for Linux. 'src/third_party/wayland/src': { @@ -2800,13 +2804,13 @@ deps = { Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + '450cceb587613ac1469c5a131fac15935c99e0e7', 'src/third_party/webgpu-cts/src': - Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + 'e99550b44ea9eedb364beb553d1a48549d0da115', + Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + 'fb2b951ac3c23e453335edf35c9b3bad431d9009', 'src/third_party/webpagereplay': Var('chromium_git') + '/webpagereplay.git' + '@' + Var('webpagereplay_revision'), 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + '283b6ef9d3eabe5bb3ed7c9d6b6d211a92f9b6d0', + Var('webrtc_git') + '/src.git' + '@' + '8d78f5de6c27b2c793039989ea381f1428fb0100', # Wuffs' canonical repository is at github.com/google/wuffs, but we use # Skia's mirror of Wuffs, the same as in upstream Skia's DEPS file. @@ -2824,20 +2828,13 @@ deps = { 'condition': 'checkout_linux', }, - # A conformance-suite developed by canonical for the mir wayland server. - # Required to compile exo_wlcs on chromeos checkouts. - 'src/third_party/wlcs/src': { - 'url': Var('chromium_git') + '/external/github.com/MirServer/wlcs.git' + '@' + '2930ad4b5ca602446ad211b49fb1827303ce9f4b', - 'condition': 'checkout_chromeos', - }, - 'src/third_party/xdg-utils': { 'url': Var('chromium_git') + '/chromium/deps/xdg-utils.git' + '@' + 'cb54d9db2e535ee4ef13cc91b65a1e2741a94a44', 'condition': 'checkout_linux', }, 'src/third_party/xnnpack/src': - Var('chromium_git') + '/external/github.com/google/XNNPACK.git' + '@' + '7440eee88f66c4b81d4e7d31f6ae07af66e059ea', + Var('chromium_git') + '/external/github.com/google/XNNPACK.git' + '@' + '0824e2965f6edc2297e55c8dff5a8ac4cb12aaad', 'src/third_party/libei/cipd': { @@ -2853,13 +2850,13 @@ deps = { }, 'src/third_party/zstd/src': - Var('chromium_git') + '/external/github.com/facebook/zstd.git' + '@' + 'b0a179d469680276adbd4007435989a6b7fd8b4f', + Var('chromium_git') + '/external/github.com/facebook/zstd.git' + '@' + 'ea0aa030cdf31f7897c5bfc153f0d36e92768095', 'src/tools/skia_goldctl/linux': { 'packages': [ { 'package': 'skia/tools/goldctl/linux-amd64', - 'version': 'PNE7Fclbe9QG9LF9goXEGcZdLRF9BTfPrN_kguKqNR0C', + 'version': 'M1GANqZ-d2Qp4DHOEtmfafgGkTeeDLKJUreuBV_psroC', }, ], 'dep_type': 'cipd', @@ -2869,7 +2866,7 @@ deps = { 'packages': [ { 'package': 'skia/tools/goldctl/windows-amd64', - 'version': 'higEnuoHCI_e6VMHGBAiodkRZW6nOOTVKClWpyaRYJoC', + 'version': 'Mg04jm-4f1YP4Vv2GYoJdIv8gxvPFQSgwovCzVlN-w0C', }, ], 'dep_type': 'cipd', @@ -2880,7 +2877,7 @@ deps = { 'packages': [ { 'package': 'skia/tools/goldctl/mac-amd64', - 'version': 'urNQsuWSpqZHCVVDj3airG0ps7V55Zz8JNfj5p1N0h4C', + 'version': 'w4KjkADnVRHE8TgQXpDuP6qD3uivftyQ3ue-Ee-gqWQC', }, ], 'dep_type': 'cipd', @@ -2891,7 +2888,7 @@ deps = { 'packages': [ { 'package': 'skia/tools/goldctl/mac-arm64', - 'version': 'N0tUKPzw6eyaiqY-Ea9g6TujzrSjazJW1GwHD6GiJvkC', + 'version': 'Nej3vvoT_ssGeDCs5clWDgEDHARO4KP8W3EKOLNxXTkC', }, ], 'dep_type': 'cipd', @@ -2921,7 +2918,7 @@ deps = { 'packages': [ { 'package': 'chromeos_internal/apps/eche_app/app', - 'version': 'tmSVEIDae--T6Earl0vynO4iSn4H2S9I8lnym0Q3pFYC', + 'version': 'Ihx-kXXQGZaTKDprSbCRcq5kUszzvDM8cP2aNJNNIhQC', }, ], 'condition': 'checkout_chromeos and checkout_src_internal', @@ -2932,7 +2929,7 @@ deps = { 'packages': [ { 'package': 'chromeos_internal/apps/boca_app/app', - 'version': 'okOgx37R1rbAupH4AYFbA2eAhvMANqaNoTCPGpI43_0C', + 'version': 'YrzTiXAYTU2FdCCW4A-WEcL3KcZwRh9lupMMjFQxAa4C', }, ], 'condition': 'checkout_chromeos and checkout_src_internal', @@ -2943,7 +2940,7 @@ deps = { 'packages': [ { 'package': 'chromeos_internal/apps/help_app/app', - 'version': 'Lcl--fF22r7qT8IXmu0Pj6g9OMdpD3z6RUVR3mP_Gv4C', + 'version': 'hAOVEZQbdu-s7HSVleLk6AP9C7S68wHTlpoRlrO1n1gC', }, ], 'condition': 'checkout_chromeos and checkout_src_internal', @@ -2954,7 +2951,7 @@ deps = { 'packages': [ { 'package': 'chromeos_internal/apps/media_app/app', - 'version': '4U1LHRCb6yJ8RMwUmUT92zhnkHIAObRycm9gaTtOgJUC', + 'version': 'y4jNkv8uuNgvDlIegQHMnulne3cceaBL_s57KLjJPdkC', }, ], 'condition': 'checkout_chromeos and checkout_src_internal', @@ -2987,7 +2984,7 @@ deps = { 'packages': [ { 'package': 'chromeos_internal/apps/projector_app/app', - 'version': 'sGvMIWo8sGY8C2QjlEL-HhFUMoXsRSWgUbUj8p5ZPtYC', + 'version': 'Ehw9d1OykXTf5quMLYu3t-2rTfwIAablOoXULXRbprgC', }, ], 'condition': 'checkout_chromeos and checkout_src_internal', @@ -3056,22 +3053,11 @@ deps = { 'dep_type': 'cipd', }, - 'src/third_party/android_deps/cipd/libs/com_google_android_annotations': { - 'packages': [ - { - 'package': 'chromium/third_party/android_deps/libs/com_google_android_annotations', - 'version': 'version:2@4.1.1.4.cr1', - }, - ], - 'condition': 'checkout_android and non_git_source', - 'dep_type': 'cipd', - }, - 'src/third_party/android_deps/cipd/libs/com_google_android_apps_common_testing_accessibility_framework_accessibility_test_framework': { 'packages': [ { 'package': 'chromium/third_party/android_deps/libs/com_google_android_apps_common_testing_accessibility_framework_accessibility_test_framework', - 'version': 'version:2@4.0.0.cr1', + 'version': 'version:2@4.1.1.cr1', }, ], 'condition': 'checkout_android and non_git_source', @@ -3148,7 +3134,7 @@ deps = { 'packages': [ { 'package': 'chromium/third_party/android_deps/libs/com_google_android_gms_play_services_basement', - 'version': 'version:2@18.4.0.cr1', + 'version': 'version:2@18.5.0.cr1', }, ], 'condition': 'checkout_android and non_git_source', @@ -3236,7 +3222,7 @@ deps = { 'packages': [ { 'package': 'chromium/third_party/android_deps/libs/com_google_android_gms_play_services_identity_credentials', - 'version': 'version:2@16.0.0-alpha02.cr1', + 'version': 'version:2@16.0.0-alpha04.cr1', }, ], 'condition': 'checkout_android and non_git_source', @@ -3412,7 +3398,7 @@ deps = { 'packages': [ { 'package': 'chromium/third_party/android_deps/libs/com_google_code_gson_gson', - 'version': 'version:2@2.9.0.cr1', + 'version': 'version:2@2.8.0.cr1', }, ], 'condition': 'checkout_android and non_git_source', @@ -3430,17 +3416,6 @@ deps = { 'dep_type': 'cipd', }, - 'src/third_party/android_deps/cipd/libs/com_google_dagger_hilt_core': { - 'packages': [ - { - 'package': 'chromium/third_party/android_deps/libs/com_google_dagger_hilt_core', - 'version': 'version:2@2.52.cr1', - }, - ], - 'condition': 'checkout_android and non_git_source', - 'dep_type': 'cipd', - }, - 'src/third_party/android_deps/cipd/libs/com_google_errorprone_error_prone_annotations': { 'packages': [ { @@ -3716,83 +3691,6 @@ deps = { 'dep_type': 'cipd', }, - 'src/third_party/android_deps/cipd/libs/io_grpc_grpc_api': { - 'packages': [ - { - 'package': 'chromium/third_party/android_deps/libs/io_grpc_grpc_api', - 'version': 'version:2@1.49.0.cr1', - }, - ], - 'condition': 'checkout_android and non_git_source', - 'dep_type': 'cipd', - }, - - 'src/third_party/android_deps/cipd/libs/io_grpc_grpc_binder': { - 'packages': [ - { - 'package': 'chromium/third_party/android_deps/libs/io_grpc_grpc_binder', - 'version': 'version:2@1.49.0.cr1', - }, - ], - 'condition': 'checkout_android and non_git_source', - 'dep_type': 'cipd', - }, - - 'src/third_party/android_deps/cipd/libs/io_grpc_grpc_context': { - 'packages': [ - { - 'package': 'chromium/third_party/android_deps/libs/io_grpc_grpc_context', - 'version': 'version:2@1.49.0.cr1', - }, - ], - 'condition': 'checkout_android and non_git_source', - 'dep_type': 'cipd', - }, - - 'src/third_party/android_deps/cipd/libs/io_grpc_grpc_core': { - 'packages': [ - { - 'package': 'chromium/third_party/android_deps/libs/io_grpc_grpc_core', - 'version': 'version:2@1.49.0.cr1', - }, - ], - 'condition': 'checkout_android and non_git_source', - 'dep_type': 'cipd', - }, - - 'src/third_party/android_deps/cipd/libs/io_grpc_grpc_protobuf_lite': { - 'packages': [ - { - 'package': 'chromium/third_party/android_deps/libs/io_grpc_grpc_protobuf_lite', - 'version': 'version:2@1.49.0.cr1', - }, - ], - 'condition': 'checkout_android and non_git_source', - 'dep_type': 'cipd', - }, - - 'src/third_party/android_deps/cipd/libs/io_grpc_grpc_stub': { - 'packages': [ - { - 'package': 'chromium/third_party/android_deps/libs/io_grpc_grpc_stub', - 'version': 'version:2@1.49.0.cr1', - }, - ], - 'condition': 'checkout_android and non_git_source', - 'dep_type': 'cipd', - }, - - 'src/third_party/android_deps/cipd/libs/io_perfmark_perfmark_api': { - 'packages': [ - { - 'package': 'chromium/third_party/android_deps/libs/io_perfmark_perfmark_api', - 'version': 'version:2@0.25.0.cr1', - }, - ], - 'condition': 'checkout_android and non_git_source', - 'dep_type': 'cipd', - }, - 'src/third_party/android_deps/cipd/libs/jakarta_inject_jakarta_inject_api': { 'packages': [ { @@ -3918,7 +3816,7 @@ deps = { 'packages': [ { 'package': 'chromium/third_party/android_deps/libs/org_codehaus_mojo_animal_sniffer_annotations', - 'version': 'version:2@1.21.cr1', + 'version': 'version:2@1.17.cr1', }, ], 'condition': 'checkout_android and non_git_source', @@ -4326,7 +4224,7 @@ deps = { # Dependencies from src_internal 'src/chromeos/ash/resources/internal': { 'url': Var('chrome_git') + '/chrome/chromeos/ash/resources/internal.git' + '@' + - 'dd3d2b0c1e780a13f6716cdbd20b2489811f0218', + '60c3a7fa0c0d74642139c5d17183842acc34087e', 'condition': 'checkout_src_internal and checkout_chromeos', }, @@ -4378,7 +4276,7 @@ deps = { 'src/chrome/app/theme/google_chrome': { 'url': Var('chrome_git') + '/chrome/theme/google_chrome.git' + '@' + - '1d807d1b5ffc29e13e3c05260ce8a44401e3582d', + '6c4eccc5bfc245e7bcbab67214c705e401a00789', 'condition': 'checkout_src_internal', }, @@ -4388,6 +4286,12 @@ deps = { 'condition': 'checkout_src_internal', }, + 'src/chrome/browser/glic/resources/internal': { + 'url': Var('chrome_git') + '/chrome/browser/glic/resources/internal.git' + '@' + + '9242c4fb47f717bb3638853bf7b3217f88493d17', + 'condition': 'checkout_src_internal', + }, + 'src/chrome/browser/google/linkdoctor_internal': { 'url': Var('chrome_git') + '/chrome/linkdoctor.git' + '@' + 'fe28a8f90c5471f20f8fee9ff7f6c6f8b8d02bed', # from svn revision 32577 @@ -4408,7 +4312,7 @@ deps = { 'src/chrome/browser/nearby_sharing/internal': { 'url': Var('chrome_git') + '/chrome/browser/nearby_sharing/internal.git' + '@' + - '5fe4183de2df3467add81f4610f79ea1dde41a48', + 'd46f4456f93aa8d7cd84161ce9fa4663b8068c49', 'condition': 'checkout_src_internal', }, @@ -4446,7 +4350,7 @@ deps = { 'packages' : [ { 'package': 'chromeos_internal/inputs/orca', - 'version': 'Wzh-xjWvzQ4sxJ83qNnnr0RIF5dy95fqpG-is0Y_aRQC' + 'version': '0TLXAzimnpVDxwj9MXCZ5vDkb4NtHI-R0E6z5FkjePEC' } ], 'condition': 'checkout_chromeos and checkout_src_internal', @@ -4474,7 +4378,7 @@ deps = { # grepping. 'src/chrome/installer/mac/internal': { 'url': Var('chrome_git') + '/chrome/installer/mac/internal.git' + '@' + - '85c282fe6f2763822964028cb89be7b808b07169', + 'bff19c50fa5c3177e594b9c5d07567b3ff5f4d65', 'condition': 'checkout_src_internal', }, @@ -4533,7 +4437,7 @@ deps = { 'src/chrome/updater/internal': { 'url': Var('chrome_git') + '/chrome/updater/internal.git' + '@' + - 'e8e0e06cc5b990d06b4583886f0f8946241fb221', + '2156fafa6a12ebd5c6388aabf8e149d8e50f5ed5', 'condition': 'checkout_src_internal', }, @@ -4545,7 +4449,7 @@ deps = { 'src/components/autofill/core/browser/form_parsing/internal_resources': { 'url': Var('chrome_git') + '/chrome/components/autofill_regex_patterns.git' + '@' + - 'dee24bc5ecb2e65d6b520043b75ca27cba7e39e8', + '54cf3a0c1c4fe79d1007bd18933c50968185cc33', 'condition': 'checkout_src_internal', }, @@ -4556,7 +4460,7 @@ deps = { 'src/components/metrics/internal': { 'url': Var('chrome_git') + '/chrome/components/metrics/internal.git' + '@' + - 'b142ab0612763d64d3ec3b79cd71c6dc9bcbe20b', + 'd74edd43ad58d28a67278699f6756e2482aa6cc1', 'condition': 'checkout_src_internal', }, @@ -4568,7 +4472,7 @@ deps = { 'src/components/optimization_guide/internal': { 'url': Var('chrome_git') + '/chrome/components/optimization_guide.git' + '@' + - 'c97178e22cfde77ce6134e69266e5ae9c5bc0b87', + '06e6654553b2f6cb8cfee05deac4c01c94f60d28', 'condition': 'checkout_src_internal', }, @@ -4580,31 +4484,31 @@ deps = { 'src/components/resources/default_100_percent/google_chrome': { 'url': Var('chrome_git') + '/chrome/components/default_100_percent/google_chrome.git' + '@' + - 'e147db95eb4f7baa20207a513485e019af0e18bb', + 'bcc653f3121b4a35bc2dd0b478397ed73d6cfdea', 'condition': 'checkout_src_internal', }, 'src/components/resources/default_200_percent/google_chrome': { 'url': Var('chrome_git') + '/chrome/components/default_200_percent/google_chrome.git' + '@' + - '22f067172eb11f6b7191aa1ec1aec38b0045839b', + 'c601bd29dd1df37b93c1e434d9e17c300e358c37', 'condition': 'checkout_src_internal', }, 'src/components/resources/default_300_percent/google_chrome': { 'url': Var('chrome_git') + '/chrome/components/default_300_percent/google_chrome.git' + '@' + - 'd01fae2b485ce5571b9d2e9d766cbbda687c21ad', + 'ea9d5e4a28880e8f88da8ed6714e9773e2514eee', 'condition': 'checkout_src_internal', }, 'src/components/site_isolation/internal': { 'url': Var('chrome_git') + '/chrome/components/site_isolation.git' + '@' + - 'e0d8a7769c1daabb974bf0d229970534a0aede77', + 'c0820b79078dbee4b737614f83f5942ea4c0b916', 'condition': 'checkout_src_internal', }, 'src/components/test/data/autofill/heuristics-json/internal': { 'url': Var('chrome_git') + '/chrome/test/autofill/structured_forms.git' + '@' + - 'd0524b82fce8759735662106f37ce0b397e466ba', + '8d6fd5f4cbf9d2af443eb9b9f129612f466e5b14', 'condition': 'checkout_chromium_autofill_test_dependencies', }, @@ -4634,7 +4538,7 @@ deps = { 'src/ios_internal': { 'url': Var('chrome_git') + '/chrome/ios_internal.git' + '@' + - '472e4486da481153d1c2470830c522656180c67c', + '171e11e251f003630a78618d148194807369ca3a', 'condition': 'checkout_ios and checkout_src_internal', }, @@ -4646,7 +4550,7 @@ deps = { 'src/remoting/internal': { 'url': Var('chrome_git') + '/chrome/remoting/internal.git' + '@' + - 'bc8e5dbe2ea801d77d77ed8400e752f631f352a8', + '4a463f330397bebbca3b05702e27f7a8450cada3', 'condition': 'checkout_src_internal', }, @@ -4836,25 +4740,25 @@ deps = { 'src/third_party/widevine/cdm/chromeos': { 'url': Var('chrome_git') + '/chrome/deps/widevine/cdm/chromeos.git' + '@' + - 'b3c0f132204e9732422075787138ce2cb60faa4a', + 'c0c105991677d8ef446cf23989939f2dedece36a', 'condition': '(checkout_chromeos or checkout_linux) and checkout_src_internal', }, 'src/third_party/widevine/cdm/linux': { 'url': Var('chrome_git') + '/chrome/deps/widevine/cdm/linux.git' + '@' + - '8a12afc6ad470fac67ecb97bc9acf4bdbf9285e7', + 'acdae03333e2a0da65745b30f6764f06eec655e4', 'condition': 'checkout_linux and checkout_src_internal', }, 'src/third_party/widevine/cdm/mac': { 'url': Var('chrome_git') + '/chrome/deps/widevine/cdm/mac.git' + '@' + - '8c2898cf5e27669beeb7fc432a30f953f2541106', + '6d4742c1d3197bd3e8d5884f8620286bd3ac89be', 'condition': 'checkout_mac and checkout_src_internal', }, 'src/third_party/widevine/cdm/win': { 'url': Var('chrome_git') + '/chrome/deps/widevine/cdm/win.git' + '@' + - '33d580b25178a85837950972b985f555c6d65fa9', + '5a5f896c36cbf8708705f5fbfcc6427a73e7551a', 'condition': 'checkout_win and checkout_src_internal', }, @@ -4948,14 +4852,12 @@ include_rules = [ '-third_party/abseil-cpp/absl/base/attributes.h', '-third_party/abseil-cpp/absl/base/no_destructor.h', '-third_party/abseil-cpp/absl/base/nullability.h', - '-third_party/abseil-cpp/absl/container', - '+third_party/abseil-cpp/absl/container/inlined_vector.h', - '-third_party/abseil-cpp/absl/crc', + '-third_party/abseil-cpp/absl/container/btree_map.h', + '-third_party/abseil-cpp/absl/container/btree_set.h', '-third_party/abseil-cpp/absl/flags', '-third_party/abseil-cpp/absl/functional/any_invocable.h', '-third_party/abseil-cpp/absl/functional/bind_front.h', '-third_party/abseil-cpp/absl/functional/function_ref.h', - '-third_party/abseil-cpp/absl/functional/overload.h', '-third_party/abseil-cpp/absl/hash', '-third_party/abseil-cpp/absl/log', '-third_party/abseil-cpp/absl/random', @@ -5546,7 +5448,7 @@ hooks = [ { 'name': 'Fetch PGO profiles for mac arm', 'pattern': '.', - 'condition': 'checkout_pgo_profiles and (checkout_mac or checkout_android or checkout_fuchsia or checkout_ios)', + 'condition': 'checkout_pgo_profiles and (checkout_mac or checkout_fuchsia or checkout_ios)', 'action': [ 'python3', 'src/tools/update_pgo_profiles.py', '--target=mac-arm', diff --git a/naiveproxy/src/base/BUILD.gn b/naiveproxy/src/base/BUILD.gn index 07b0b4d11c..f12b15ab67 100644 --- a/naiveproxy/src/base/BUILD.gn +++ b/naiveproxy/src/base/BUILD.gn @@ -531,6 +531,7 @@ component("base") { "profiler/periodic_sampling_scheduler.h", "profiler/profile_builder.h", "profiler/register_context.h", + "profiler/register_context_registers.h", "profiler/sample_metadata.cc", "profiler/sample_metadata.h", "profiler/sampling_profiler_thread_token.cc", @@ -549,15 +550,13 @@ component("base") { "profiler/stack_unwind_data.h", "profiler/suspendable_thread_delegate.h", "profiler/thread_delegate.h", + "profiler/thread_group_profiler.cc", + "profiler/thread_group_profiler.h", "profiler/thread_group_profiler_client.h", "profiler/unwinder.cc", "profiler/unwinder.h", "rand_util.cc", "rand_util.h", - "ranges/algorithm.h", - "ranges/from_range.h", - "ranges/functional.h", - "ranges/ranges.h", "run_loop.cc", "run_loop.h", "sampling_heap_profiler/lock_free_address_hash_set.cc", @@ -691,7 +690,6 @@ component("base") { "task/sequence_manager/enqueue_order_generator.h", "task/sequence_manager/fence.cc", "task/sequence_manager/fence.h", - "task/sequence_manager/lazily_deallocated_deque.h", "task/sequence_manager/sequence_manager.cc", "task/sequence_manager/sequence_manager.h", "task/sequence_manager/sequence_manager_impl.cc", @@ -879,6 +877,7 @@ component("base") { "traits_bag.h", "tuple.h", "types/always_false.h", + "types/cxx23_from_range.h", "types/cxx23_is_scoped_enum.h", "types/cxx23_to_underlying.h", "types/expected.h", @@ -1200,6 +1199,8 @@ component("base") { "android/jni_array.h", "android/jni_bytebuffer.cc", "android/jni_bytebuffer.h", + "android/jni_callback.cc", + "android/jni_callback.h", "android/jni_registrar.cc", "android/jni_registrar.h", "android/jni_string.cc", @@ -1989,7 +1990,7 @@ component("base") { "process/port_provider_mac.cc", "process/port_provider_mac.h", "process/process_handle_mac.cc", - "process/process_info_mac.cc", + "process/process_info_mac.mm", "process/process_iterator_mac.cc", "process/process_mac.cc", "process/process_metrics_mac.cc", diff --git a/naiveproxy/src/base/allocator/partition_alloc_features.cc b/naiveproxy/src/base/allocator/partition_alloc_features.cc index 773fc19aae..c2a96c79ac 100644 --- a/naiveproxy/src/base/allocator/partition_alloc_features.cc +++ b/naiveproxy/src/base/allocator/partition_alloc_features.cc @@ -20,8 +20,7 @@ #include "partition_alloc/shim/allocator_shim_dispatch_to_noop_on_free.h" #include "partition_alloc/thread_cache.h" -namespace base { -namespace features { +namespace base::features { namespace { @@ -48,7 +47,8 @@ constexpr FeatureParam::Option {UnretainedDanglingPtrMode::kDumpWithoutCrashing, "dump_without_crashing"}, }; -const base::FeatureParam +// Note: Do not use the prepared macro as of no need for a local cache. +constinit const FeatureParam kUnretainedDanglingPtrModeParam = { &kPartitionAllocUnretainedDanglingPtr, "mode", @@ -73,7 +73,8 @@ constexpr FeatureParam::Option kDanglingPtrModeOption[] = { {DanglingPtrMode::kCrash, "crash"}, {DanglingPtrMode::kLogOnly, "log_only"}, }; -const base::FeatureParam kDanglingPtrModeParam{ +// Note: Do not use the prepared macro as of no need for a local cache. +constinit const FeatureParam kDanglingPtrModeParam{ &kPartitionAllocDanglingPtr, "mode", DanglingPtrMode::kCrash, @@ -83,7 +84,8 @@ constexpr FeatureParam::Option kDanglingPtrTypeOption[] = { {DanglingPtrType::kAll, "all"}, {DanglingPtrType::kCrossTask, "cross_task"}, }; -const base::FeatureParam kDanglingPtrTypeParam{ +// Note: Do not use the prepared macro as of no need for a local cache. +constinit const FeatureParam kDanglingPtrTypeParam{ &kPartitionAllocDanglingPtr, "type", DanglingPtrType::kAll, @@ -128,7 +130,8 @@ constexpr FeatureParam::Option kNonRendererStr}, {PartitionAllocWithAdvancedChecksEnabledProcesses::kAllProcesses, kAllProcessesStr}}; -const base::FeatureParam +// Note: Do not use the prepared macro as of no need for a local cache. +constinit const FeatureParam kPartitionAllocWithAdvancedChecksEnabledProcessesParam{ &kPartitionAllocWithAdvancedChecks, kPAFeatureEnabledProcessesStr, PartitionAllocWithAdvancedChecksEnabledProcesses::kBrowserOnly, @@ -138,15 +141,17 @@ BASE_FEATURE(kPartitionAllocSchedulerLoopQuarantine, "PartitionAllocSchedulerLoopQuarantine", FEATURE_DISABLED_BY_DEFAULT); // Scheduler Loop Quarantine's per-branch capacity in bytes. -const base::FeatureParam +// Note: Do not use the prepared macro as of no need for a local cache. +constinit const FeatureParam kPartitionAllocSchedulerLoopQuarantineBranchCapacity{ &kPartitionAllocSchedulerLoopQuarantine, "PartitionAllocSchedulerLoopQuarantineBranchCapacity", 0}; // Scheduler Loop Quarantine's capacity for the UI thread in bytes. -const base::FeatureParam - kPartitionAllocSchedulerLoopQuarantineBrowserUICapacity{ - &kPartitionAllocSchedulerLoopQuarantine, - "PartitionAllocSchedulerLoopQuarantineBrowserUICapacity", 0}; +BASE_FEATURE_PARAM(int, + kPartitionAllocSchedulerLoopQuarantineBrowserUICapacity, + &kPartitionAllocSchedulerLoopQuarantine, + "PartitionAllocSchedulerLoopQuarantineBrowserUICapacity", + 0); BASE_FEATURE(kPartitionAllocZappingByFreeFlags, "PartitionAllocZappingByFreeFlags", @@ -155,6 +160,10 @@ BASE_FEATURE(kPartitionAllocZappingByFreeFlags, BASE_FEATURE(kPartitionAllocEventuallyZeroFreedMemory, "PartitionAllocEventuallyZeroFreedMemory", FEATURE_DISABLED_BY_DEFAULT); + +BASE_FEATURE(kPartitionAllocFewerMemoryRegions, + "PartitionAllocFewerMemoryRegions", + FEATURE_DISABLED_BY_DEFAULT); #endif // PA_BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) BASE_FEATURE(kPartitionAllocBackupRefPtr, @@ -174,25 +183,30 @@ constexpr FeatureParam::Option {BackupRefPtrEnabledProcesses::kNonRenderer, kNonRendererStr}, {BackupRefPtrEnabledProcesses::kAllProcesses, kAllProcessesStr}}; -const base::FeatureParam - kBackupRefPtrEnabledProcessesParam{ - &kPartitionAllocBackupRefPtr, kPAFeatureEnabledProcessesStr, +BASE_FEATURE_ENUM_PARAM(BackupRefPtrEnabledProcesses, + kBackupRefPtrEnabledProcessesParam, + &kPartitionAllocBackupRefPtr, + kPAFeatureEnabledProcessesStr, #if PA_BUILDFLAG(IS_MAC) && PA_BUILDFLAG(PA_ARCH_CPU_ARM64) - BackupRefPtrEnabledProcesses::kNonRenderer, + BackupRefPtrEnabledProcesses::kNonRenderer, #else - BackupRefPtrEnabledProcesses::kAllProcesses, + BackupRefPtrEnabledProcesses::kAllProcesses, #endif - &kBackupRefPtrEnabledProcessesOptions}; + &kBackupRefPtrEnabledProcessesOptions); constexpr FeatureParam::Option kBackupRefPtrModeOptions[] = { {BackupRefPtrMode::kDisabled, "disabled"}, {BackupRefPtrMode::kEnabled, "enabled"}, }; -const base::FeatureParam kBackupRefPtrModeParam{ - &kPartitionAllocBackupRefPtr, "brp-mode", BackupRefPtrMode::kEnabled, - &kBackupRefPtrModeOptions}; -const base::FeatureParam kBackupRefPtrExtraExtrasSizeParam{ +BASE_FEATURE_ENUM_PARAM(BackupRefPtrMode, + kBackupRefPtrModeParam, + &kPartitionAllocBackupRefPtr, + "brp-mode", + BackupRefPtrMode::kEnabled, + &kBackupRefPtrModeOptions); +// Note: Do not use the prepared macro as of no need for a local cache. +constinit const FeatureParam kBackupRefPtrExtraExtrasSizeParam{ &kPartitionAllocBackupRefPtr, "brp-extra-extras-size", 0}; BASE_FEATURE(kPartitionAllocMemoryTagging, @@ -208,7 +222,8 @@ constexpr FeatureParam::Option kMemtagModeOptions[] = { {MemtagMode::kSync, "sync"}, {MemtagMode::kAsync, "async"}}; -const base::FeatureParam kMemtagModeParam{ +// Note: Do not use the prepared macro as of no need for a local cache. +constinit const FeatureParam kMemtagModeParam{ &kPartitionAllocMemoryTagging, "memtag-mode", #if PA_BUILDFLAG(USE_FULL_MTE) MemtagMode::kSync, @@ -222,7 +237,8 @@ constexpr FeatureParam::Option kRetagModeOptions[] = { {RetagMode::kRandom, "random"}, }; -const base::FeatureParam kRetagModeParam{ +// Note: Do not use the prepared macro as of no need for a local cache. +constinit const FeatureParam kRetagModeParam{ &kPartitionAllocMemoryTagging, "retag-mode", RetagMode::kIncrement, &kRetagModeOptions}; @@ -232,7 +248,8 @@ constexpr FeatureParam::Option {MemoryTaggingEnabledProcesses::kNonRenderer, kNonRendererStr}, {MemoryTaggingEnabledProcesses::kAllProcesses, kAllProcessesStr}}; -const base::FeatureParam +// Note: Do not use the prepared macro as of no need for a local cache. +constinit const FeatureParam kMemoryTaggingEnabledProcessesParam{ &kPartitionAllocMemoryTagging, kPAFeatureEnabledProcessesStr, #if PA_BUILDFLAG(USE_FULL_MTE) @@ -257,13 +274,16 @@ BASE_FEATURE(kPartitionAllocPermissiveMte, #endif ); -const base::FeatureParam kBackupRefPtrAsanEnableDereferenceCheckParam{ +// Note: Do not use the prepared macro to implement following FeatureParams +// as of no need for a local cache. +constinit const FeatureParam kBackupRefPtrAsanEnableDereferenceCheckParam{ &kPartitionAllocBackupRefPtr, "asan-enable-dereference-check", true}; -const base::FeatureParam kBackupRefPtrAsanEnableExtractionCheckParam{ +constinit const FeatureParam kBackupRefPtrAsanEnableExtractionCheckParam{ &kPartitionAllocBackupRefPtr, "asan-enable-extraction-check", false}; // Not much noise at the moment to enable by default. -const base::FeatureParam kBackupRefPtrAsanEnableInstantiationCheckParam{ - &kPartitionAllocBackupRefPtr, "asan-enable-instantiation-check", true}; +constinit const FeatureParam + kBackupRefPtrAsanEnableInstantiationCheckParam{ + &kPartitionAllocBackupRefPtr, "asan-enable-instantiation-check", true}; // If enabled, switches the bucket distribution to a denser one. // @@ -277,12 +297,13 @@ BASE_FEATURE(kPartitionAllocUseDenserDistribution, FEATURE_ENABLED_BY_DEFAULT #endif // BUILDFLAG(IS_ANDROID) && defined(ARCH_CPU_32_BITS) ); -const base::FeatureParam::Option +const FeatureParam::Option kPartitionAllocBucketDistributionOption[] = { {BucketDistributionMode::kDefault, "default"}, {BucketDistributionMode::kDenser, "denser"}, }; -const base::FeatureParam +// Note: Do not use the prepared macro as of no need for a local cache. +constinit const FeatureParam kPartitionAllocBucketDistributionParam{ &kPartitionAllocUseDenserDistribution, "mode", #if BUILDFLAG(IS_ANDROID) && defined(ARCH_CPU_32_BITS) @@ -295,10 +316,12 @@ const base::FeatureParam BASE_FEATURE(kPartitionAllocMemoryReclaimer, "PartitionAllocMemoryReclaimer", FEATURE_ENABLED_BY_DEFAULT); -const base::FeatureParam kPartitionAllocMemoryReclaimerInterval = { - &kPartitionAllocMemoryReclaimer, "interval", - TimeDelta(), // Defaults to zero. -}; +BASE_FEATURE_PARAM(TimeDelta, + kPartitionAllocMemoryReclaimerInterval, + &kPartitionAllocMemoryReclaimer, + "interval", + TimeDelta() // Defaults to zero. +); // Configures whether we set a lower limit for renderers that do not have a main // frame, similar to the limit that is already done for backgrounded renderers. @@ -311,16 +334,17 @@ BASE_FEATURE(kLowerPAMemoryLimitForNonMainRenderers, BASE_FEATURE(kPartitionAllocStraightenLargerSlotSpanFreeLists, "PartitionAllocStraightenLargerSlotSpanFreeLists", FEATURE_ENABLED_BY_DEFAULT); -const base::FeatureParam< - partition_alloc::StraightenLargerSlotSpanFreeListsMode>::Option - kPartitionAllocStraightenLargerSlotSpanFreeListsModeOption[] = { +const FeatureParam:: + Option kPartitionAllocStraightenLargerSlotSpanFreeListsModeOption[] = { {partition_alloc::StraightenLargerSlotSpanFreeListsMode:: kOnlyWhenUnprovisioning, "only-when-unprovisioning"}, {partition_alloc::StraightenLargerSlotSpanFreeListsMode::kAlways, "always"}, }; -const base::FeatureParam +// Note: Do not use the prepared macro as of no need for a local cache. +constinit const FeatureParam< + partition_alloc::StraightenLargerSlotSpanFreeListsMode> kPartitionAllocStraightenLargerSlotSpanFreeListsMode = { &kPartitionAllocStraightenLargerSlotSpanFreeLists, "mode", @@ -353,9 +377,11 @@ BASE_FEATURE(kPageAllocatorRetryOnCommitFailure, // The feature: kPartialLowEndModeOnMidRangeDevices is defined in // //base/features.cc. Since the following feature param is related to // PartitionAlloc, define the param here. -const FeatureParam kPartialLowEndModeExcludePartitionAllocSupport{ - &kPartialLowEndModeOnMidRangeDevices, "exclude-partition-alloc-support", - false}; +BASE_FEATURE_PARAM(bool, + kPartialLowEndModeExcludePartitionAllocSupport, + &kPartialLowEndModeOnMidRangeDevices, + "exclude-partition-alloc-support", + false); #endif BASE_FEATURE(kEnableConfigurableThreadCacheMultiplier, @@ -373,19 +399,19 @@ MIRACLE_PARAMETER_FOR_DOUBLE(GetThreadCacheMultiplierForAndroid, 1.) constexpr partition_alloc::internal::base::TimeDelta ToPartitionAllocTimeDelta( - base::TimeDelta time_delta) { + TimeDelta time_delta) { return partition_alloc::internal::base::Microseconds( time_delta.InMicroseconds()); } -constexpr base::TimeDelta FromPartitionAllocTimeDelta( +constexpr TimeDelta FromPartitionAllocTimeDelta( partition_alloc::internal::base::TimeDelta time_delta) { - return base::Microseconds(time_delta.InMicroseconds()); + return Microseconds(time_delta.InMicroseconds()); } BASE_FEATURE(kEnableConfigurableThreadCachePurgeInterval, "EnableConfigurableThreadCachePurgeInterval", - base::FEATURE_DISABLED_BY_DEFAULT); + FEATURE_DISABLED_BY_DEFAULT); MIRACLE_PARAMETER_FOR_TIME_DELTA( GetThreadCacheMinPurgeIntervalValue, @@ -422,7 +448,7 @@ GetThreadCacheDefaultPurgeInterval() { BASE_FEATURE(kEnableConfigurableThreadCacheMinCachedMemoryForPurging, "EnableConfigurableThreadCacheMinCachedMemoryForPurging", - base::FEATURE_DISABLED_BY_DEFAULT); + FEATURE_DISABLED_BY_DEFAULT); MIRACLE_PARAMETER_FOR_INT( GetThreadCacheMinCachedMemoryForPurgingBytes, @@ -445,7 +471,7 @@ BASE_FEATURE(kPartitionAllocDisableBRPInBufferPartition, #if PA_BUILDFLAG(USE_FREELIST_DISPATCHER) BASE_FEATURE(kUsePoolOffsetFreelists, "PartitionAllocUsePoolOffsetFreelists", - base::FEATURE_ENABLED_BY_DEFAULT); + FEATURE_ENABLED_BY_DEFAULT); #endif BASE_FEATURE(kPartitionAllocAdjustSizeWhenInForeground, @@ -458,12 +484,12 @@ BASE_FEATURE(kPartitionAllocAdjustSizeWhenInForeground, BASE_FEATURE(kPartitionAllocUseSmallSingleSlotSpans, "PartitionAllocUseSmallSingleSlotSpans", - base::FEATURE_ENABLED_BY_DEFAULT); + FEATURE_ENABLED_BY_DEFAULT); #if PA_CONFIG(ENABLE_SHADOW_METADATA) BASE_FEATURE(kPartitionAllocShadowMetadata, "PartitionAllocShadowMetadata", - base::FEATURE_DISABLED_BY_DEFAULT); + FEATURE_DISABLED_BY_DEFAULT); constexpr FeatureParam::Option kShadowMetadataEnabledProcessesOptions[] = { @@ -471,12 +497,12 @@ constexpr FeatureParam::Option {ShadowMetadataEnabledProcesses::kAllChildProcesses, kAllChildProcessesStr}}; -const base::FeatureParam +// Note: Do not use the prepared macro as of no need for a local cache. +constinit const FeatureParam kShadowMetadataEnabledProcessesParam{ &kPartitionAllocShadowMetadata, kPAFeatureEnabledProcessesStr, ShadowMetadataEnabledProcesses::kRendererOnly, &kShadowMetadataEnabledProcessesOptions}; #endif // PA_CONFIG(ENABLE_SHADOW_METADATA) -} // namespace features -} // namespace base +} // namespace base::features diff --git a/naiveproxy/src/base/allocator/partition_alloc_features.h b/naiveproxy/src/base/allocator/partition_alloc_features.h index 3afe88e299..9787ce7d21 100644 --- a/naiveproxy/src/base/allocator/partition_alloc_features.h +++ b/naiveproxy/src/base/allocator/partition_alloc_features.h @@ -15,8 +15,7 @@ #include "partition_alloc/partition_alloc_base/time/time.h" #include "partition_alloc/partition_root.h" -namespace base { -namespace features { +namespace base::features { namespace internal { @@ -37,13 +36,13 @@ enum class PAFeatureEnabledProcesses { } // namespace internal -extern const BASE_EXPORT Feature kPartitionAllocUnretainedDanglingPtr; +BASE_EXPORT BASE_DECLARE_FEATURE(kPartitionAllocUnretainedDanglingPtr); enum class UnretainedDanglingPtrMode { kCrash, kDumpWithoutCrashing, }; -extern const BASE_EXPORT base::FeatureParam - kUnretainedDanglingPtrModeParam; +BASE_EXPORT BASE_DECLARE_FEATURE_PARAM(UnretainedDanglingPtrMode, + kUnretainedDanglingPtrModeParam); // See /docs/dangling_ptr.md BASE_EXPORT BASE_DECLARE_FEATURE(kPartitionAllocDanglingPtr); @@ -62,8 +61,7 @@ enum class DanglingPtrMode { // Note: This will be extended with a single shot DumpWithoutCrashing. }; -extern const BASE_EXPORT base::FeatureParam - kDanglingPtrModeParam; +BASE_EXPORT BASE_DECLARE_FEATURE_PARAM(DanglingPtrMode, kDanglingPtrModeParam); enum class DanglingPtrType { // Act on any dangling raw_ptr released after being freed. kAll, // (default) @@ -74,8 +72,7 @@ enum class DanglingPtrType { // Note: This will be extended with LongLived }; -extern const BASE_EXPORT base::FeatureParam - kDanglingPtrTypeParam; +BASE_EXPORT BASE_DECLARE_FEATURE_PARAM(DanglingPtrType, kDanglingPtrTypeParam); using PartitionAllocWithAdvancedChecksEnabledProcesses = internal::PAFeatureEnabledProcesses; @@ -88,17 +85,19 @@ BASE_EXPORT int GetPartitionAllocLargeThreadCacheSizeValueForLowRAMAndroid(); BASE_EXPORT BASE_DECLARE_FEATURE(kPartitionAllocLargeEmptySlotSpanRing); BASE_EXPORT BASE_DECLARE_FEATURE(kPartitionAllocWithAdvancedChecks); -extern const BASE_EXPORT - base::FeatureParam - kPartitionAllocWithAdvancedChecksEnabledProcessesParam; +BASE_EXPORT BASE_DECLARE_FEATURE_PARAM( + PartitionAllocWithAdvancedChecksEnabledProcesses, + kPartitionAllocWithAdvancedChecksEnabledProcessesParam); BASE_EXPORT BASE_DECLARE_FEATURE(kPartitionAllocSchedulerLoopQuarantine); // Scheduler Loop Quarantine's per-thread capacity in bytes. -extern const BASE_EXPORT base::FeatureParam - kPartitionAllocSchedulerLoopQuarantineBranchCapacity; +BASE_EXPORT BASE_DECLARE_FEATURE_PARAM( + int, + kPartitionAllocSchedulerLoopQuarantineBranchCapacity); // Scheduler Loop Quarantine's capacity for the UI thread in bytes. // TODO(https://crbug.com/387470567): Support more thread types. -extern const BASE_EXPORT base::FeatureParam - kPartitionAllocSchedulerLoopQuarantineBrowserUICapacity; +BASE_EXPORT BASE_DECLARE_FEATURE_PARAM( + int, + kPartitionAllocSchedulerLoopQuarantineBrowserUICapacity); BASE_EXPORT BASE_DECLARE_FEATURE(kPartitionAllocZappingByFreeFlags); @@ -106,6 +105,11 @@ BASE_EXPORT BASE_DECLARE_FEATURE(kPartitionAllocZappingByFreeFlags); // security guarantee, but to increase the compression ratio of PartitionAlloc's // fragmented super pages. BASE_EXPORT BASE_DECLARE_FEATURE(kPartitionAllocEventuallyZeroFreedMemory); + +// Whether to make PartitionAlloc use fewer memory regions. This matters on +// Linux-based systems, where there is a per-process limit that we hit in some +// cases. See the comment in PartitionBucket::SlotSpanCOmmitedSize() for detail. +BASE_EXPORT BASE_DECLARE_FEATURE(kPartitionAllocFewerMemoryRegions); #endif // PA_BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) using BackupRefPtrEnabledProcesses = internal::PAFeatureEnabledProcesses; @@ -143,41 +147,44 @@ enum class BucketDistributionMode : uint8_t { }; BASE_EXPORT BASE_DECLARE_FEATURE(kPartitionAllocBackupRefPtr); -extern const BASE_EXPORT base::FeatureParam - kBackupRefPtrEnabledProcessesParam; -extern const BASE_EXPORT base::FeatureParam - kBackupRefPtrModeParam; -extern const BASE_EXPORT base::FeatureParam - kBackupRefPtrExtraExtrasSizeParam; +BASE_EXPORT BASE_DECLARE_FEATURE_PARAM(BackupRefPtrEnabledProcesses, + kBackupRefPtrEnabledProcessesParam); +BASE_EXPORT BASE_DECLARE_FEATURE_PARAM(BackupRefPtrMode, + kBackupRefPtrModeParam); +BASE_EXPORT BASE_DECLARE_FEATURE_PARAM(int, + kBackupRefPtrExtraExtrasSizeParam); BASE_EXPORT BASE_DECLARE_FEATURE(kPartitionAllocMemoryTagging); -extern const BASE_EXPORT base::FeatureParam kMemtagModeParam; -extern const BASE_EXPORT base::FeatureParam kRetagModeParam; -extern const BASE_EXPORT base::FeatureParam - kMemoryTaggingEnabledProcessesParam; +BASE_EXPORT BASE_DECLARE_FEATURE_PARAM(MemtagMode, kMemtagModeParam); +BASE_EXPORT BASE_DECLARE_FEATURE_PARAM(RetagMode, kRetagModeParam); +BASE_EXPORT BASE_DECLARE_FEATURE_PARAM(MemoryTaggingEnabledProcesses, + kMemoryTaggingEnabledProcessesParam); // Kill switch for memory tagging. Skips any code related to memory tagging when // enabled. BASE_EXPORT BASE_DECLARE_FEATURE(kKillPartitionAllocMemoryTagging); BASE_EXPORT BASE_DECLARE_FEATURE(kPartitionAllocPermissiveMte); -extern const BASE_EXPORT base::FeatureParam - kBackupRefPtrAsanEnableDereferenceCheckParam; -extern const BASE_EXPORT base::FeatureParam - kBackupRefPtrAsanEnableExtractionCheckParam; -extern const BASE_EXPORT base::FeatureParam - kBackupRefPtrAsanEnableInstantiationCheckParam; -extern const BASE_EXPORT base::FeatureParam - kPartitionAllocBucketDistributionParam; +BASE_EXPORT BASE_DECLARE_FEATURE_PARAM( + bool, + kBackupRefPtrAsanEnableDereferenceCheckParam); +BASE_EXPORT BASE_DECLARE_FEATURE_PARAM( + bool, + kBackupRefPtrAsanEnableExtractionCheckParam); +BASE_EXPORT BASE_DECLARE_FEATURE_PARAM( + bool, + kBackupRefPtrAsanEnableInstantiationCheckParam); +BASE_EXPORT BASE_DECLARE_FEATURE_PARAM(BucketDistributionMode, + kPartitionAllocBucketDistributionParam); BASE_EXPORT BASE_DECLARE_FEATURE(kLowerPAMemoryLimitForNonMainRenderers); BASE_EXPORT BASE_DECLARE_FEATURE(kPartitionAllocUseDenserDistribution); BASE_EXPORT BASE_DECLARE_FEATURE(kPartitionAllocMemoryReclaimer); -extern const BASE_EXPORT base::FeatureParam - kPartitionAllocMemoryReclaimerInterval; +BASE_EXPORT BASE_DECLARE_FEATURE_PARAM(TimeDelta, + kPartitionAllocMemoryReclaimerInterval); BASE_EXPORT BASE_DECLARE_FEATURE( kPartitionAllocStraightenLargerSlotSpanFreeLists); -extern const BASE_EXPORT - base::FeatureParam - kPartitionAllocStraightenLargerSlotSpanFreeListsMode; +BASE_EXPORT BASE_DECLARE_FEATURE_PARAM( + partition_alloc::StraightenLargerSlotSpanFreeListsMode, + kPartitionAllocStraightenLargerSlotSpanFreeListsMode); BASE_EXPORT BASE_DECLARE_FEATURE(kPartitionAllocSortSmallerSlotSpanFreeLists); BASE_EXPORT BASE_DECLARE_FEATURE(kPartitionAllocSortActiveSlotSpans); @@ -186,8 +193,9 @@ BASE_EXPORT BASE_DECLARE_FEATURE(kPageAllocatorRetryOnCommitFailure); #endif #if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_CHROMEOS) -extern const base::FeatureParam - kPartialLowEndModeExcludePartitionAllocSupport; +BASE_EXPORT BASE_DECLARE_FEATURE_PARAM( + bool, + kPartialLowEndModeExcludePartitionAllocSupport); #endif BASE_EXPORT BASE_DECLARE_FEATURE(kEnableConfigurableThreadCacheMultiplier); @@ -229,11 +237,10 @@ BASE_EXPORT BASE_DECLARE_FEATURE(kPartitionAllocUseSmallSingleSlotSpans); using ShadowMetadataEnabledProcesses = internal::PAFeatureEnabledProcesses; BASE_EXPORT BASE_DECLARE_FEATURE(kPartitionAllocShadowMetadata); -extern const BASE_EXPORT base::FeatureParam - kShadowMetadataEnabledProcessesParam; +BASE_EXPORT BASE_DECLARE_FEATURE_PARAM(ShadowMetadataEnabledProcesses, + kShadowMetadataEnabledProcessesParam); #endif // PA_CONFIG(ENABLE_SHADOW_METADATA) -} // namespace features -} // namespace base +} // namespace base::features #endif // BASE_ALLOCATOR_PARTITION_ALLOC_FEATURES_H_ diff --git a/naiveproxy/src/base/allocator/partition_alloc_support.cc b/naiveproxy/src/base/allocator/partition_alloc_support.cc index 6169d916dc..33dc66001f 100644 --- a/naiveproxy/src/base/allocator/partition_alloc_support.cc +++ b/naiveproxy/src/base/allocator/partition_alloc_support.cc @@ -4,6 +4,7 @@ #include "base/allocator/partition_alloc_support.h" +#include #include #include #include @@ -31,7 +32,6 @@ #include "base/metrics/histogram_macros.h" #include "base/no_destructor.h" #include "base/pending_task.h" -#include "base/ranges/algorithm.h" #include "base/strings/string_split.h" #include "base/strings/stringprintf.h" #include "base/system/sys_info.h" @@ -465,7 +465,7 @@ std::string ExtractDanglingPtrSignature(std::string stacktrace) { size_t caller_index = 0; for (size_t i = 0; i < lines.size(); ++i) { for (const auto& patterns : callee_patterns) { - if (ranges::all_of(patterns, [&](std::string_view pattern) { + if (std::ranges::all_of(patterns, [&](std::string_view pattern) { return lines[i].find(pattern) != std::string_view::npos; })) { caller_index = i + 1; @@ -667,7 +667,7 @@ void CheckDanglingRawPtrBufferEmpty() { std::vector> stack_traces = internal::InstanceTracer::GetStackTracesForDanglingRefs(entry->id); for (const auto& raw_stack_trace : stack_traces) { - CHECK(ranges::is_partitioned(raw_stack_trace, is_frame_ptr_not_null)) + CHECK(std::ranges::is_partitioned(raw_stack_trace, is_frame_ptr_not_null)) << "`raw_stack_trace` is expected to be partitioned: non-null values " "at the begining followed by `nullptr`s."; LOG(ERROR) << "Dangling reference from:\n"; @@ -675,8 +675,8 @@ void CheckDanglingRawPtrBufferEmpty() { // This call truncates the `nullptr` tail of the stack // trace (see the `is_partitioned` CHECK above). span(raw_stack_trace.begin(), - ranges::partition_point(raw_stack_trace, - is_frame_ptr_not_null))) + std::ranges::partition_point( + raw_stack_trace, is_frame_ptr_not_null))) << "\n"; } #else @@ -880,43 +880,28 @@ PartitionAllocSupport::GetBrpConfiguration(const std::string& process_type) { // TODO(bartekn): Switch to DCHECK once confirmed there are no issues. CHECK(base::FeatureList::GetInstance()); - bool process_affected_by_brp_flag = false; -#if (PA_BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) && \ - PA_BUILDFLAG(ENABLE_BACKUP_REF_PTR_SUPPORT) && \ - !PA_BUILDFLAG(FORCE_DISABLE_BACKUP_REF_PTR_FEATURE)) || \ - PA_BUILDFLAG(USE_ASAN_BACKUP_REF_PTR) - if (base::FeatureList::IsEnabled( - base::features::kPartitionAllocBackupRefPtr)) { - // No specified process type means this is the Browser process. - process_affected_by_brp_flag = ShouldEnableFeatureOnProcess( - base::features::kBackupRefPtrEnabledProcessesParam.Get(), process_type); - } -#endif // (PA_BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) && - // PA_BUILDFLAG(ENABLE_BACKUP_REF_PTR_SUPPORT)&& - // !PA_BUILDFLAG(FORCE_DISABLE_BACKUP_REF_PTR_FEATURE)) || - // PA_BUILDFLAG(USE_ASAN_BACKUP_REF_PTR) - - const bool enable_brp = #if PA_BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) && \ - PA_BUILDFLAG(ENABLE_BACKUP_REF_PTR_SUPPORT) - // kDisabled is equivalent to !IsEnabled(kPartitionAllocBackupRefPtr). - process_affected_by_brp_flag && + PA_BUILDFLAG(ENABLE_BACKUP_REF_PTR_SUPPORT) && \ + !PA_BUILDFLAG(FORCE_DISABLE_BACKUP_REF_PTR_FEATURE) + + if (base::FeatureList::IsEnabled( + base::features::kPartitionAllocBackupRefPtr) && base::features::kBackupRefPtrModeParam.Get() != - base::features::BackupRefPtrMode::kDisabled; -#else - false; + base::features::BackupRefPtrMode::kDisabled && + ShouldEnableFeatureOnProcess( + base::features::kBackupRefPtrEnabledProcessesParam.Get(), + process_type)) { + return { + .enable_brp = true, + .extra_extras_size = static_cast( + base::features::kBackupRefPtrExtraExtrasSizeParam.Get()), + }; + } #endif - size_t extra_extras_size = 0; - if (enable_brp) { - extra_extras_size = static_cast( - base::features::kBackupRefPtrExtraExtrasSizeParam.Get()); - } - return { - enable_brp, - process_affected_by_brp_flag, - extra_extras_size, + .enable_brp = false, + .extra_extras_size = 0, }; } @@ -1019,8 +1004,15 @@ void PartitionAllocSupport::ReconfigureAfterFeatureListInit( [[maybe_unused]] BrpConfiguration brp_config = GetBrpConfiguration(process_type); -#if PA_BUILDFLAG(USE_ASAN_BACKUP_REF_PTR) - if (brp_config.process_affected_by_brp_flag) { + // Configure ASAN hooks to report the `MiraclePtr status`. This is enabled + // only if BackupRefPtr is normally enabled in the current process for the + // current platform. Note that CastOS and iOS aren't protected by BackupRefPtr + // a the moment, so they are excluded. +#if PA_BUILDFLAG(USE_ASAN_BACKUP_REF_PTR) && !PA_BUILDFLAG(IS_CASTOS) && \ + !PA_BUILDFLAG(IS_IOS) + if (ShouldEnableFeatureOnProcess( + base::features::kBackupRefPtrEnabledProcessesParam.Get(), + process_type)) { base::RawPtrAsanService::GetInstance().Configure( base::EnableDereferenceCheck( base::features::kBackupRefPtrAsanEnableDereferenceCheckParam.Get()), @@ -1059,6 +1051,8 @@ void PartitionAllocSupport::ReconfigureAfterFeatureListInit( base::features::kPartitionAllocZappingByFreeFlags); const bool eventually_zero_freed_memory = base::FeatureList::IsEnabled( base::features::kPartitionAllocEventuallyZeroFreedMemory); + const bool fewer_memory_regions = base::FeatureList::IsEnabled( + base::features::kPartitionAllocFewerMemoryRegions); #if PA_BUILDFLAG(USE_FREELIST_DISPATCHER) const bool use_pool_offset_freelists = @@ -1168,6 +1162,7 @@ void PartitionAllocSupport::ReconfigureAfterFeatureListInit( scheduler_loop_quarantine_branch_capacity_in_bytes, allocator_shim::ZappingByFreeFlags(zapping_by_free_flags), allocator_shim::EventuallyZeroFreedMemory(eventually_zero_freed_memory), + allocator_shim::FewerMemoryRegions(fewer_memory_regions), allocator_shim::UsePoolOffsetFreelists(use_pool_offset_freelists), use_small_single_slot_spans); diff --git a/naiveproxy/src/base/allocator/partition_alloc_support.h b/naiveproxy/src/base/allocator/partition_alloc_support.h index b4c5dc598a..337511a619 100644 --- a/naiveproxy/src/base/allocator/partition_alloc_support.h +++ b/naiveproxy/src/base/allocator/partition_alloc_support.h @@ -49,7 +49,6 @@ class BASE_EXPORT PartitionAllocSupport { public: struct BrpConfiguration { bool enable_brp = false; - bool process_affected_by_brp_flag = false; // TODO(https://crbug.com/371135823): Remove after the investigation. size_t extra_extras_size = 0; diff --git a/naiveproxy/src/base/allocator/partition_allocator/PRESUBMIT.py b/naiveproxy/src/base/allocator/partition_allocator/PRESUBMIT.py index dd07e3d895..0ea7eee5ad 100644 --- a/naiveproxy/src/base/allocator/partition_allocator/PRESUBMIT.py +++ b/naiveproxy/src/base/allocator/partition_allocator/PRESUBMIT.py @@ -230,3 +230,20 @@ def CheckCpp17CompatibleKeywords(input_api, output_api): '%s:%d\nPartitionAlloc disallows C++20 keywords: %s' % (f.LocalPath(), line_number + 1, keyword))) return errors + +# Check `NDEBUG` is not used inside partition_alloc. We prefer to use the +# buildflags `#if PA_BUILDFLAG(IS_DEBUG)` instead. +def CheckNoNDebug(input_api, output_api): + sources = lambda affected_file: input_api.FilterSourceFile( + affected_file, + files_to_skip=[], + files_to_check=[_SOURCE_FILE_PATTERN]) + + errors = [] + for f in input_api.AffectedSourceFiles(sources): + for line_number, line in f.ChangedContents(): + if 'NDEBUG' in line: + errors.append(output_api.PresubmitError('%s:%d\nPartitionAlloc' + % (f.LocalPath(), line_number + 1) + + 'disallows NDEBUG, use PA_BUILDFLAG(IS_DEBUG) instead')) + return errors diff --git a/naiveproxy/src/base/allocator/partition_allocator/partition_alloc.gni b/naiveproxy/src/base/allocator/partition_allocator/partition_alloc.gni index 2aee796018..eb51cc9458 100644 --- a/naiveproxy/src/base/allocator/partition_allocator/partition_alloc.gni +++ b/naiveproxy/src/base/allocator/partition_allocator/partition_alloc.gni @@ -4,6 +4,56 @@ import("//build_overrides/partition_alloc.gni") +# ----------------------------------------------------------------------------- +# Note on the use of `xxx_default` variable in partition_alloc. +# +# GN provides default_args() instruction. It is meant to be used by embedders, +# to override the default args declared by the embeddees (e.g. partition_alloc). +# This is the intended way to use GN. It properly interacts with the args.gn +# user's file. +# +# Unfortunately, Chrome and others embedders aren't using it. Instead, they +# expect embeddees to import global '.gni' file from the embedder, e.g. +# `//build_overrides/partition_alloc.gni`. This file sets some `xxx_default` +# variable that will be transferred to the declared args. For instance +# a library would use: +# ``` +# import("//build_overrides/library.gni") +# declare_args() { +# xxx = xxx_default +# } +# ``` +# +# We don't really want to break embedders when introducing new args. Ideally, +# We would have liked to have defaults for default variables. That would be +# a recursive problem. To resolve it, we sometimes use the `defined(...)` +# instruction to check if the embedder has defined the `xxx_default` variable or +# not. +# +# In general, we should aim to support the embedders that are using GN normally, +# and avoid requiring them to define `xxx_default` in the `//build_overrides` +# ----------------------------------------------------------------------------- + +# Some embedders uses `is_debug`, it can be used to set the default value of +# `partition_alloc_is_debug_default`. +if (!defined(partition_alloc_is_debug_default)) { + if (defined(is_debug)) { + partition_alloc_is_debug_default = is_debug + } else { + partition_alloc_is_debug_default = false + } +} + +# Some embedders uses `dcheck_always_on`, it can be used to set the default +# value of `partition_alloc_dcheck_always_on_default`. +if (!defined(partition_alloc_dcheck_always_on_default)) { + if (defined(dcheck_always_on)) { + partition_alloc_dcheck_always_on_default = dcheck_always_on + } else { + partition_alloc_dcheck_always_on_default = false + } +} + # PartitionAlloc have limited support for MSVC's cl.exe compiler. It can only # access the generate "buildflags" and the "raw_ptr" definitions implemented # with RawPtrNoOpImpl. Everything else is considered not supported. @@ -48,6 +98,12 @@ has_memory_tagging = current_cpu == "arm64" && is_clang && !is_asan && is_linux && current_os != "openwrt" declare_args() { + # Debug configuration. + partition_alloc_is_debug = partition_alloc_is_debug_default + + # Enable PA_DCHECKs in PartitionAlloc in release mode. + partition_alloc_dcheck_always_on = partition_alloc_dcheck_always_on_default + # Causes all the allocations to be routed via allocator_shim.cc. Usually, # the allocator shim will, in turn, route them to PartitionAlloc, but # other allocators are also supported by the allocator shim. @@ -135,8 +191,8 @@ if (use_allocator_shim && is_win) { # If libcxx_is_shared=false, libc++ is a static library. All libc++ code # will be run inside the client. The above issue will disappear. assert( - !is_component_build || (!libcxx_is_shared && !is_debug), - "The allocator shim for the Windows component build needs !libcxx_is_shared && !is_debug.") + !is_component_build || (!libcxx_is_shared && !partition_alloc_is_debug), + "The allocator shim for the Windows component build needs !libcxx_is_shared && !partition_alloc_is_debug.") } declare_args() { @@ -172,7 +228,8 @@ declare_args() { # later verify the pattern remain unchanged to ensure there is no OOB write. # It comes with performance and memory cost, hence enabled only in debug. use_partition_cookie = - is_debug || dcheck_always_on || enable_ios_corruption_hardening + partition_alloc_is_debug || partition_alloc_dcheck_always_on || + enable_ios_corruption_hardening # This will change partition cookie size to 4B or 8B, whichever equivalent to # size of InSlotMetadata. This option is useful for InSlotMetadata corruption diff --git a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/BUILD.gn b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/BUILD.gn index cce1897dbc..7f443128f7 100644 --- a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/BUILD.gn +++ b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/BUILD.gn @@ -35,7 +35,8 @@ enable_pointer_compression = # Duplicates the setup Chromium uses to define `DCHECK_IS_ON()`, but avails it # as a buildflag. -dchecks_are_on = is_debug || dcheck_always_on +partition_alloc_dchecks_are_on = + partition_alloc_is_debug || partition_alloc_dcheck_always_on # Building PartitionAlloc for Windows component build. # Currently use build_with_chromium not to affect any third_party code, @@ -151,7 +152,7 @@ pa_buildflag_header("buildflags") { "IS_CASTOS=$is_castos", "IS_CAST_ANDROID=$is_cast_android", "IS_CHROMEOS=$is_chromeos", - "IS_DEBUG=$is_debug", + "IS_DEBUG=$partition_alloc_is_debug", "RAW_PTR_ZERO_ON_CONSTRUCT=$raw_ptr_zero_on_construct", "RAW_PTR_ZERO_ON_DESTRUCT=$raw_ptr_zero_on_destruct", "RAW_PTR_ZERO_ON_MOVE=$raw_ptr_zero_on_move", @@ -171,7 +172,7 @@ pa_buildflag_header("buildflags") { "USE_RAW_PTR_BACKUP_REF_IMPL=$use_raw_ptr_backup_ref_impl", "USE_RAW_PTR_HOOKABLE_IMPL=$use_raw_ptr_hookable_impl", "ENABLE_ALLOCATOR_SHIM_PARTITION_ALLOC_DISPATCH_WITH_ADVANCED_CHECKS_SUPPORT=$enable_allocator_shim_partition_alloc_dispatch_with_advanced_checks_support", - "DCHECKS_ARE_ON=$dchecks_are_on", + "DCHECKS_ARE_ON=$partition_alloc_dchecks_are_on", "EXPENSIVE_DCHECKS_ARE_ON=$enable_expensive_dchecks", "DCHECK_IS_CONFIGURABLE=$dcheck_is_configurable", "CAN_UNWIND_WITH_FRAME_POINTERS=$can_unwind_with_frame_pointers", @@ -330,7 +331,7 @@ if (is_clang_or_gcc) { } } - if (enable_pkeys && is_debug) { + if (enable_pkeys && partition_alloc_is_debug) { config("no_stack_protector") { cflags = [ "-fno-stack-protector" ] } @@ -567,7 +568,7 @@ if (is_clang_or_gcc) { # We want to be able to test pkey mode without access to the default pkey. # This is incompatible with stack protectors since the TLS won't be pkey-tagged. - if (enable_pkeys && is_debug) { + if (enable_pkeys && partition_alloc_is_debug) { configs += [ ":no_stack_protector" ] } } @@ -1015,7 +1016,7 @@ if (build_with_chromium) { ] } - if (enable_pkeys && is_debug && !is_component_build) { + if (enable_pkeys && partition_alloc_is_debug && !is_component_build) { # This test requires RELRO, which is not enabled in component builds. # Also, require a debug build, since we only disable stack protectors in # debug builds in PartitionAlloc (see below why it's needed). diff --git a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/internal_allocator.cc b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/internal_allocator.cc index 11c132bb02..849f68fc6c 100644 --- a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/internal_allocator.cc +++ b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/internal_allocator.cc @@ -37,8 +37,4 @@ void InternalPartitionAllocated::operator delete(void* ptr, std::align_val_t) { InternalAllocatorRoot().Free(ptr); } -// A deleter for `std::unique_ptr`. -void InternalPartitionDeleter::operator()(void* ptr) const { - InternalAllocatorRoot().Free(ptr); -} } // namespace partition_alloc::internal diff --git a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/internal_allocator.h b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/internal_allocator.h index e3e5f951c3..4e6ed30024 100644 --- a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/internal_allocator.h +++ b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/internal_allocator.h @@ -48,8 +48,6 @@ T* ConstructAtInternalPartition(Args&&... args) { } // Destroy an object on heap in the internal partition. -// TODO(crbug.com/40274826) This is an unused function. Start using it in tests -// and/or in production code. template void DestroyAtInternalPartition(T* ptr) { // Destroying an array is not supported. diff --git a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/internal_allocator_forward.h b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/internal_allocator_forward.h index d2aadfa5ac..759668c1fa 100644 --- a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/internal_allocator_forward.h +++ b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/internal_allocator_forward.h @@ -67,14 +67,13 @@ template T* ConstructAtInternalPartition(Args&&... args); // Destroy an object on heap in the internal partition. -// TODO(crbug.com/40274826) This is an unused function. Start using it in tests -// and/or in production code. template void DestroyAtInternalPartition(T* ptr); // A deleter for `std::unique_ptr`. -struct PA_COMPONENT_EXPORT(PARTITION_ALLOC) InternalPartitionDeleter final { - void operator()(void* ptr) const; +template +struct InternalPartitionDeleter final { + void operator()(T* ptr) const { DestroyAtInternalPartition(ptr); } }; } // namespace partition_alloc::internal diff --git a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/lightweight_quarantine.cc b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/lightweight_quarantine.cc index 12be208e13..ef1a063623 100644 --- a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/lightweight_quarantine.cc +++ b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/lightweight_quarantine.cc @@ -19,7 +19,10 @@ class PA_SCOPED_LOCKABLE public: PA_ALWAYS_INLINE explicit CompileTimeConditionalScopedGuard(Lock& lock) PA_EXCLUSIVE_LOCK_FUNCTION(lock) {} - PA_ALWAYS_INLINE ~CompileTimeConditionalScopedGuard() PA_UNLOCK_FUNCTION() {} + // For some reason, defaulting this causes a thread safety annotation failure. + PA_ALWAYS_INLINE + ~CompileTimeConditionalScopedGuard() // NOLINT(modernize-use-equals-default) + PA_UNLOCK_FUNCTION() {} }; template <> @@ -71,7 +74,12 @@ LightweightQuarantineBranch::LightweightQuarantineBranch( const LightweightQuarantineBranchConfig& config) : root_(root), lock_required_(config.lock_required), - branch_capacity_in_bytes_(config.branch_capacity_in_bytes) {} + branch_capacity_in_bytes_(config.branch_capacity_in_bytes) { + if (lock_required_) { + to_be_freed_working_memory_ = + ConstructAtInternalPartition(); + } +} LightweightQuarantineBranch::LightweightQuarantineBranch( LightweightQuarantineBranch&& b) @@ -82,10 +90,19 @@ LightweightQuarantineBranch::LightweightQuarantineBranch( branch_capacity_in_bytes_( b.branch_capacity_in_bytes_.load(std::memory_order_relaxed)) { b.branch_size_in_bytes_ = 0; + if (lock_required_) { + to_be_freed_working_memory_.store(b.to_be_freed_working_memory_.exchange( + nullptr, std::memory_order_relaxed), + std::memory_order_relaxed); + } } LightweightQuarantineBranch::~LightweightQuarantineBranch() { Purge(); + if (lock_required_) { + DestroyAtInternalPartition(to_be_freed_working_memory_.exchange( + nullptr, std::memory_order_relaxed)); + } } bool LightweightQuarantineBranch::IsQuarantinedForTesting(void* object) { @@ -151,16 +168,26 @@ bool LightweightQuarantineBranch::QuarantineInternal( const size_t random_index = random_.RandUint32() % slots_.size(); std::swap(slots_[random_index], slots_.back()); } else { - ToBeFreedArray to_be_freed; + std::unique_ptr> + to_be_freed; size_t num_of_slots = 0; { CompileTimeConditionalScopedGuard guard(lock_); + // Borrow the reserved working memory from to_be_freed_working_memory_, + // and set nullptr to it indicating that it's in use. + to_be_freed.reset(to_be_freed_working_memory_.exchange(nullptr)); + if (!to_be_freed) { + // When the reserved working memory has already been in use by another + // thread, fall back to allocate another chunk of working memory. + to_be_freed.reset(ConstructAtInternalPartition()); + } + // Dequarantine some entries as required. Save the objects to be // deallocated into `to_be_freed`. PurgeInternalWithDefferedFree(capacity_in_bytes - usable_size, - to_be_freed, num_of_slots); + *to_be_freed, num_of_slots); // Put the entry onto the list. branch_size_in_bytes_ += usable_size; @@ -173,7 +200,17 @@ bool LightweightQuarantineBranch::QuarantineInternal( } // Actually deallocate the dequarantined objects. - BatchFree(to_be_freed, num_of_slots); + BatchFree(*to_be_freed, num_of_slots); + + // Return the possibly-borrowed working memory to + // to_be_freed_working_memory_. It doesn't matter much if it's really + // borrowed or locally-allocated. The important facts are 1) to_be_freed is + // non-null, and 2) to_be_freed_working_memory_ may likely be null (because + // this or another thread has already borrowed it). It's simply good to make + // to_be_freed_working_memory_ non-null whenever possible. Maybe yet another + // thread would be about to borrow the working memory. + to_be_freed.reset( + to_be_freed_working_memory_.exchange(to_be_freed.release())); } // Update stats (not locked). diff --git a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/lightweight_quarantine.h b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/lightweight_quarantine.h index 315b7e6c49..183fdf769b 100644 --- a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/lightweight_quarantine.h +++ b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/lightweight_quarantine.h @@ -217,6 +217,17 @@ class PA_COMPONENT_EXPORT(PARTITION_ALLOC) LightweightQuarantineBranch { // Using `std::atomic` here so that other threads can update this value. std::atomic_size_t branch_capacity_in_bytes_; + // This working memory is temporarily needed only while dequarantining + // objects in slots_ when lock_required_ is true. However, allocating this + // working memory on stack may cause stack overflow [1]. Plus, it's non- + // negligible perf penalty to allocate and deallocate this working memory on + // heap only while dequarantining. So, we reserve one chunk of working memory + // on heap during the entire lifetime of this branch object and try to reuse + // this working memory among threads. Only when thread contention occurs, we + // allocate and deallocate another chunk of working memory. + // [1] https://issues.chromium.org/issues/387508217 + std::atomic to_be_freed_working_memory_ = nullptr; + friend class LightweightQuarantineRoot; }; diff --git a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/page_allocator_constants.h b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/page_allocator_constants.h index a7c7a475f4..4f38bdd015 100644 --- a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/page_allocator_constants.h +++ b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/page_allocator_constants.h @@ -70,9 +70,30 @@ extern PageCharacteristics page_characteristics; // Ability to name anonymous VMAs is available on some, but not all Linux-based // systems. -#if PA_BUILDFLAG(IS_ANDROID) || PA_BUILDFLAG(IS_LINUX) +#if PA_BUILDFLAG(IS_ANDROID) || PA_BUILDFLAG(IS_LINUX) || \ + PA_BUILDFLAG(IS_CHROMEOS) #include +#if (PA_BUILDFLAG(IS_LINUX) || PA_BUILDFLAG(IS_CHROMEOS)) && \ + !(defined(PR_SET_VMA) && defined(PR_SET_VMA_ANON_NAME)) + +// The PR_SET_VMA* symbols are originally from +// https://android.googlesource.com/platform/bionic/+/lollipop-release/libc/private/bionic_prctl.h +// and were subsequently added to mainline Linux in Jan 2022, see +// https://github.com/torvalds/linux/commit/9a10064f5625d5572c3626c1516e0bebc6c9fe9b. +// +// Define them to support compiling with older headers. +#if !defined(PR_SET_VMA) +#define PR_SET_VMA 0x53564d41 +#endif + +#if !defined(PR_SET_VMA_ANON_NAME) +#define PR_SET_VMA_ANON_NAME 0 +#endif + +#endif // (PA_BUILDFLAG(IS_LINUX) || PA_BUILDFLAG(IS_CHROMEOS)) && + // !(defined(PR_SET_VMA) && defined(PR_SET_VMA_ANON_NAME)) + #if defined(PR_SET_VMA) && defined(PR_SET_VMA_ANON_NAME) #define LINUX_NAME_REGION 1 #endif diff --git a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/page_allocator_internals_posix.cc b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/page_allocator_internals_posix.cc index 8511f7265c..05d1a44d60 100644 --- a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/page_allocator_internals_posix.cc +++ b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/page_allocator_internals_posix.cc @@ -150,7 +150,7 @@ void NameRegion(void* start, size_t length, PageTag page_tag) { PA_NOTREACHED(); } - // No error checking on purpose, testing only. + // No error checking on purpose, used for debugging only. prctl(PR_SET_VMA, PR_SET_VMA_ANON_NAME, start, length, name); } diff --git a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_base/check.h b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_base/check.h index 409a280bc9..5f93b1ef93 100644 --- a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_base/check.h +++ b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_base/check.h @@ -20,11 +20,12 @@ // This header defines the CHECK, DCHECK, and DPCHECK macros. // // CHECK dies with a fatal error if its condition is not true. It is not -// controlled by NDEBUG, so the check will be executed regardless of compilation -// mode. +// controlled by PA_BUILDFLAG(IS_DEBUG), so the check will be executed +// regardless of compilation mode. // -// DCHECK, the "debug mode" check, is enabled depending on NDEBUG and -// DCHECK_ALWAYS_ON, and its severity depends on DCHECK_IS_CONFIGURABLE. +// DCHECK, the "debug mode" check, is enabled depending on +// PA_BUILDFLAG(IS_DEBUG) and PA_BUILDFLAG(DCHECK_ALWAYS_ON), and its severity +// depends on PA_BUILDFLAG(DCHECK_IS_CONFIGURABLE). // // (D)PCHECK is like (D)CHECK, but includes the system error code (c.f. // perror(3)). @@ -141,9 +142,9 @@ class PA_COMPONENT_EXPORT(PARTITION_ALLOC_BASE) NotImplemented } // namespace check_error -#if defined(OFFICIAL_BUILD) && !defined(NDEBUG) +#if defined(OFFICIAL_BUILD) && PA_BUILDFLAG(IS_DEBUG) #error "Debug builds are not expected to be optimized as official builds." -#endif // defined(OFFICIAL_BUILD) && !defined(NDEBUG) +#endif // defined(OFFICIAL_BUILD) && BUILDFLAG(IS_DEBUG) #if defined(OFFICIAL_BUILD) && !PA_BUILDFLAG(DCHECKS_ARE_ON) diff --git a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_base/compiler_specific.h b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_base/compiler_specific.h index 1e0328c7ee..b3275b135c 100644 --- a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_base/compiler_specific.h +++ b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_base/compiler_specific.h @@ -6,6 +6,7 @@ #define PARTITION_ALLOC_PARTITION_ALLOC_BASE_COMPILER_SPECIFIC_H_ #include "partition_alloc/build_config.h" +#include "partition_alloc/buildflags.h" // A wrapper around `__has_cpp_attribute()`, which is in C++20 and thus not yet // available for all targets PA supports (since PA's minimum C++ version is 17). @@ -87,7 +88,7 @@ // // Since `ALWAYS_INLINE` is performance-oriented but can hamper debugging, // ignore it in debug mode. -#if defined(NDEBUG) +#if !PA_BUILDFLAG(IS_DEBUG) #if PA_HAS_CPP_ATTRIBUTE(clang::always_inline) #define PA_ALWAYS_INLINE [[clang::always_inline]] inline #elif PA_HAS_CPP_ATTRIBUTE(gnu::always_inline) @@ -95,7 +96,7 @@ #elif defined(PA_COMPILER_MSVC) #define PA_ALWAYS_INLINE __forceinline #endif -#endif +#endif // !PA_BUILDFLAG(IS_DEBUG) #if !defined(PA_ALWAYS_INLINE) #define PA_ALWAYS_INLINE inline #endif diff --git a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_base/numerics/safe_conversions_impl.h b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_base/numerics/safe_conversions_impl.h index 6b8fc54b6e..4c5ab0f0bd 100644 --- a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_base/numerics/safe_conversions_impl.h +++ b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_base/numerics/safe_conversions_impl.h @@ -9,6 +9,8 @@ #include #include +#include "partition_alloc/buildflags.h" + namespace partition_alloc::internal::base::internal { // The std library doesn't provide a binary max_exponent for integers, however @@ -83,10 +85,10 @@ constexpr typename std::make_unsigned::type SafeUnsignedAbs(T value) { // TODO(jschuh): Debug builds don't reliably propagate constants, so we restrict // some accelerated runtime paths to release builds until this can be forced // with consteval support in C++20 or C++23. -#if defined(NDEBUG) -constexpr bool kEnableAsmCode = true; +#if PA_BUILDFLAG(IS_DEBUG) +inline constexpr bool kEnableAsmCode = false; #else -constexpr bool kEnableAsmCode = false; +inline constexpr bool kEnableAsmCode = true; #endif // Forces a crash, like a NOTREACHED(). Used for numeric boundary errors. diff --git a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_base/posix/eintr_wrapper.h b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_base/posix/eintr_wrapper.h index 8996fa55da..35d4f45a91 100644 --- a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_base/posix/eintr_wrapper.h +++ b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_base/posix/eintr_wrapper.h @@ -18,6 +18,7 @@ #define PARTITION_ALLOC_PARTITION_ALLOC_BASE_POSIX_EINTR_WRAPPER_H_ #include "partition_alloc/build_config.h" +#include "partition_alloc/buildflags.h" #if PA_BUILDFLAG(IS_POSIX) #include @@ -31,7 +32,7 @@ template inline auto WrapEINTR(Fn fn) { return [fn](auto&&... args) { int out = -1; -#if defined(NDEBUG) +#if !PA_BUILDFLAG(IS_DEBUG) while (true) #else for (int retry_count = 0; retry_count < 100; ++retry_count) diff --git a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_base/strings/safe_sprintf.cc b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_base/strings/safe_sprintf.cc index 16bf541672..6d128eea85 100644 --- a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_base/strings/safe_sprintf.cc +++ b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_base/strings/safe_sprintf.cc @@ -10,8 +10,9 @@ #include #include "partition_alloc/build_config.h" +#include "partition_alloc/buildflags.h" -#if !defined(NDEBUG) +#if PA_BUILDFLAG(IS_DEBUG) // In debug builds, we use RAW_CHECK() to print useful error messages, if // SafeSPrintf() is called with broken arguments. // As our contract promises that SafeSPrintf() can be called from any @@ -41,7 +42,7 @@ if (x) { \ } \ } while (0) -#endif +#endif // PA_BUILDFLAG(IS_DEBUG) namespace partition_alloc::internal::base::strings { @@ -74,7 +75,7 @@ const char kUpCaseHexDigits[] = "0123456789ABCDEF"; const char kDownCaseHexDigits[] = "0123456789abcdef"; } // namespace -#if defined(NDEBUG) +#if !PA_BUILDFLAG(IS_DEBUG) // We would like to define kSSizeMax as std::numeric_limits::max(), // but C++ doesn't allow us to do that for constants. Instead, we have to // use careful casting and shifting. We later use a static_assert to @@ -82,7 +83,7 @@ const char kDownCaseHexDigits[] = "0123456789abcdef"; namespace { const size_t kSSizeMax = kSSizeMaxConst; } -#else // defined(NDEBUG) +#else // !PA_BUILDFLAG(IS_DEBUG) // For efficiency, we really need kSSizeMax to be a constant. But for unit // tests, it should be adjustable. This allows us to verify edge cases without // having to fill the entire available address space. As a compromise, we make @@ -101,7 +102,7 @@ size_t GetSafeSPrintfSSizeMaxForTest() { return kSSizeMax; } } // namespace internal -#endif // defined(NDEBUG) +#endif // !PA_BUILDFLAG(IS_DEBUG) namespace { class Buffer { @@ -111,10 +112,7 @@ class Buffer { // to ensure that the buffer is at least one byte in size, so that it fits // the trailing NUL that will be added by the destructor. The buffer also // must be smaller or equal to kSSizeMax in size. - Buffer(char* buffer, size_t size) - : buffer_(buffer), - size_(size - 1), // Account for trailing NUL byte - count_(0) { + Buffer(char* buffer, size_t size) : buffer_(buffer), size_(size - 1) { // MSVS2013's standard library doesn't mark max() as constexpr yet. cl.exe // supports static_cast but doesn't really implement constexpr yet so it doesn't // complain, but clang does. @@ -276,7 +274,7 @@ class Buffer { // Number of bytes that would have been emitted to the buffer, if the buffer // was sufficiently big. This number always excludes the trailing NUL byte // and it is guaranteed to never grow bigger than kSSizeMax-1. - size_t count_; + size_t count_ = 0; }; bool Buffer::IToASCII(bool sign, diff --git a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_check.h b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_check.h index 42f66a2a29..8156baca1b 100644 --- a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_check.h +++ b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_check.h @@ -61,11 +61,11 @@ // Expensive dchecks that run within *Scan. These checks are only enabled in // debug builds with dchecks enabled. -#if !defined(NDEBUG) +#if PA_BUILDFLAG(IS_DEBUG) #define PA_SCAN_DCHECK_IS_ON() PA_BUILDFLAG(DCHECKS_ARE_ON) #else #define PA_SCAN_DCHECK_IS_ON() 0 -#endif +#endif // PA_BUILDFLAG(IS_DEBUG) #if PA_SCAN_DCHECK_IS_ON() #define PA_SCAN_DCHECK(expr) PA_DCHECK(expr) diff --git a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_constants.h b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_constants.h index 31f03bdd2f..11b94f85c0 100644 --- a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_constants.h +++ b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_constants.h @@ -63,9 +63,7 @@ enum class FreeFlags { kNoHooks = 1 << 1, // Internal. // Quarantine for a while to ensure no UaF from on-stack pointers. kSchedulerLoopQuarantine = 1 << 2, - // Zap the object region on `Free()`. - kZap = 1 << 3, - kMaxValue = kZap, + kMaxValue = kSchedulerLoopQuarantine, }; PA_DEFINE_OPERATORS_FOR_FLAGS(FreeFlags); } // namespace internal diff --git a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_bucket.cc b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_bucket.cc index 01ce68d509..db2c5da308 100644 --- a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_bucket.cc +++ b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_bucket.cc @@ -684,7 +684,7 @@ PartitionBucket::AllocNewSlotSpan(PartitionRoot* root, for (auto* page = gap_start_page->ToWritable(root); page < gap_end_page->ToWritable(root); ++page) { PA_DCHECK(!page->is_valid); - page->has_valid_span_after_this = 1; + page->has_valid_span_after_this = true; } root->next_partition_page = adjusted_next_partition_page + slot_span_reservation_size; @@ -708,7 +708,7 @@ PartitionBucket::AllocNewSlotSpan(PartitionRoot* root, PA_DEBUG_DATA_ON_STACK("spancmt", slot_span_committed_size); root->RecommitSystemPagesForData( - slot_span_start, slot_span_committed_size, + slot_span_start, SlotSpanCommittedSize(root), PageAccessibilityDisposition::kRequireUpdate, slot_size <= kMaxMemoryTaggingSize); } @@ -1590,4 +1590,63 @@ void PartitionBucket::InitializeSlotSpanForGwpAsan( InitializeSlotSpan(slot_span, root); } +size_t PartitionBucket::SlotSpanCommittedSize(PartitionRoot* root) const { + // With lazy commit, we certainly don't want to commit more than + // necessary. This is not reached, but keep the CHECK() as documentation. + PA_CHECK(!kUseLazyCommit); + + // Memory is reserved in units of PartitionPage, but a given slot span may be + // smaller than the reserved area. For instance (assuming 4k pages), for a + // bucket where the slot span size is 40kiB, we reserve 4 PartitionPage = 16 * + // 4 = 48kiB, but only ever commit 40kiB out of it. + // + // This means that the address space then looks like, assuming that the + // PartitionPage next to it is committed: + // [SlotSpan range, 40kiB] rw-p + // [Unused area in the last PartitionPage, 8kiB] ---p + // [Next PartitionPages, size unknown ] rw-p + // + // So we have a "hole" of inaccessible memory, and 3 memory regions. If + // instead we commit the full PartitionPages, we get (due to the kernel + // merging neighboring regions with uniform permissions): + // + // [SlotSpan range, 40kiB + Unused area, 8kiB + next PartitionPages] rw-p + // + // So 1 memory region rather then 3. This matters, because on Linux kernels, + // there is a maximum number of VMAs per process, with the default limit a bit + // less than 2^16, and Chromium sometimes hits the limit (see + // /proc/sys/vm/max_map_count for the current limit), largely because of + // PartitionAlloc contributing thousands of regions. Locally, on a Linux + // system, this reduces the number of PartitionAlloc regions by up to ~4x. + // + // Why is it safe? + // The extra memory is not used by anything, so committing it doesn't make a + // difference. It makes it accessible though. + // + // How much does it cost? + // Almost nothing. On Linux, "committing" memory merely changes its + // permissions, it doesn't cost any memory until the pages are touched, which + // they are not. However, mprotect()-ed areas that are writable count towards + // the RLIMIT_DATA resource limit, which is used by the sandbox. So, while + // this change costs 0 physical memory (and actually saves some, by reducing + // the size of the VMA red-black tree in the kernel), it might increase + // slightly the cases where we bump into the sandbox memory limit. + // + // Is it safe to do while running? + // Since this is decided through root settings, the value changes at runtime, + // so we may decommit memory that was never committed. This is safe onLinux, + // since decommitting is just changing permissions back to PROT_NONE, which + // the tail end would already have. + // + // Can we do better? + // For simplicity, we do not "fix" the regions that were committed before the + // settings are changed (after feature list initialization). This means that + // we end up with more regions that we could. The intent is to run a field + // experiment, then change the default value, at which point we get the full + // impact, so this is only temporary. + return root->settings.fewer_memory_regions + ? (get_pages_per_slot_span() << PartitionPageShift()) + : get_bytes_per_span(); +} + } // namespace partition_alloc::internal diff --git a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_bucket.h b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_bucket.h index 637a6ce979..30f55bc352 100644 --- a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_bucket.h +++ b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_bucket.h @@ -1,7 +1,6 @@ // Copyright 2018 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - #ifndef PARTITION_ALLOC_PARTITION_BUCKET_H_ #define PARTITION_ALLOC_PARTITION_BUCKET_H_ @@ -171,6 +170,8 @@ struct PartitionBucket { SlotSpanMetadata* slot_span, PartitionRoot* root); + size_t SlotSpanCommittedSize(PartitionRoot* root) const; + private: // Sets `this->can_store_raw_size`. void InitCanStoreRawSize(bool use_small_single_slot_spans); diff --git a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_page.cc b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_page.cc index 799eeedbe0..9186149909 100644 --- a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_page.cc +++ b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_page.cc @@ -248,7 +248,7 @@ void SlotSpanMetadata::Decommit(PartitionRoot* root) { size_t dirty_size = base::bits::AlignUp(GetProvisionedSize(), SystemPageSize()); size_t size_to_decommit = - kUseLazyCommit ? dirty_size : bucket->get_bytes_per_span(); + kUseLazyCommit ? dirty_size : bucket->SlotSpanCommittedSize(root); PA_DCHECK(root->empty_slot_spans_dirty_bytes >= dirty_size); root->empty_slot_spans_dirty_bytes -= dirty_size; diff --git a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_root.cc b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_root.cc index 299152857e..6955c82cd4 100644 --- a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_root.cc +++ b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_root.cc @@ -1174,6 +1174,8 @@ void PartitionRoot::Init(PartitionOptions opts) { opts.zapping_by_free_flags == PartitionOptions::kEnabled; settings.eventually_zero_freed_memory = opts.eventually_zero_freed_memory == PartitionOptions::kEnabled; + settings.fewer_memory_regions = + opts.fewer_memory_regions == PartitionOptions::kEnabled; settings.scheduler_loop_quarantine = opts.scheduler_loop_quarantine == PartitionOptions::kEnabled; diff --git a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_root.h b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_root.h index 7667c4506a..29cc6b9f06 100644 --- a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_root.h +++ b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/partition_root.h @@ -182,6 +182,7 @@ struct PartitionOptions { // compression ratio of freed memory inside partially allocated pages (due to // fragmentation). EnableToggle eventually_zero_freed_memory = kDisabled; + EnableToggle fewer_memory_regions = kDisabled; struct { EnableToggle enabled = kDisabled; @@ -261,9 +262,14 @@ struct alignas(64) PA_COMPONENT_EXPORT(PARTITION_ALLOC) PartitionRoot { size_t in_slot_metadata_size = 0; #endif // PA_BUILDFLAG(ENABLE_BACKUP_REF_PTR_SUPPORT) bool use_configurable_pool = false; + // Despite its name, `FreeFlags` for zapping is deleted and does not exist. + // This value is used for SchedulerLoopQuarantine. + // TODO(https://crbug.com/351974425): group this setting and quarantine + // setting in one place. bool zapping_by_free_flags = false; bool eventually_zero_freed_memory = false; bool scheduler_loop_quarantine = false; + bool fewer_memory_regions = false; #if PA_BUILDFLAG(HAS_MEMORY_TAGGING) bool memory_tagging_enabled_ = false; bool use_random_memory_tagging_ = false; @@ -1516,16 +1522,11 @@ PA_ALWAYS_INLINE void PartitionRoot::FreeInline(void* object) { // cacheline ping-pong. PA_PREFETCH(slot_span); - // Further down, we may zap the memory, no point in doing it twice. We may - // zap twice if kZap is enabled without kSchedulerLoopQuarantine. Make sure it - // does not happen. This is not a hard requirement: if this is deemed cheap - // enough, it can be relaxed, the static_assert() is here to make it a - // conscious decision. - static_assert(!ContainsFlags(flags, FreeFlags::kZap) || - ContainsFlags(flags, FreeFlags::kSchedulerLoopQuarantine), - "kZap and kSchedulerLoopQuarantine should be used together to " - "avoid double zapping"); - if constexpr (ContainsFlags(flags, FreeFlags::kZap)) { + // TODO(crbug.com/40287058): Collecting objects for + // `kSchedulerLoopQuarantineBranch` here means it "delays" other checks (BRP + // refcount, cookie, etc.) + // For better debuggability, we should do these checks before quarantining. + if constexpr (ContainsFlags(flags, FreeFlags::kSchedulerLoopQuarantine)) { // No need to zap direct mapped allocations, as they are unmapped right // away. This also ensures that we don't needlessly memset() very large // allocations. @@ -1534,12 +1535,7 @@ PA_ALWAYS_INLINE void PartitionRoot::FreeInline(void* object) { internal::SecureMemset(object, internal::kFreedByte, GetSlotUsableSize(slot_span)); } - } - // TODO(crbug.com/40287058): Collecting objects for - // `kSchedulerLoopQuarantineBranch` here means it "delays" other checks (BRP - // refcount, cookie, etc.) - // For better debuggability, we should do these checks before quarantining. - if constexpr (ContainsFlags(flags, FreeFlags::kSchedulerLoopQuarantine)) { + if (settings.scheduler_loop_quarantine) { #if PA_BUILDFLAG(ENABLE_BACKUP_REF_PTR_SUPPORT) // TODO(keishi): Add `[[likely]]` when brp is fully enabled as diff --git a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/pointers/raw_ptr.h b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/pointers/raw_ptr.h index 7de8be97cb..c3ac115234 100644 --- a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/pointers/raw_ptr.h +++ b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/pointers/raw_ptr.h @@ -1255,6 +1255,36 @@ struct pointer_traits<::raw_ptr> { } }; +// Mark `raw_ptr` and `T*` as having a common reference type (the type to +// which both can be converted or bound) of `T*`. This makes them satisfy +// `std::equality_comparable`, which allows usage like: +// ``` +// std::vector> v; +// T* e; +// auto it = std::ranges::find(v, e); +// ``` +// Without this, the `find()` call above would fail to compile with a cryptic +// error about being unable to invoke `std::ranges::equal_to()`. +template + typename TQ, + template + typename UQ> +struct std::basic_common_reference, T*, TQ, UQ> { + using type = T*; +}; + +template + typename TQ, + template + typename UQ> +struct std::basic_common_reference, TQ, UQ> { + using type = T*; +}; + } // namespace std #endif // PARTITION_ALLOC_POINTERS_RAW_PTR_H_ diff --git a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/random.cc b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/random.cc index 6e7a97df56..9ace4f070d 100644 --- a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/random.cc +++ b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/random.cc @@ -27,7 +27,7 @@ class RandomGenerator { } private: - ::partition_alloc::internal::Lock lock_ = {}; + ::partition_alloc::internal::Lock lock_; bool initialized_ PA_GUARDED_BY(lock_) = false; union { internal::base::InsecureRandomGenerator instance_ PA_GUARDED_BY(lock_); diff --git a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/reservation_offset_table.h b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/reservation_offset_table.h index e5fba000d6..463912b8aa 100644 --- a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/reservation_offset_table.h +++ b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/reservation_offset_table.h @@ -8,7 +8,6 @@ #include #include #include -#include #include "partition_alloc/address_pool_manager.h" #include "partition_alloc/build_config.h" diff --git a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim.h b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim.h index 02d7b0af18..c65be20671 100644 --- a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim.h +++ b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim.h @@ -150,6 +150,9 @@ using ZappingByFreeFlags = bool>; using EventuallyZeroFreedMemory = partition_alloc::internal::base:: StrongAlias; +using FewerMemoryRegions = + partition_alloc::internal::base::StrongAlias; using UsePoolOffsetFreelists = partition_alloc::internal::base:: StrongAlias; @@ -170,6 +173,7 @@ void ConfigurePartitions( size_t scheduler_loop_quarantine_branch_capacity_in_bytes, ZappingByFreeFlags zapping_by_free_flags, EventuallyZeroFreedMemory eventually_zero_freed_memory, + FewerMemoryRegions fewer_memory_regions, UsePoolOffsetFreelists use_pool_offset_freelists, UseSmallSingleSlotSpans use_small_single_slot_spans); diff --git a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc.cc b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc.cc index 17c8581c4d..0825c9b93e 100644 --- a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc.cc +++ b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc.cc @@ -26,6 +26,7 @@ #include "partition_alloc/partition_root.h" #include "partition_alloc/partition_stats.h" #include "partition_alloc/shim/allocator_dispatch.h" +#include "partition_alloc/shim/allocator_shim.h" #include "partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc_internal.h" #include "partition_alloc/shim/allocator_shim_internals.h" @@ -570,7 +571,6 @@ template class PA_COMPONENT_EXPORT(ALLOCATOR_SHIM) PartitionAllocFunctionsInternal< partition_alloc::AllocFlags::kNoHooks, partition_alloc::FreeFlags::kNoHooks | - partition_alloc::FreeFlags::kZap | partition_alloc::FreeFlags::kSchedulerLoopQuarantine>; // static @@ -619,6 +619,7 @@ void ConfigurePartitions( size_t scheduler_loop_quarantine_branch_capacity_in_bytes, ZappingByFreeFlags zapping_by_free_flags, EventuallyZeroFreedMemory eventually_zero_freed_memory, + FewerMemoryRegions fewer_memory_regions, UsePoolOffsetFreelists use_pool_offset_freelists, UseSmallSingleSlotSpans use_small_single_slot_spans) { // Calling Get() is actually important, even if the return value isn't @@ -643,6 +644,7 @@ void ConfigurePartitions( opts.backup_ref_ptr = enable_brp ? partition_alloc::PartitionOptions::kEnabled : partition_alloc::PartitionOptions::kDisabled; + opts.backup_ref_ptr_extra_extras_size = brp_extra_extras_size; opts.zapping_by_free_flags = zapping_by_free_flags ? partition_alloc::PartitionOptions::kEnabled @@ -651,6 +653,9 @@ void ConfigurePartitions( eventually_zero_freed_memory ? partition_alloc::PartitionOptions::kEnabled : partition_alloc::PartitionOptions::kDisabled; + opts.fewer_memory_regions = + fewer_memory_regions ? partition_alloc::PartitionOptions::kEnabled + : partition_alloc::PartitionOptions::kDisabled; opts.scheduler_loop_quarantine = scheduler_loop_quarantine ? partition_alloc::PartitionOptions::kEnabled diff --git a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc.h b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc.h index 75e2ad8451..b5e436622d 100644 --- a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc.h +++ b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc.h @@ -135,7 +135,6 @@ using PartitionAllocWithAdvancedChecksFunctions = PartitionAllocFunctionsInternal< partition_alloc::AllocFlags::kNoHooks, partition_alloc::FreeFlags::kNoHooks | - partition_alloc::FreeFlags::kZap | partition_alloc::FreeFlags::kSchedulerLoopQuarantine>; // `PartitionAllocFunctions` in instantiated in cc file. @@ -147,7 +146,6 @@ extern template class PA_COMPONENT_EXPORT(ALLOCATOR_SHIM) PartitionAllocFunctionsInternal< partition_alloc::AllocFlags::kNoHooks, partition_alloc::FreeFlags::kNoHooks | - partition_alloc::FreeFlags::kZap | partition_alloc::FreeFlags::kSchedulerLoopQuarantine>; } // namespace internal @@ -182,15 +180,16 @@ PA_ALWAYS_INLINE void ConfigurePartitionsForTesting() { size_t scheduler_loop_quarantine_capacity_in_bytes = 0; auto zapping_by_free_flags = ZappingByFreeFlags(false); auto eventually_zero_freed_memory = EventuallyZeroFreedMemory(false); + auto fewer_memory_regions = FewerMemoryRegions(false); auto use_pool_offset_freelists = UsePoolOffsetFreelists(true); auto use_small_single_slot_spans = UseSmallSingleSlotSpans(true); - ConfigurePartitions(enable_brp, brp_extra_extras_size, enable_memory_tagging, - memory_tagging_reporting_mode, distribution, - scheduler_loop_quarantine, - scheduler_loop_quarantine_capacity_in_bytes, - zapping_by_free_flags, eventually_zero_freed_memory, - use_pool_offset_freelists, use_small_single_slot_spans); + ConfigurePartitions( + enable_brp, brp_extra_extras_size, enable_memory_tagging, + memory_tagging_reporting_mode, distribution, scheduler_loop_quarantine, + scheduler_loop_quarantine_capacity_in_bytes, zapping_by_free_flags, + eventually_zero_freed_memory, fewer_memory_regions, + use_pool_offset_freelists, use_small_single_slot_spans); } #endif // PA_BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) diff --git a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_override_ucrt_symbols_win.h b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_override_ucrt_symbols_win.h index b9efc1bb9d..f8a0f82d91 100644 --- a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_override_ucrt_symbols_win.h +++ b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_override_ucrt_symbols_win.h @@ -276,7 +276,7 @@ errno_t _wdupenv_s(wchar_t** buffer, } #endif -#if !defined(NDEBUG) +#if PA_BUILDFLAG(IS_DEBUG) typedef void (*_CRT_DUMP_CLIENT)(void*, size_t); int _crtDbgFlag = 0; @@ -451,7 +451,7 @@ errno_t _wdupenv_s_dbg(wchar_t** buffer, } #endif // defined(COMPONENT_BUILD) -#endif // !defined(NDEBUG) +#endif // PA_BUILDFLAG(IS_DEBUG) } // extern "C" #endif // PA_BUILDFLAG(USE_ALLOCATOR_SHIM) diff --git a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/spinning_mutex.cc b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/spinning_mutex.cc index 6740cd491b..df5511990e 100644 --- a/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/spinning_mutex.cc +++ b/naiveproxy/src/base/allocator/partition_allocator/src/partition_alloc/spinning_mutex.cc @@ -143,7 +143,12 @@ void SpinningMutex::LockSlow() { #elif PA_BUILDFLAG(IS_APPLE) // TODO(verwaest): We should use the constants from the header, but they aren't -// exposed until macOS 15. +// exposed until macOS 15. See their definition here: +// https://github.com/apple-oss-distributions/libplatform/blob/4f6349dfea579c35b8fa838d785644e441d14e0e/private/os/lock_private.h#L265 +// +// The first flag prevents the runtime from creating more threads in response to +// contention. The second will spin in the kernel if the lock owner is currently +// running. #define OS_UNFAIR_LOCK_DATA_SYNCHRONIZATION 0x00010000 #define OS_UNFAIR_LOCK_ADAPTIVE_SPIN 0x00040000 diff --git a/naiveproxy/src/base/android/base_feature_map.cc b/naiveproxy/src/base/android/base_feature_map.cc index fd261ac55f..bfda99ee4a 100644 --- a/naiveproxy/src/base/android/base_feature_map.cc +++ b/naiveproxy/src/base/android/base_feature_map.cc @@ -22,8 +22,8 @@ const base::Feature* const kFeaturesExposedToJava[] = { // static base::android::FeatureMap* GetFeatureMap() { - static base::NoDestructor kFeatureMap(std::vector( - std::begin(kFeaturesExposedToJava), std::end(kFeaturesExposedToJava))); + static base::NoDestructor kFeatureMap( + kFeaturesExposedToJava); return kFeatureMap.get(); } diff --git a/naiveproxy/src/base/android/command_line_android.cc b/naiveproxy/src/base/android/command_line_android.cc index ba8442d8b4..3da0644e4f 100644 --- a/naiveproxy/src/base/android/command_line_android.cc +++ b/naiveproxy/src/base/android/command_line_android.cc @@ -41,21 +41,8 @@ static std::string JNI_CommandLine_GetSwitchValue(JNIEnv* env, return CommandLine::ForCurrentProcess()->GetSwitchValueNative(switch_string); } -static std::vector JNI_CommandLine_GetSwitchesFlattened( - JNIEnv* env) { - // JNI doesn't support returning Maps. Instead, express this map as a 1 - // dimensional array: [ key1, value1, key2, value2, ... ] - std::vector keys_and_values; - for (const auto& entry : CommandLine::ForCurrentProcess()->GetSwitches()) { - keys_and_values.push_back(entry.first); - keys_and_values.push_back(entry.second); - } - return keys_and_values; -} - -static void JNI_CommandLine_AppendSwitch(JNIEnv* env, - std::string& switch_string) { - CommandLine::ForCurrentProcess()->AppendSwitch(switch_string); +static CommandLine::SwitchMap JNI_CommandLine_GetSwitches(JNIEnv* env) { + return CommandLine::ForCurrentProcess()->GetSwitches(); } static void JNI_CommandLine_AppendSwitchWithValue(JNIEnv* env, diff --git a/naiveproxy/src/base/android/feature_map.cc b/naiveproxy/src/base/android/feature_map.cc index 817fdcdd03..6fa02fd100 100644 --- a/naiveproxy/src/base/android/feature_map.cc +++ b/naiveproxy/src/base/android/feature_map.cc @@ -24,7 +24,8 @@ std::pair MakeNameToFeaturePair( return std::make_pair(feature->name, feature); } -FeatureMap::FeatureMap(std::vector features_exposed_to_java) { +FeatureMap::FeatureMap( + base::span features_exposed_to_java) { mapping_ = MakeFlatMap>( features_exposed_to_java, {}, &MakeNameToFeaturePair); diff --git a/naiveproxy/src/base/android/feature_map.h b/naiveproxy/src/base/android/feature_map.h index c222002efe..684def55ae 100644 --- a/naiveproxy/src/base/android/feature_map.h +++ b/naiveproxy/src/base/android/feature_map.h @@ -9,6 +9,7 @@ #include "base/base_export.h" #include "base/containers/flat_map.h" +#include "base/containers/span.h" #include "base/feature_list.h" #include "base/memory/raw_ptr.h" @@ -22,7 +23,8 @@ namespace base::android { // Each component should have its own FeatureMap. class BASE_EXPORT FeatureMap { public: - explicit FeatureMap(std::vector featuresExposedToJava); + explicit FeatureMap( + base::span features_exposed_to_java); ~FeatureMap(); // Map a |feature_name| to a Feature*. diff --git a/naiveproxy/src/base/android/input_hint_checker.cc b/naiveproxy/src/base/android/input_hint_checker.cc index 7707162b78..207391012b 100644 --- a/naiveproxy/src/base/android/input_hint_checker.cc +++ b/naiveproxy/src/base/android/input_hint_checker.cc @@ -46,6 +46,7 @@ BASE_FEATURE(kYieldWithInputHint, // Min time delta between checks for the input hint. Must be a smaller than // time to produce a frame, but a bit longer than the time it takes to retrieve // the hint. +// Note: Do not use the prepared macro as of no need for a local cache. const base::FeatureParam kPollIntervalMillisParam{&kYieldWithInputHint, "poll_interval_ms", 1}; diff --git a/naiveproxy/src/base/android/jni_callback.cc b/naiveproxy/src/base/android/jni_callback.cc new file mode 100644 index 0000000000..7fe7b0f3d1 --- /dev/null +++ b/naiveproxy/src/base/android/jni_callback.cc @@ -0,0 +1,112 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/android/jni_callback.h" + +// Must come after all headers that specialize FromJniType() / ToJniType(). +#include "base/base_jni/JniCallbackUtils_jni.h" +#include "base/base_jni/JniOnceCallback_jni.h" +#include "base/base_jni/JniRepeatingCallback_jni.h" + +namespace base::android { + +namespace { +class JniOnceCallback { + public: + explicit JniOnceCallback(JniOnceWrappedCallbackType&& on_complete) + : wrapped_callback_(std::make_unique( + std::move(on_complete))) {} + ~JniOnceCallback() = default; + + JniOnceCallback(const JniOnceCallback&) = delete; + const JniOnceCallback& operator=(const JniOnceCallback&) = delete; + + jni_zero::ScopedJavaLocalRef TransferToJava(JNIEnv* env) && { + CHECK(wrapped_callback_); + CHECK(!wrapped_callback_->is_null()); + return Java_JniOnceCallback_Constructor( + env, reinterpret_cast(wrapped_callback_.release())); + } + + private: + std::unique_ptr wrapped_callback_; +}; + +class JniRepeatingCallback { + public: + explicit JniRepeatingCallback( + const JniRepeatingWrappedCallbackType& on_complete) + : wrapped_callback_( + std::make_unique(on_complete)) {} + explicit JniRepeatingCallback(JniRepeatingWrappedCallbackType&& on_complete) + : wrapped_callback_(std::make_unique( + std::move(on_complete))) {} + ~JniRepeatingCallback() = default; + + jni_zero::ScopedJavaLocalRef TransferToJava(JNIEnv* env) && { + CHECK(wrapped_callback_); + CHECK(!wrapped_callback_->is_null()); + return Java_JniRepeatingCallback_Constructor( + env, reinterpret_cast(wrapped_callback_.release())); + } + JniRepeatingCallback(const JniRepeatingCallback&) = delete; + const JniRepeatingCallback& operator=(const JniRepeatingCallback&) = delete; + + private: + std::unique_ptr wrapped_callback_; +}; +} // namespace + +ScopedJavaLocalRef ToJniCallback( + JNIEnv* env, + JniOnceWrappedCallbackType&& callback) { + return JniOnceCallback(std::move(callback)).TransferToJava(env); +} + +ScopedJavaLocalRef ToJniCallback( + JNIEnv* env, + JniRepeatingWrappedCallbackType&& callback) { + return JniRepeatingCallback(std::move(callback)).TransferToJava(env); +} + +ScopedJavaLocalRef ToJniCallback( + JNIEnv* env, + const JniRepeatingWrappedCallbackType& callback) { + return JniRepeatingCallback(callback).TransferToJava(env); +} + +void JNI_JniCallbackUtils_OnResult( + JNIEnv* env, + jlong callbackPtr, + jboolean isRepeating, + const jni_zero::JavaParamRef& j_result) { + if (isRepeating) { + auto* callback = + reinterpret_cast(callbackPtr); + callback->Run(j_result); + } else { + auto* callback = reinterpret_cast(callbackPtr); + std::move(*callback).Run(j_result); + delete callback; + } +} + +void JNI_JniCallbackUtils_Destroy(JNIEnv* env, + jlong callbackPtr, + jboolean isRepeating) { + if (isRepeating) { + auto* callback = + reinterpret_cast(callbackPtr); + // Call Reset to ensure all accidental use-after-frees fail loudly. + callback->Reset(); + delete callback; + } else { + auto* callback = reinterpret_cast(callbackPtr); + // Call Reset to ensure all accidental use-after-frees fail loudly. + callback->Reset(); + delete callback; + } +} + +} // namespace base::android diff --git a/naiveproxy/src/base/android/jni_callback.h b/naiveproxy/src/base/android/jni_callback.h new file mode 100644 index 0000000000..8902081217 --- /dev/null +++ b/naiveproxy/src/base/android/jni_callback.h @@ -0,0 +1,99 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef BASE_ANDROID_JNI_CALLBACK_H_ +#define BASE_ANDROID_JNI_CALLBACK_H_ + +#include + +#include + +#include "base/android/scoped_java_ref.h" +#include "base/base_export.h" +#include "base/functional/callback_forward.h" +#include "base/functional/callback_helpers.h" +#include "third_party/jni_zero/jni_zero.h" + +namespace base::android { + +using JniOnceWrappedCallbackType = + base::OnceCallback&)>; +using JniRepeatingWrappedCallbackType = + base::RepeatingCallback&)>; + +BASE_EXPORT ScopedJavaLocalRef ToJniCallback( + JNIEnv* env, + JniOnceWrappedCallbackType&& callback); +BASE_EXPORT ScopedJavaLocalRef ToJniCallback( + JNIEnv* env, + JniRepeatingWrappedCallbackType&& callback); +BASE_EXPORT ScopedJavaLocalRef ToJniCallback( + JNIEnv* env, + const JniRepeatingWrappedCallbackType& callback); + +// Java Callbacks don't return a value so any return value by the passed in +// callback will be ignored. +template +BASE_EXPORT ScopedJavaLocalRef ToJniCallback( + JNIEnv* env, + base::OnceCallback&& callback) { + return ToJniCallback(env, base::BindOnce( + [](base::OnceCallback captured_callback, + const jni_zero::JavaRef& j_result) { + Arg result = jni_zero::FromJniType( + jni_zero::AttachCurrentThread(), + j_result); + std::move(captured_callback).Run(result); + }, + std::move(callback))); +} + +// Java Callbacks don't return a value so any return value by the passed in +// callback will be ignored. +template +BASE_EXPORT ScopedJavaLocalRef ToJniCallback( + JNIEnv* env, + base::OnceCallback&& callback) { + return ToJniCallback(env, base::BindOnce( + [](base::OnceCallback captured_callback, + const jni_zero::JavaRef& j_result) { + std::move(captured_callback).Run(); + }, + std::move(callback))); +} + +// Java Callbacks don't return a value so any return value by the passed in +// callback will be ignored. +template +BASE_EXPORT ScopedJavaLocalRef ToJniCallback( + JNIEnv* env, + const base::RepeatingCallback& callback) { + return ToJniCallback( + env, base::BindRepeating( + [](const base::RepeatingCallback& captured_callback, + const jni_zero::JavaRef& j_result) { + Arg result = jni_zero::FromJniType( + jni_zero::AttachCurrentThread(), j_result); + captured_callback.Run(result); + }, + callback)); +} + +// Java Callbacks don't return a value so any return value by the passed in +// callback will be ignored. +template +BASE_EXPORT ScopedJavaLocalRef ToJniCallback( + JNIEnv* env, + const base::RepeatingCallback& callback) { + return ToJniCallback( + env, base::BindRepeating( + [](const base::RepeatingCallback& captured_callback, + const jni_zero::JavaRef& j_result) { + captured_callback.Run(); + }, + callback)); +} +} // namespace base::android + +#endif // BASE_ANDROID_JNI_CALLBACK_H_ diff --git a/naiveproxy/src/base/android/jni_string.cc b/naiveproxy/src/base/android/jni_string.cc index 4b1f031be4..06c04b214a 100644 --- a/naiveproxy/src/base/android/jni_string.cc +++ b/naiveproxy/src/base/android/jni_string.cc @@ -82,6 +82,10 @@ std::string ConvertJavaStringToUTF8(JNIEnv* env, const JavaRef& str) { ScopedJavaLocalRef ConvertUTF8ToJavaString(JNIEnv* env, std::string_view str) { + // ART allocates new empty strings, so use a singleton when applicable. + if (str.empty()) { + return jni_zero::g_empty_string.AsLocalRef(env); + } // JNI's NewStringUTF expects "modified" UTF8 so instead create the string // via our own UTF16 conversion utility. // Further, Dalvik requires the string passed into NewStringUTF() to come from @@ -146,6 +150,10 @@ std::u16string ConvertJavaStringToUTF16(JNIEnv* env, ScopedJavaLocalRef ConvertUTF16ToJavaString(JNIEnv* env, std::u16string_view str) { + // ART allocates new empty strings, so use a singleton when applicable. + if (str.empty()) { + return jni_zero::g_empty_string.AsLocalRef(env); + } return ScopedJavaLocalRef(env, ConvertUTF16ToJavaStringImpl(env, str)); } diff --git a/naiveproxy/src/base/android/library_loader/library_loader_hooks.cc b/naiveproxy/src/base/android/library_loader/library_loader_hooks.cc index c2343f3606..606af2d891 100644 --- a/naiveproxy/src/base/android/library_loader/library_loader_hooks.cc +++ b/naiveproxy/src/base/android/library_loader/library_loader_hooks.cc @@ -10,12 +10,12 @@ #include "base/android/library_loader/anchor_functions_buildflags.h" #include "base/android/library_loader/library_prefetcher.h" #include "base/android/orderfile/orderfile_buildflags.h" -#include "base/android/sys_utils.h" #include "base/at_exit.h" #include "base/base_switches.h" #include "base/metrics/histogram.h" #include "base/metrics/histogram_functions.h" #include "base/metrics/histogram_macros.h" +#include "base/system/sys_info.h" #include "build/robolectric_buildflags.h" #if BUILDFLAG(IS_ROBOLECTRIC) @@ -46,7 +46,7 @@ LibraryProcessType GetLibraryProcessType() { bool IsUsingOrderfileOptimization() { #if BUILDFLAG(SUPPORTS_CODE_ORDERING) - return SysUtils::IsLowEndDeviceFromJni(); + return SysInfo::IsLowEndDevice(); #else // !SUPPORTS_CODE_ORDERING return false; #endif diff --git a/naiveproxy/src/base/android/library_loader/library_prefetcher.cc b/naiveproxy/src/base/android/library_loader/library_prefetcher.cc index dad3336f4a..d96fb62263 100644 --- a/naiveproxy/src/base/android/library_loader/library_prefetcher.cc +++ b/naiveproxy/src/base/android/library_loader/library_prefetcher.cc @@ -15,6 +15,7 @@ #include #include +#include #include #include #include @@ -28,9 +29,9 @@ #include "base/files/file.h" #include "base/format_macros.h" #include "base/logging.h" +#include "base/metrics/histogram_functions.h" #include "base/posix/eintr_wrapper.h" #include "base/process/process_metrics.h" -#include "base/ranges/algorithm.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "build/build_config.h" @@ -195,6 +196,8 @@ void Prefetch(size_t start, size_t end) { // These values were used in the past for recording // "LibraryLoader.PrefetchDetailedStatus". +// These values are persisted to logs. Entries should not be renumbered and +// numeric values should never be reused. See PrefetchStatus in enums.xml. enum class PrefetchStatus { kSuccess = 0, kWrongOrdering = 1, @@ -275,7 +278,12 @@ void NativeLibraryPrefetcher::ForkAndPrefetchNativeLibrary(bool ordered_only) { // would create a dump as well. return; #else + base::TimeTicks start_time = base::TimeTicks::Now(); PrefetchStatus status = ForkAndPrefetch(ordered_only); + base::UmaHistogramMediumTimes("Android.LibraryLoader.Prefetch.Duration", + base::TimeTicks::Now() - start_time); + base::UmaHistogramEnumeration("Android.LibraryLoader.Prefetch.Status", + status); if (status != PrefetchStatus::kSuccess) { LOG(WARNING) << "Cannot prefetch the library. status = " << static_cast(status); @@ -296,7 +304,7 @@ int NativeLibraryPrefetcher::PercentageOfResidentCode(size_t start, } total_pages += residency.size(); resident_pages += static_cast( - ranges::count_if(residency, [](unsigned char x) { return x & 1; })); + std::ranges::count_if(residency, [](unsigned char x) { return x & 1; })); if (total_pages == 0) { return -1; } diff --git a/naiveproxy/src/base/android/library_loader/library_prefetcher_hooks.cc b/naiveproxy/src/base/android/library_loader/library_prefetcher_hooks.cc index c82e0c1a9e..172428e379 100644 --- a/naiveproxy/src/base/android/library_loader/library_prefetcher_hooks.cc +++ b/naiveproxy/src/base/android/library_loader/library_prefetcher_hooks.cc @@ -25,6 +25,12 @@ static void JNI_LibraryPrefetcher_ForkAndPrefetchNativeLibrary(JNIEnv* env) { #endif } +static void JNI_LibraryPrefetcher_PrefetchNativeLibraryForWebView(JNIEnv* env) { +#if BUILDFLAG(SUPPORTS_CODE_ORDERING) + return NativeLibraryPrefetcher::ForkAndPrefetchNativeLibrary(false); +#endif +} + static jint JNI_LibraryPrefetcher_PercentageOfResidentNativeLibraryCode( JNIEnv* env) { #if BUILDFLAG(SUPPORTS_CODE_ORDERING) diff --git a/naiveproxy/src/base/android/memory_purge_manager_android.cc b/naiveproxy/src/base/android/memory_purge_manager_android.cc index 7ae91386a1..7d98a12b38 100644 --- a/naiveproxy/src/base/android/memory_purge_manager_android.cc +++ b/naiveproxy/src/base/android/memory_purge_manager_android.cc @@ -30,7 +30,3 @@ static jboolean JNI_MemoryPurgeManager_IsOnPreFreezeMemoryTrimEnabled( JNIEnv* env) { return base::android::PreFreezeBackgroundMemoryTrimmer::ShouldUseModernTrim(); } - -static jboolean JNI_MemoryPurgeManager_IsSelfFreezeEnabled(JNIEnv* env) { - return base::FeatureList::IsEnabled(base::android::kShouldFreezeSelf); -} diff --git a/naiveproxy/src/base/android/native_uma_recorder.cc b/naiveproxy/src/base/android/native_uma_recorder.cc index 6b9fa3f97e..686b2e6b48 100644 --- a/naiveproxy/src/base/android/native_uma_recorder.cc +++ b/naiveproxy/src/base/android/native_uma_recorder.cc @@ -279,9 +279,9 @@ JNI_NativeUmaRecorder_GetHistogramSamplesForTesting(JNIEnv* env, std::unique_ptr samples = histogram->SnapshotSamples(); for (auto sampleCountIterator = samples->Iterator(); !sampleCountIterator->Done(); sampleCountIterator->Next()) { - HistogramBase::Sample min; + HistogramBase::Sample32 min; int64_t max; - HistogramBase::Count count; + HistogramBase::Count32 count; sampleCountIterator->Get(&min, &max, &count); buckets.push_back(min); buckets.push_back(max); diff --git a/naiveproxy/src/base/android/pre_freeze_background_memory_trimmer.cc b/naiveproxy/src/base/android/pre_freeze_background_memory_trimmer.cc index 0053755440..9210273fb7 100644 --- a/naiveproxy/src/base/android/pre_freeze_background_memory_trimmer.cc +++ b/naiveproxy/src/base/android/pre_freeze_background_memory_trimmer.cc @@ -74,7 +74,7 @@ std::string GetPreFreezeMetricName(std::string_view name, std::string GetSelfCompactionMetricName(std::string_view name, std::string_view suffix) { const char* process_type = GetProcessType(); - return StrCat({"Memory.SelfCompact.", process_type, ".", name, ".", suffix}); + return StrCat({"Memory.SelfCompact2.", process_type, ".", name, ".", suffix}); } class PrivateMemoryFootprintMetric @@ -516,9 +516,15 @@ void PreFreezeBackgroundMemoryTrimmer::StartSelfCompaction( uint64_t max_bytes, base::TimeTicks started_at) { TRACE_EVENT0("base", "StartSelfCompaction"); + { + base::AutoLock locker(lock_); + process_compacted_metadata_.emplace( + "PreFreezeBackgroundMemoryTrimmer.ProcessCompacted", + /*is_compacted=*/1, base::SampleMetadataScope::kProcess); + } metric->RecordBeforeMetrics(); - SelfCompactionTask(std::move(task_runner), std::move(regions), - std::move(metric), max_bytes, started_at); + MaybePostSelfCompactionTask(std::move(task_runner), std::move(regions), + std::move(metric), max_bytes, started_at); } void PreFreezeBackgroundMemoryTrimmer::FinishSelfCompaction( @@ -545,6 +551,7 @@ void PreFreezeBackgroundMemoryTrimmer::MaybeCancelSelfCompaction() { void PreFreezeBackgroundMemoryTrimmer::MaybeCancelSelfCompactionInternal() { base::AutoLock locker(lock_); + process_compacted_metadata_.reset(); self_compaction_last_cancelled_ = base::TimeTicks::Now(); } @@ -559,13 +566,17 @@ void PreFreezeBackgroundMemoryTrimmer::CompactSelf() { TRACE_EVENT0("base", "CompactSelf"); std::vector regions; - std::string proc_maps; - if (!debug::ReadProcMaps(&proc_maps) || !ParseProcMaps(proc_maps, ®ions)) { - return; - } + // We still start the task in the control group, in order to record metrics. + if (base::FeatureList::IsEnabled(kShouldFreezeSelf)) { + std::string proc_maps; + if (!debug::ReadProcMaps(&proc_maps) || + !ParseProcMaps(proc_maps, ®ions)) { + return; + } - if (regions.size() == 0) { - return; + if (regions.size() == 0) { + return; + } } auto started_at = base::TimeTicks::Now(); @@ -646,10 +657,6 @@ void PreFreezeBackgroundMemoryTrimmer::PostMetricsTasksIfModern() { // static void PreFreezeBackgroundMemoryTrimmer::OnSelfFreeze() { - if (!base::FeatureList::IsEnabled(kShouldFreezeSelf)) { - return; - } - TRACE_EVENT0("base", "OnSelfFreeze"); Instance().OnSelfFreezeInternal(); @@ -657,7 +664,9 @@ void PreFreezeBackgroundMemoryTrimmer::OnSelfFreeze() { void PreFreezeBackgroundMemoryTrimmer::OnSelfFreezeInternal() { base::AutoLock locker(lock_); - RunPreFreezeTasks(); + if (base::FeatureList::IsEnabled(kShouldFreezeSelf)) { + RunPreFreezeTasks(); + } base::ThreadPool::PostDelayedTask( FROM_HERE, {base::TaskPriority::BEST_EFFORT, MayBlock()}, diff --git a/naiveproxy/src/base/android/pre_freeze_background_memory_trimmer.h b/naiveproxy/src/base/android/pre_freeze_background_memory_trimmer.h index 124015d52f..13e027f37e 100644 --- a/naiveproxy/src/base/android/pre_freeze_background_memory_trimmer.h +++ b/naiveproxy/src/base/android/pre_freeze_background_memory_trimmer.h @@ -13,6 +13,7 @@ #include "base/functional/callback.h" #include "base/memory/post_delayed_memory_reduction_task.h" #include "base/no_destructor.h" +#include "base/profiler/sample_metadata.h" #include "base/task/delayed_task_handle.h" #include "base/task/sequenced_task_runner.h" #include "base/timer/timer.h" @@ -305,6 +306,8 @@ class BASE_EXPORT PreFreezeBackgroundMemoryTrimmer { // frozen by App Freezer. base::TimeTicks self_compaction_last_cancelled_ GUARDED_BY(lock_) = base::TimeTicks::Min(); + std::optional process_compacted_metadata_ + GUARDED_BY(lock_); bool supports_modern_trim_; }; diff --git a/naiveproxy/src/base/android/proguard/chromium_apk.flags b/naiveproxy/src/base/android/proguard/chromium_apk.flags index d6dcb20c7a..1fe887b9ee 100644 --- a/naiveproxy/src/base/android/proguard/chromium_apk.flags +++ b/naiveproxy/src/base/android/proguard/chromium_apk.flags @@ -35,13 +35,6 @@ public (); } -# Keep all enum values and valueOf methods. See -# http://proguard.sourceforge.net/index.html#manual/examples.html -# for the reason for this. Also, see http://crbug.com/248037. --keepclassmembers enum !cr_allowunused,** { - public static **[] values(); -} - # This is to workaround crbug.com/1204690 - an old GMS app version crashes when # ObjectWrapper contains > 1 fields, and this prevents R8 from inserting a # synthetic field. diff --git a/naiveproxy/src/base/android/sys_utils.cc b/naiveproxy/src/base/android/sys_utils.cc index 736e37d648..ccf08bb859 100644 --- a/naiveproxy/src/base/android/sys_utils.cc +++ b/naiveproxy/src/base/android/sys_utils.cc @@ -17,22 +17,11 @@ namespace base { namespace android { -bool SysUtils::IsLowEndDeviceFromJni() { - JNIEnv* env = AttachCurrentThread(); - return Java_SysUtils_isLowEndDevice(env); -} - bool SysUtils::IsCurrentlyLowMemory() { JNIEnv* env = AttachCurrentThread(); return Java_SysUtils_isCurrentlyLowMemory(env); } -// static -int SysUtils::AmountOfPhysicalMemoryKB() { - JNIEnv* env = AttachCurrentThread(); - return Java_SysUtils_amountOfPhysicalMemoryKB(env); -} - // Logs the number of minor / major page faults to tracing (and also the time to // collect) the metrics. Does nothing if tracing is not enabled. static void JNI_SysUtils_LogPageFaultCountToTracing(JNIEnv* env) { diff --git a/naiveproxy/src/base/android/sys_utils.h b/naiveproxy/src/base/android/sys_utils.h index c4ddd2176a..4dee3a50a8 100644 --- a/naiveproxy/src/base/android/sys_utils.h +++ b/naiveproxy/src/base/android/sys_utils.h @@ -12,12 +12,8 @@ namespace android { class BASE_EXPORT SysUtils { public: - // Returns true iff this is a low-end device. - static bool IsLowEndDeviceFromJni(); // Returns true if system has low available memory. static bool IsCurrentlyLowMemory(); - // Returns amount of physical ram detected in KB, or 0 if detection failed. - static int AmountOfPhysicalMemoryKB(); }; } // namespace android diff --git a/naiveproxy/src/base/android/task_scheduler/task_runner_android.cc b/naiveproxy/src/base/android/task_scheduler/task_runner_android.cc index 3df400d921..0347d550e9 100644 --- a/naiveproxy/src/base/android/task_scheduler/task_runner_android.cc +++ b/naiveproxy/src/base/android/task_scheduler/task_runner_android.cc @@ -36,15 +36,8 @@ TaskRunnerAndroid::UiThreadTaskRunnerCallback& GetUiThreadTaskRunnerCallback() { return *callback; } -void RunJavaTask(base::android::ScopedJavaGlobalRef task, - const std::string& runnable_class_name) { - TRACE_EVENT("toplevel", nullptr, [&](::perfetto::EventContext& ctx) { - std::string event_name = - base::StrCat({"JniPostTask: ", runnable_class_name}); - ctx.event()->set_name(event_name.c_str()); - }); - JNIEnv* env = jni_zero::AttachCurrentThread(); - JNI_Runnable::Java_Runnable_run(env, task); +void RunJavaTask(jint task_index) { + Java_TaskRunnerImpl_runTask(jni_zero::AttachCurrentThread(), task_index); } } // namespace @@ -68,19 +61,13 @@ void TaskRunnerAndroid::Destroy(JNIEnv* env) { delete this; } -void TaskRunnerAndroid::PostDelayedTask( - JNIEnv* env, - const base::android::JavaRef& task, - jlong delay, - std::string& runnable_class_name) { +void TaskRunnerAndroid::PostDelayedTask(JNIEnv* env, + jlong delay, + jint task_index) { // This could be run on any java thread, so we can't cache |env| in the // BindOnce because JNIEnv is thread specific. task_runner_->PostDelayedTask( - FROM_HERE, - base::BindOnce(&RunJavaTask, - base::android::ScopedJavaGlobalRef(task), - runnable_class_name), - Milliseconds(delay)); + FROM_HERE, base::BindOnce(&RunJavaTask, task_index), Milliseconds(delay)); } // static diff --git a/naiveproxy/src/base/android/task_scheduler/task_runner_android.h b/naiveproxy/src/base/android/task_scheduler/task_runner_android.h index 59c8351bb9..e077cf3d2a 100644 --- a/naiveproxy/src/base/android/task_scheduler/task_runner_android.h +++ b/naiveproxy/src/base/android/task_scheduler/task_runner_android.h @@ -32,10 +32,7 @@ class BASE_EXPORT TaskRunnerAndroid { void Destroy(JNIEnv* env); - void PostDelayedTask(JNIEnv* env, - const base::android::JavaRef& task, - jlong delay, - std::string& runnable_class_name); + void PostDelayedTask(JNIEnv* env, jlong delay, jint taskIndex); bool BelongsToCurrentThread(JNIEnv* env); diff --git a/naiveproxy/src/base/apple/foundation_util.mm b/naiveproxy/src/base/apple/foundation_util.mm index fa3ff7f033..5c9a383635 100644 --- a/naiveproxy/src/base/apple/foundation_util.mm +++ b/naiveproxy/src/base/apple/foundation_util.mm @@ -10,6 +10,7 @@ #include #include +#include #include #include "base/apple/bridging.h" @@ -22,7 +23,6 @@ #include "base/logging.h" #include "base/numerics/checked_math.h" #include "base/numerics/safe_conversions.h" -#include "base/ranges/algorithm.h" #include "base/strings/string_util.h" #include "base/strings/sys_string_conversions.h" #include "build/branding_buildflags.h" @@ -234,7 +234,7 @@ FilePath GetInnermostAppBundlePath(const FilePath& exec_name) { return FilePath(); } - auto app = ranges::find_if( + auto app = std::ranges::find_if( Reversed(components), [](const std::string& component) -> bool { return component.size() > kExtLength && EndsWith(component, kExt); }); diff --git a/naiveproxy/src/base/apple/mach_port_rendezvous.cc b/naiveproxy/src/base/apple/mach_port_rendezvous.cc index 0b3e0a1b44..1a2a2383b3 100644 --- a/naiveproxy/src/base/apple/mach_port_rendezvous.cc +++ b/naiveproxy/src/base/apple/mach_port_rendezvous.cc @@ -69,7 +69,7 @@ constexpr size_t kMaxInfoPlistDataSize = 18 * 1024; #endif // This limit is arbitrary and can be safely increased in the future. -constexpr size_t kMaximumRendezvousPorts = 5; +constexpr size_t kMaximumRendezvousPorts = 6; enum MachRendezvousMsgId : mach_msg_id_t { kMachRendezvousMsgIdRequest = 'mrzv', diff --git a/naiveproxy/src/base/callback_list.h b/naiveproxy/src/base/callback_list.h index cc3d8845da..b1204f08a5 100644 --- a/naiveproxy/src/base/callback_list.h +++ b/naiveproxy/src/base/callback_list.h @@ -5,6 +5,7 @@ #ifndef BASE_CALLBACK_LIST_H_ #define BASE_CALLBACK_LIST_H_ +#include #include #include #include @@ -15,7 +16,6 @@ #include "base/functional/bind.h" #include "base/functional/callback.h" #include "base/memory/weak_ptr.h" -#include "base/ranges/algorithm.h" #include "base/types/is_instantiation.h" // OVERVIEW: @@ -174,7 +174,7 @@ class CallbackListBase { // Returns whether the list of registered callbacks is empty (from an external // perspective -- meaning no remaining callbacks are live). bool empty() const { - return ranges::all_of( + return std::ranges::all_of( callbacks_, [](const auto& callback) { return callback.is_null(); }); } diff --git a/naiveproxy/src/base/check.cc b/naiveproxy/src/base/check.cc index 4c30de5cb3..7dfadc5d1d 100644 --- a/naiveproxy/src/base/check.cc +++ b/naiveproxy/src/base/check.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "base/check.h" #include @@ -164,7 +169,7 @@ class NotReachedLogMessage : public LogMessage { class DCheckLogMessage : public LogMessage { public: - DCheckLogMessage(const base::Location& location) + explicit DCheckLogMessage(const base::Location& location) : LogMessage(location.file_name(), location.line_number(), LOGGING_DCHECK), diff --git a/naiveproxy/src/base/check_op.cc b/naiveproxy/src/base/check_op.cc index 1fb12c7e89..9334381354 100644 --- a/naiveproxy/src/base/check_op.cc +++ b/naiveproxy/src/base/check_op.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "base/check_op.h" #include diff --git a/naiveproxy/src/base/command_line.cc b/naiveproxy/src/base/command_line.cc index 1f3627a128..a35ddac7ef 100644 --- a/naiveproxy/src/base/command_line.cc +++ b/naiveproxy/src/base/command_line.cc @@ -9,6 +9,8 @@ #include "base/command_line.h" +#include +#include #include #include @@ -20,7 +22,6 @@ #include "base/logging.h" #include "base/notreached.h" #include "base/numerics/checked_math.h" -#include "base/ranges/algorithm.h" #include "base/strings/strcat.h" #include "base/strings/string_split.h" #include "base/strings/string_tokenizer.h" @@ -54,10 +55,17 @@ constexpr CommandLine::CharType kSwitchValueSeparator[] = // By putting slash last, we can control whether it is treaded as a switch // value by changing the value of switch_prefix_count to be one less than // the array size. -constexpr CommandLine::StringViewType kSwitchPrefixes[] = {L"--", L"-", L"/"}; +constexpr auto kSwitchPrefixes = std::to_array({ + L"--", + L"-", + L"/", +}); #elif BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA) // Unixes don't use slash as a switch. -constexpr CommandLine::StringViewType kSwitchPrefixes[] = {"--", "-"}; +constexpr auto kSwitchPrefixes = std::to_array({ + "--", + "-", +}); #endif size_t switch_prefix_count = std::size(kSwitchPrefixes); @@ -486,7 +494,7 @@ CommandLine::StringVector CommandLine::GetArgs() const { // Gather all arguments after the last switch (may include kSwitchTerminator). StringVector args(argv_.begin() + begin_args_, argv_.end()); // Erase only the first kSwitchTerminator (maybe "--" is a legitimate page?) - auto switch_terminator = ranges::find(args, kSwitchTerminator); + auto switch_terminator = std::ranges::find(args, kSwitchTerminator); if (switch_terminator != args.end()) { args.erase(switch_terminator); } @@ -512,7 +520,7 @@ void CommandLine::AppendArgNative(StringViewType value) { #if BUILDFLAG(ENABLE_COMMANDLINE_SEQUENCE_CHECKS) sequence_checker_.Check(); #endif - argv_.push_back(StringType(value)); + argv_.emplace_back(value); } void CommandLine::AppendArguments(const CommandLine& other, diff --git a/naiveproxy/src/base/compiler_specific.h b/naiveproxy/src/base/compiler_specific.h index 2e2c21f92b..f484a2f14a 100644 --- a/naiveproxy/src/base/compiler_specific.h +++ b/naiveproxy/src/base/compiler_specific.h @@ -59,7 +59,9 @@ // // This body will not be inlined into callers. // } // ``` -#if __has_cpp_attribute(gnu::noinline) +#if __has_cpp_attribute(clang::noinline) +#define NOINLINE [[clang::noinline]] +#elif __has_cpp_attribute(gnu::noinline) #define NOINLINE [[gnu::noinline]] #elif __has_cpp_attribute(msvc::noinline) #define NOINLINE [[msvc::noinline]] @@ -67,6 +69,24 @@ #define NOINLINE #endif +// Annotates a call site indicating that the callee should not be inlined. +// +// See also: +// https://clang.llvm.org/docs/AttributeReference.html#noinline +// +// Usage: +// ``` +// void Func() { +// // This specific call to `DoSomething` should not be inlined. +// NOINLINE_CALL DoSomething(); +// } +// ``` +#if __has_cpp_attribute(clang::noinline) +#define NOINLINE_CALL [[clang::noinline]] +#else +#define NOINLINE_CALL +#endif + // Annotates a function indicating it should not be optimized. // // See also: @@ -102,7 +122,9 @@ // Since `ALWAYS_INLINE` is performance-oriented but can hamper debugging, // ignore it in debug mode. #if defined(NDEBUG) -#if __has_cpp_attribute(gnu::always_inline) +#if __has_cpp_attribute(clang::always_inline) +#define ALWAYS_INLINE [[clang::always_inline]] inline +#elif __has_cpp_attribute(gnu::always_inline) #define ALWAYS_INLINE [[gnu::always_inline]] inline #elif defined(COMPILER_MSVC) #define ALWAYS_INLINE __forceinline @@ -112,6 +134,30 @@ #define ALWAYS_INLINE inline #endif +// Annotates a call site indicating the calee should always be inlined. +// +// See also: +// https://clang.llvm.org/docs/AttributeReference.html#always-inline-force-inline +// +// Usage: +// ``` +// void Func() { +// // This specific call will be inlined if possible. +// ALWAYS_INLINE_CALL DoSomething(); +// } +// ``` +// +// Since `ALWAYS_INLINE_CALL` is performance-oriented but can hamper debugging, +// ignore it in debug mode. +#if defined(NDEBUG) +#if __has_cpp_attribute(clang::always_inline) +#define ALWAYS_INLINE_CALL [[clang::always_inline]] +#endif +#endif +#if !defined(ALWAYS_INLINE_CALL) +#define ALWAYS_INLINE_CALL +#endif + // Annotates a function indicating it should never be tail called. Useful to // make sure callers of the annotated function are never omitted from call // stacks. Often useful with `NOINLINE` to make sure the function itself is also diff --git a/naiveproxy/src/base/containers/README.md b/naiveproxy/src/base/containers/README.md index 50633fe0bb..b702ebd72b 100644 --- a/naiveproxy/src/base/containers/README.md +++ b/naiveproxy/src/base/containers/README.md @@ -4,97 +4,105 @@ ## What goes here -This directory contains some STL-like containers. +This directory contains some stdlib-like containers. Things should be moved here that are generally applicable across the code base. Don't add things here just because you need them in one place and think others -may someday want something similar. You can put specialized containers in -your component's directory and we can promote them here later if we feel there -is broad applicability. +may someday want something similar. You can put specialized containers in your +component's directory and we can promote them here later if we feel there is +broad applicability. ### Design and naming Fundamental [//base principles](../README.md#design-and-naming) apply, i.e.: -Containers should adhere as closely to STL as possible. Functions and behaviors -not present in STL should only be added when they are related to the specific -data structure implemented by the container. +Containers should adhere as closely to stdlib as possible. Functions and +behaviors not present in stdlib should only be added when they are related to +the specific data structure implemented by the container. -For STL-like containers our policy is that they should use STL-like naming even -when it may conflict with the style guide. So functions and class names should -be lower case with underscores. Non-STL-like classes and functions should use -Google naming. Be sure to use the base namespace. +For stdlib-like containers our policy is that they should use stdlib-like naming +even when it may conflict with the style guide. So functions and class names +should be lower case with underscores. Non-stdlib-like classes and functions +should use Google naming. Be sure to use the base namespace. ## Map and set selection ### Usage advice -* Do not use `base::flat_map` or `base::flat_set` if the number of items will - be large or unbounded and elements will be inserted/deleted outside of the - containers constructor/destructor - they have O(n) performance on inserts - and deletes of individual items. +1. If you just need a generic map or set container without any additional + properties then prefer to use `absl::flat_hash_map` and + `absl::flat_hash_set`. These are versatile containers that have good + performance on both large and small sized data. -* Do not default to using `std::unordered_set` and `std::unordered_map`. In - the common case, query performance is unlikely to be sufficiently higher - than `std::map` to make a difference, insert performance is slightly worse, - and the memory overhead is high. This makes sense mostly for large tables - where you expect a lot of lookups. + 1. Is pointer-stability of values (but not keys) required? Then use + `absl::flat_hash_map>`. + 2. Is pointer-stability of keys required? Then use `absl::node_hash_map` + and `absl::node_hash_set`. -* Most maps and sets in Chrome are small and contain objects that can be moved - efficiently. In this case, consider `base::flat_map` and `base::flat_set`. - You need to be aware of the maximum expected size of the container since - individual inserts and deletes are O(n), giving O(n^2) construction time for - the entire map. But because it avoids mallocs in most cases, inserts are - better or comparable to other containers even for several dozen items, and - efficiently-moved types are unlikely to have performance problems for most - cases until you have hundreds of items. If your container can be constructed - in one shot, the constructor from vector gives O(n log n) construction times - and it should be strictly better than a `std::map`. +2. If you require sorted order, then the best choice depends on whether your + map is going to be written once and read many times, or if it is going to be + written frequently throughout its lifetime. - Conceptually inserting a range of n elements into a `base::flat_map` or - `base::flat_set` behaves as if insert() was called for each individually - element. Thus in case the input range contains repeated elements, only the - first one of these duplicates will be inserted into the container. This - behaviour applies to construction from a range as well. + 1. If the map is written once, then `base::flat_map` and `base::flat_set` + are good choices. While they have poor asymptotic behavior on writes, on + a write-once container this performance is no worse than the standard + library tree containers and so they are strictly better in terms of + overhead. + 2. If the map is always very small, then `base::flat_map` and + `base::flat_set` are again good choices, even if the map is being + written to multiple times. While mutations are O(n) this cost is + negligible for very small values of n compared to the cost of doing a + malloc on every mutation. + 3. If the map is written multiple times and is large then then `std::map` + and `std::set` are the best choices. + 4. If you require pointer stability (on either the key or value) then + `std::map` and `std::set` are the also the best choices. -* `base::small_map` has better runtime memory usage without the poor mutation - performance of large containers that `base::flat_map` has. But this - advantage is partially offset by additional code size. Prefer in cases where - you make many objects so that the code/heap tradeoff is good. +When using `base::flat_map` and `base::flat_set` there are also fixed versions +of these that are backed by a `std::array` instead of a `std::vector` and which +don't provide mutating operators, but which are constexpr friendly and support +stack allocation. If you are using the flat structures because your container is +only written once then the fixed versions may be an even better alternative, +particularly if you're looking for a structure that can be used as a +compile-time lookup table. -* Use `std::map` and `std::set` if you can't decide. Even if they're not - great, they're unlikely to be bad or surprising. +Note that this advice never suggests the use of `std::unordered_map` and +`std::unordered_set`. These containers provides similar features to the Abseil +flat hash containers but with worse performance. They should only be used if +absolutely required for compatibility with third-party code. -### Map and set details +Also note that this advice does not suggest the use of the Abseil btree +structures, `absl::btree_map` and `absl::btree_set`. This is because while these +types do provide good performance for cases where you need a sorted container +they have been found to introduce a very large code size penalty when using them +in Chromium. Until this problem can be resolved they should not be used in +Chromium code. -Sizes are on 64-bit platforms. Stable iterators aren't invalidated when the -container is mutated. +### Map and set implementation details -| Container | Empty size | Per-item overhead | Stable iterators? | Insert/delete complexity | -|:------------------------------------------ |:--------------------- |:----------------- |:----------------- |:-----------------------------| -| `std::map`, `std::set` | 16 bytes | 32 bytes | Yes | O(log n) | -| `std::unordered_map`, `std::unordered_set` | 128 bytes | 16 - 24 bytes | No | O(1) | -| `base::flat_map`, `base::flat_set` | 24 bytes | 0 (see notes) | No | O(n) | -| `base::small_map` | 24 bytes (see notes) | 32 bytes | No | depends on fallback map type | +Sizes are on 64-bit platforms. Ordered iterators means that iteration occurs in +the sorted key order. Stable iterators means that iterators are not invalidated +by unrelated modifications to the container. Stable pointers means that pointers +to keys and values are not invalidated by unrelated modifications to the +container. -**Takeaways:** `std::unordered_map` and `std::unordered_set` have high -overhead for small container sizes, so prefer these only for larger workloads. +The table lists the values for maps, but the same properties apply to the +corresponding set types. -Code size comparisons for a block of code (see appendix) on Windows using -strings as keys. -| Container | Code size | -|:-------------------- |:---------- | -| `std::unordered_map` | 1646 bytes | -| `std::map` | 1759 bytes | -| `base::flat_map` | 1872 bytes | -| `base::small_map` | 2410 bytes | +| Container | Empty size | Per-item overhead | Ordered iterators? | Stable iterators? | Stable pointers? | Lookup complexity | Mutate complexity | +|:--------------------- |:---------- |:----------------- |:------------------ |:----------------- |:---------------- |:----------------- |:----------------- | +| `std::map` | 16 bytes | 32 bytes | Yes | Yes | Yes | O(log n) | O(log n) | +| `std::unordered_map` | 128 bytes | 16-24 bytes | No | No | Yes | O(1) | O(1) | +| `base::flat_map` | 24 bytes | 0 bytes | Yes | No | No | O(log n) | O(n) | +| `absl::flat_hash_map` | 40 bytes | 1 byte | No | No | No | O(1) | O(1) | +| `absl::node_hash_map` | 40 bytes | 1 byte | No | No | Yes | O(1) | O(1) | -**Takeaways:** `base::small_map` generates more code because of the inlining of -both brute-force and red-black tree searching. This makes it less attractive -for random one-off uses. But if your code is called frequently, the runtime -memory benefits will be more important. The code sizes of the other maps are -close enough it's not worth worrying about. +Note that all of these containers except for `std::map` have some additional +memory overhead based on their load factor that isn't accounted for by their +per-item overhead. This includes `base::flat_map` which doesn't have a hash +table load factor but does have the `std::vector` equivalent, unused capacity +from its double-on-resize allocation strategy. ### std::map and std::set @@ -216,20 +224,43 @@ constexpr auto kMap = base::MakeFixedFlatMap( Both `MakeFixedFlatSet` and `MakeFixedFlatMap` require callers to explicitly specify the key (and mapped) type. -### base::small\_map +### absl::flat\_hash\_map and absl::flat\_hash\_set -A small inline buffer that is brute-force searched that overflows into a full -`std::map` or `std::unordered_map`. This gives the memory benefit of -`base::flat_map` for small data sizes without the degenerate insertion -performance for large container sizes. +A hash table. These use Abseil's "swiss table" design which is elaborated on in +more detail at https://abseil.io/about/design/swisstables and +https://abseil.io/docs/cpp/guides/container#hash-tables. The short version is +that it uses an open addressing scheme with a lookup scheme that is designed to +minimize memory accesses and branch mispredicts. -Since instantiations require both code for a `std::map` and a brute-force search -of the inline container, plus a fancy iterator to cover both cases, code size -is larger. +The flat hash map structures also store the key and value directly in the hash +table slots, eliminating the need for additional memory allocations for +inserting or removing individual nodes. The comes at the cost of eliminating +pointer stability: unlike the standard library hash tables a rehash will not +only invalidate all iterators but also all pointers to the stored elements. -The initial size in the above table is assuming a very small inline table. The -actual size will be `sizeof(int) + min(sizeof(std::map), sizeof(T) * -inline_size)`. +In practical use these Abseil containers perform well enough that they are a +good default choice for a map or set container when you don't have any stronger +constraints. In fact, even when you require value pointer-stability it is still +generally better to wrap the value in a `std::unique_ptr` than to use an +alternative structure that provides such stability directly. + +### absl::node\_hash\_map and absl::node\_hash\_set + +A variant of the Abseil hash maps that stores the key-value pair in a separately +allocated node rather than directly in the hash table slots. This guarantees +pointer-stability for both the keys and values in the table, invalidating them +only when the element is deleted, but it comes at the cost of requiring an +additional allocation for every element inserted. + +There are two main uses for this structure. One is for cases where you require a +map with pointer-stability for the key (not the value), which cannot be done +with the Abseil flat map or set. The other is for cases where you want a drop-in +replacement for an existing `std::unordered_map` or `std::unordered_set` and you +aren't sure if pointer-stability is required. If you know that pointer-stability +is unnecessary then it would be better to convert to the flat tables but this +may be difficult to prove when working on unfamiliar code or doing a large scale +change. In such cases the node hash maps are still generally superior to the +standard library maps. ## Deque @@ -363,32 +394,3 @@ require safety. There are several problems with that approach: Therefore, the minimal checks that we are adding to these base classes are the most efficient and effective way to achieve the beginning of the safety that we need. (Note that we cannot account for undefined behavior in callers.) - -## Appendix - -### Code for map code size comparison - -This just calls insert and query a number of times, with `printf`s that prevent -things from being dead-code eliminated. - -```cpp -TEST(Foo, Bar) { - base::small_map> foo; - foo.insert(std::make_pair("foo", Flubber(8, "bar"))); - foo.insert(std::make_pair("bar", Flubber(8, "bar"))); - foo.insert(std::make_pair("foo1", Flubber(8, "bar"))); - foo.insert(std::make_pair("bar1", Flubber(8, "bar"))); - foo.insert(std::make_pair("foo", Flubber(8, "bar"))); - foo.insert(std::make_pair("bar", Flubber(8, "bar"))); - auto found = foo.find("asdf"); - printf("Found is %d\n", (int)(found == foo.end())); - found = foo.find("foo"); - printf("Found is %d\n", (int)(found == foo.end())); - found = foo.find("bar"); - printf("Found is %d\n", (int)(found == foo.end())); - found = foo.find("asdfhf"); - printf("Found is %d\n", (int)(found == foo.end())); - found = foo.find("bar1"); - printf("Found is %d\n", (int)(found == foo.end())); -} -``` diff --git a/naiveproxy/src/base/containers/circular_deque.h b/naiveproxy/src/base/containers/circular_deque.h index 832f9e3496..7e8ff24b9e 100644 --- a/naiveproxy/src/base/containers/circular_deque.h +++ b/naiveproxy/src/base/containers/circular_deque.h @@ -17,8 +17,7 @@ #include "base/memory/raw_ptr_exclusion.h" #include "base/numerics/checked_math.h" #include "base/numerics/safe_conversions.h" -#include "base/ranges/algorithm.h" -#include "base/ranges/from_range.h" +#include "base/types/cxx23_from_range.h" #if DCHECK_IS_ON() #include @@ -1262,18 +1261,18 @@ class circular_deque { // Implementations of base::Erase[If] (see base/stl_util.h). template size_t Erase(circular_deque& container, const Value& value) { - auto it = ranges::remove(container, value); - size_t removed = std::distance(it, container.end()); - container.erase(it, container.end()); - return removed; + auto removed = std::ranges::remove(container, value); + size_t num_removed = removed.size(); + container.erase(removed.begin(), removed.end()); + return num_removed; } template size_t EraseIf(circular_deque& container, Predicate pred) { - auto it = ranges::remove_if(container, pred); - size_t removed = std::distance(it, container.end()); - container.erase(it, container.end()); - return removed; + auto removed = std::ranges::remove_if(container, pred); + size_t num_removed = removed.size(); + container.erase(removed.begin(), removed.end()); + return num_removed; } } // namespace base diff --git a/naiveproxy/src/base/containers/contains.h b/naiveproxy/src/base/containers/contains.h index d263b30c7b..4ae9925095 100644 --- a/naiveproxy/src/base/containers/contains.h +++ b/naiveproxy/src/base/containers/contains.h @@ -5,25 +5,20 @@ #ifndef BASE_CONTAINERS_CONTAINS_H_ #define BASE_CONTAINERS_CONTAINS_H_ +// Provides `Contains()`, a general purpose utility to check whether a container +// contains a value. This will probe whether a `contains` or `find` member +// function on `container` exists, and fall back to a generic linear search over +// `container`. + +#include #include #include #include - -#include "base/ranges/algorithm.h" // TODO(dcheng): Remove this after fixing any IWYU errors. -#include "base/ranges/ranges.h" +#include namespace base { -namespace internal { - -// Small helper to detect whether a given type has a nested `key_type` typedef. -// Used below to catch misuses of the API for associative containers. -template -concept HasKeyType = requires { typename T::key_type; }; - -} // namespace internal - // A general purpose utility to check whether `container` contains `value`. This // will probe whether a `contains` or `find` member function on `container` // exists, and fall back to a generic linear search over `container`. @@ -39,22 +34,22 @@ constexpr bool Contains(const Container& container, const Value& value) { return container.find(value) != container.end(); } else { static_assert( - !internal::HasKeyType, + !requires { typename Container::key_type; }, "Error: About to perform linear search on an associative container. " "Either use a more generic comparator (e.g. std::less<>) or, if a " "linear search is desired, provide an explicit projection parameter."); - return ranges::find(container, value) != std::ranges::end(container); + return std::ranges::find(container, value) != std::ranges::end(container); } } -// Overload that allows to provide an additional projection invocable. This -// projection will be applied to every element in `container` before comparing -// it with `value`. This will always perform a linear search. +// Overload that allows callers to provide an additional projection invocable. +// This projection will be applied to every element in `container` before +// comparing it with `value`. This will always perform a linear search. template constexpr bool Contains(const Container& container, const Value& value, Proj proj) { - return ranges::find(container, value, std::move(proj)) != + return std::ranges::find(container, value, std::move(proj)) != std::ranges::end(container); } diff --git a/naiveproxy/src/base/containers/contains_nocompile.nc b/naiveproxy/src/base/containers/contains_nocompile.nc index f588ae3c5e..4a95c93286 100644 --- a/naiveproxy/src/base/containers/contains_nocompile.nc +++ b/naiveproxy/src/base/containers/contains_nocompile.nc @@ -7,18 +7,17 @@ #include #include +#include #include "base/containers/contains.h" - - namespace base { // The following code would perform a linear search through the set which is // likely unexpected and not intended. This is because the expression // `set.find(kFoo)` is ill-formed, since there is no implimit conversion from // std::string_view to `std::string`. This means Contains would fall back to the -// general purpose `base::ranges::find(set, kFoo)` linear search. +// general purpose `std::ranges::find(set, kFoo)` linear search. // To fix this clients can either use a more generic comparator like std::less<> // (in this case `set.find()` accepts any type that is comparable to a // std::string), or pass an explicit projection parameter to Contains, at which diff --git a/naiveproxy/src/base/containers/flat_map.h b/naiveproxy/src/base/containers/flat_map.h index 8b0600ee7b..25158d4eb9 100644 --- a/naiveproxy/src/base/containers/flat_map.h +++ b/naiveproxy/src/base/containers/flat_map.h @@ -380,8 +380,8 @@ constexpr flat_map MakeFlatMap( const Projection& proj = Projection()) { Container elements; internal::ReserveIfSupported(elements, unprojected_elements); - base::ranges::transform(unprojected_elements, std::back_inserter(elements), - proj); + std::ranges::transform(unprojected_elements, std::back_inserter(elements), + proj); return flat_map(std::move(elements), comp); } diff --git a/naiveproxy/src/base/containers/flat_set.h b/naiveproxy/src/base/containers/flat_set.h index b418941bc5..5cd3a82b79 100644 --- a/naiveproxy/src/base/containers/flat_set.h +++ b/naiveproxy/src/base/containers/flat_set.h @@ -5,11 +5,11 @@ #ifndef BASE_CONTAINERS_FLAT_SET_H_ #define BASE_CONTAINERS_FLAT_SET_H_ +#include #include #include #include "base/containers/flat_tree.h" -#include "base/ranges/algorithm.h" namespace base { @@ -174,8 +174,8 @@ constexpr flat_set MakeFlatSet( const Projection& proj = Projection()) { Container elements; internal::ReserveIfSupported(elements, unprojected_elements); - base::ranges::transform(unprojected_elements, std::back_inserter(elements), - proj); + std::ranges::transform(unprojected_elements, std::back_inserter(elements), + proj); return flat_set(std::move(elements), comp); } diff --git a/naiveproxy/src/base/containers/flat_tree.h b/naiveproxy/src/base/containers/flat_tree.h index 098a09cb15..937ed6b26b 100644 --- a/naiveproxy/src/base/containers/flat_tree.h +++ b/naiveproxy/src/base/containers/flat_tree.h @@ -20,7 +20,6 @@ #include "base/compiler_specific.h" #include "base/containers/span.h" #include "base/memory/raw_ptr_exclusion.h" -#include "base/ranges/algorithm.h" namespace base { @@ -41,7 +40,7 @@ constexpr bool is_sorted_and_unique(const Range& range, Comp comp) { // Being unique implies that there are no adjacent elements that // compare equal. So this checks that each element is strictly less // than the element after it. - return ranges::adjacent_find(range, std::not_fn(comp)) == + return std::ranges::adjacent_find(range, std::not_fn(comp)) == std::ranges::end(range); } @@ -1029,7 +1028,7 @@ template auto flat_tree::lower_bound( const Key& key) const -> const_iterator { KeyValueCompare comp(comp_); - return ranges::lower_bound(*this, key, comp); + return std::ranges::lower_bound(*this, key, comp); } template @@ -1050,7 +1049,7 @@ auto flat_tree::lower_bound( const KeyTypeOrK& key_ref = key; KeyValueCompare comp(comp_); - return ranges::lower_bound(*this, key_ref, comp); + return std::ranges::lower_bound(*this, key_ref, comp); } template @@ -1063,7 +1062,7 @@ template auto flat_tree::upper_bound( const Key& key) const -> const_iterator { KeyValueCompare comp(comp_); - return ranges::upper_bound(*this, key, comp); + return std::ranges::upper_bound(*this, key, comp); } template @@ -1084,7 +1083,7 @@ auto flat_tree::upper_bound( const KeyTypeOrK& key_ref = key; KeyValueCompare comp(comp_); - return ranges::upper_bound(*this, key_ref, comp); + return std::ranges::upper_bound(*this, key_ref, comp); } // ---------------------------------------------------------------------------- @@ -1151,10 +1150,10 @@ size_t EraseIf( base::internal::flat_tree& container, Predicate pred) { - auto it = ranges::remove_if(container, pred); - size_t removed = std::distance(it, container.end()); - container.erase(it, container.end()); - return removed; + auto removed = std::ranges::remove_if(container, pred); + size_t num_removed = removed.size(); + container.erase(removed.begin(), removed.end()); + return num_removed; } } // namespace base diff --git a/naiveproxy/src/base/containers/intrusive_heap.h b/naiveproxy/src/base/containers/intrusive_heap.h index 2ef60175b7..70ecf19d91 100644 --- a/naiveproxy/src/base/containers/intrusive_heap.h +++ b/naiveproxy/src/base/containers/intrusive_heap.h @@ -144,8 +144,7 @@ #include "base/check_op.h" #include "base/compiler_specific.h" #include "base/memory/ptr_util.h" -#include "base/ranges/algorithm.h" -#include "base/ranges/from_range.h" +#include "base/types/cxx23_from_range.h" #include "third_party/abseil-cpp/absl/container/inlined_vector.h" namespace base { @@ -479,7 +478,7 @@ class IntrusiveHeap { } // Repair the heap and ensure handles are pointing to the right index. - ranges::make_heap(impl_.heap_, value_comp()); + std::ranges::make_heap(impl_.heap_, value_comp()); for (size_t i = 0; i < size(); ++i) { SetHeapHandle(i); } diff --git a/naiveproxy/src/base/containers/linked_list.cc b/naiveproxy/src/base/containers/linked_list.cc index 1471a98cc0..fca8b7960f 100644 --- a/naiveproxy/src/base/containers/linked_list.cc +++ b/naiveproxy/src/base/containers/linked_list.cc @@ -6,9 +6,7 @@ #include "base/check_op.h" -namespace base { - -namespace internal { +namespace base::internal { LinkNodeBase::LinkNodeBase() = default; @@ -56,6 +54,4 @@ void LinkNodeBase::InsertAfterBase(LinkNodeBase* e) { e->next_ = this; } -} // namespace internal - -} // namespace base +} // namespace base::internal diff --git a/naiveproxy/src/base/containers/span.h b/naiveproxy/src/base/containers/span.h index d2fdc81dd3..e1c6784263 100644 --- a/naiveproxy/src/base/containers/span.h +++ b/naiveproxy/src/base/containers/span.h @@ -772,15 +772,15 @@ class GSL_POINTER span { requires(std::is_const_v && std::equality_comparable) { - return std::ranges::equal(span(lhs), - span(rhs)); + return std::ranges::equal(span(lhs), + span(rhs)); } friend constexpr bool operator==(span lhs, span rhs) requires(!std::is_const_v && std::equality_comparable) { - return std::ranges::equal(span(lhs), rhs); + return std::ranges::equal(span(lhs), rhs); } template rhs) { - return std::ranges::equal(span(lhs), + return std::ranges::equal(span(lhs), span(rhs)); } diff --git a/naiveproxy/src/base/containers/span_writer.h b/naiveproxy/src/base/containers/span_writer.h index 977eee7cbe..2f684b7a73 100644 --- a/naiveproxy/src/base/containers/span_writer.h +++ b/naiveproxy/src/base/containers/span_writer.h @@ -78,11 +78,36 @@ class SpanWriter { // For a SpanWriter over bytes, we can write integer values directly to those // bytes as a memcpy. Returns true if there was room remaining and the bytes - // were written. + // were written. The macros below implement the following methods: // - // This provides big, little, and native endian writing orders. Note that - // "native" order is almost never what you want; it only makes sense for byte - // buffers that stay in memory and are never written to the disk or network. + // bool WriteU8BigEndian(uint8_t) + // bool WriteU16BigEndian(uint16_t) + // bool WriteU32BigEndian(uint32_t) + // bool WriteU64BigEndian(uint64_t) + // bool WriteU8LittleEndian(uint8_t) + // bool WriteU16LittleEndian(uint16_t) + // bool WriteU32LittleEndian(uint32_t) + // bool WriteU64LittleEndian(uint64_t) + // bool WriteU8NativeEndian(uint8_t) + // bool WriteU16NativeEndian(uint16_t) + // bool WriteU32NativeEndian(uint32_t) + // bool WriteU64NativeEndian(uint64_t) + // bool WriteI8BigEndian(int8_t) + // bool WriteI16BigEndian(int16_t) + // bool WriteI32BigEndian(int32_t) + // bool WriteI64BigEndian(int64_t) + // bool WriteI8LittleEndian(int8_t) + // bool WriteI16LittleEndian(int16_t) + // bool WriteI32LittleEndian(int32_t) + // bool WriteI64LittleEndian(int64_t) + // bool WriteI8NativeEndian(int8_t) + // bool WriteI16NativeEndian(int16_t) + // bool WriteI32NativeEndian(int32_t) + // bool WriteI64NativeEndian(int64_t) + // + // Note that "native" order is almost never what you want; it only makes sense + // for byte buffers that stay in memory and are never written to the disk or + // network. #define BASE_SPANWRITER_WRITE(signchar, bitsize, endian, typeprefix) \ constexpr bool Write##signchar##bitsize##endian##Endian( \ typeprefix##int##bitsize##_t value) \ diff --git a/naiveproxy/src/base/containers/to_value_list.h b/naiveproxy/src/base/containers/to_value_list.h index 65dcc44c68..643ccd015b 100644 --- a/naiveproxy/src/base/containers/to_value_list.h +++ b/naiveproxy/src/base/containers/to_value_list.h @@ -5,6 +5,7 @@ #ifndef BASE_CONTAINERS_TO_VALUE_LIST_H_ #define BASE_CONTAINERS_TO_VALUE_LIST_H_ +#include #include #include #include @@ -12,8 +13,6 @@ #include #include -#include "base/ranges/algorithm.h" -#include "base/ranges/ranges.h" #include "base/values.h" namespace base { @@ -29,12 +28,13 @@ concept AppendableToValueList = // Complexity: Exactly `size(range)` applications of `proj`. template requires std::ranges::sized_range && std::ranges::input_range && - std::indirectly_unary_invocable> && + std::indirectly_unary_invocable> && internal::AppendableToValueList< - std::indirect_result_t>> + std::indirect_result_t>> Value::List ToValueList(Range&& range, Proj proj = {}) { auto container = Value::List::with_capacity(std::ranges::size(range)); - ranges::for_each( + std::ranges::for_each( std::forward(range), [&](T&& value) { container.Append(std::forward(value)); }, std::move(proj)); diff --git a/naiveproxy/src/base/containers/to_vector.h b/naiveproxy/src/base/containers/to_vector.h index 42b0918b96..4748c7bdaf 100644 --- a/naiveproxy/src/base/containers/to_vector.h +++ b/naiveproxy/src/base/containers/to_vector.h @@ -5,6 +5,7 @@ #ifndef BASE_CONTAINERS_TO_VECTOR_H_ #define BASE_CONTAINERS_TO_VECTOR_H_ +#include #include #include #include @@ -12,9 +13,6 @@ #include #include -#include "base/ranges/algorithm.h" -#include "base/ranges/ranges.h" - namespace base { // Maps a container to a std::vector<> with respect to the provided projection. @@ -28,14 +26,14 @@ namespace base { // Complexity: Exactly `size(range)` applications of `proj`. template requires std::ranges::sized_range && std::ranges::input_range && - std::indirectly_unary_invocable> + std::indirectly_unary_invocable> auto ToVector(Range&& range, Proj proj = {}) { using ProjectedType = - std::projected, Proj>::value_type; + std::projected, Proj>::value_type; std::vector container; container.reserve(std::ranges::size(range)); - ranges::transform(std::forward(range), std::back_inserter(container), - std::move(proj)); + std::ranges::transform(std::forward(range), + std::back_inserter(container), std::move(proj)); return container; } diff --git a/naiveproxy/src/base/containers/unique_ptr_adapters.h b/naiveproxy/src/base/containers/unique_ptr_adapters.h index 6c6d1fa651..c960f7a4d6 100644 --- a/naiveproxy/src/base/containers/unique_ptr_adapters.h +++ b/naiveproxy/src/base/containers/unique_ptr_adapters.h @@ -64,7 +64,7 @@ struct UniquePtrComparator { // Example usage: // std::vector> vector; // Foo* element = ... -// auto iter = base::ranges::find_if(vector, MatchesUniquePtr(element)); +// auto iter = std::ranges::find_if(vector, MatchesUniquePtr(element)); // // Example of erasing from container: // EraseIf(v, MatchesUniquePtr(element)); diff --git a/naiveproxy/src/base/containers/vector_buffer.h b/naiveproxy/src/base/containers/vector_buffer.h index 1304daa085..24f2ca9111 100644 --- a/naiveproxy/src/base/containers/vector_buffer.h +++ b/naiveproxy/src/base/containers/vector_buffer.h @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #ifndef BASE_CONTAINERS_VECTOR_BUFFER_H_ #define BASE_CONTAINERS_VECTOR_BUFFER_H_ diff --git a/naiveproxy/src/base/cpu.cc b/naiveproxy/src/base/cpu.cc index 91e1a7124a..de92343e60 100644 --- a/naiveproxy/src/base/cpu.cc +++ b/naiveproxy/src/base/cpu.cc @@ -21,9 +21,10 @@ #include #include +#include + #include "base/files/file_util.h" #include "base/numerics/checked_math.h" -#include "base/ranges/algorithm.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_split.h" #include "base/strings/string_util.h" diff --git a/naiveproxy/src/base/debug/alias.cc b/naiveproxy/src/base/debug/alias.cc index 01c0e80095..6d89d181c1 100644 --- a/naiveproxy/src/base/debug/alias.cc +++ b/naiveproxy/src/base/debug/alias.cc @@ -6,12 +6,10 @@ #include "base/compiler_specific.h" -namespace base { -namespace debug { +namespace base::debug { // This file/function should be excluded from LTO/LTCG to ensure that the // compiler can't see this function's implementation when compiling calls to it. NOINLINE void Alias(const void* var) {} -} // namespace debug -} // namespace base +} // namespace base::debug diff --git a/naiveproxy/src/base/debug/alias.h b/naiveproxy/src/base/debug/alias.h index e473f11a57..b072ed9611 100644 --- a/naiveproxy/src/base/debug/alias.h +++ b/naiveproxy/src/base/debug/alias.h @@ -8,6 +8,7 @@ #include #include "base/base_export.h" +#include "base/compiler_specific.h" namespace base { namespace debug { @@ -88,19 +89,19 @@ BASE_EXPORT size_t wcslcpy(wchar_t* dst, const wchar_t* src, size_t dst_size); // Convenience macro that copies the null-terminated string from `c_str` into a // stack-allocated char array named `var_name` that holds up to `array_size - 1` // characters and should be preserved in memory dumps. -#define DEBUG_ALIAS_FOR_CSTR(var_name, c_str, array_size) \ - char var_name[array_size] = {}; \ - ::base::strlcpy(var_name, (c_str), std::size(var_name)); \ +#define DEBUG_ALIAS_FOR_CSTR(var_name, c_str, array_size) \ + char var_name[array_size] = {}; \ + UNSAFE_TODO(::base::strlcpy(var_name, (c_str), std::size(var_name))); \ ::base::debug::Alias(var_name) -#define DEBUG_ALIAS_FOR_U16CSTR(var_name, c_str, array_size) \ - char16_t var_name[array_size] = {}; \ - ::base::u16cstrlcpy(var_name, (c_str), std::size(var_name)); \ +#define DEBUG_ALIAS_FOR_U16CSTR(var_name, c_str, array_size) \ + char16_t var_name[array_size] = {}; \ + UNSAFE_TODO(::base::u16cstrlcpy(var_name, (c_str), std::size(var_name))); \ ::base::debug::Alias(var_name) -#define DEBUG_ALIAS_FOR_WCHARCSTR(var_name, c_str, array_size) \ - wchar_t var_name[array_size] = {}; \ - ::base::wcslcpy(var_name, (c_str), std::size(var_name)); \ +#define DEBUG_ALIAS_FOR_WCHARCSTR(var_name, c_str, array_size) \ + wchar_t var_name[array_size] = {}; \ + UNSAFE_TODO(::base::wcslcpy(var_name, (c_str), std::size(var_name))); \ ::base::debug::Alias(var_name) // Code folding is a linker optimization whereby the linker identifies functions diff --git a/naiveproxy/src/base/debug/asan_invalid_access.cc b/naiveproxy/src/base/debug/asan_invalid_access.cc index 594ce27712..a615289f0d 100644 --- a/naiveproxy/src/base/debug/asan_invalid_access.cc +++ b/naiveproxy/src/base/debug/asan_invalid_access.cc @@ -22,8 +22,7 @@ #include #endif -namespace base { -namespace debug { +namespace base::debug { namespace { @@ -107,5 +106,4 @@ void AsanCorruptHeap() { #endif // BUILDFLAG(IS_WIN) #endif // ADDRESS_SANITIZER -} // namespace debug -} // namespace base +} // namespace base::debug diff --git a/naiveproxy/src/base/debug/debugger.cc b/naiveproxy/src/base/debug/debugger.cc index a9641a82e2..4d2232ec2f 100644 --- a/naiveproxy/src/base/debug/debugger.cc +++ b/naiveproxy/src/base/debug/debugger.cc @@ -13,8 +13,7 @@ #include "base/test/clang_profiling.h" #endif -namespace base { -namespace debug { +namespace base::debug { static bool is_debug_ui_suppressed = false; @@ -53,5 +52,4 @@ bool IsDebugUISuppressed() { return is_debug_ui_suppressed; } -} // namespace debug -} // namespace base +} // namespace base::debug diff --git a/naiveproxy/src/base/debug/debugger_posix.cc b/naiveproxy/src/base/debug/debugger_posix.cc index 50a6cf70c3..eb3fcb4371 100644 --- a/naiveproxy/src/base/debug/debugger_posix.cc +++ b/naiveproxy/src/base/debug/debugger_posix.cc @@ -60,8 +60,7 @@ #include "base/third_party/symbolize/symbolize.h" // nogncheck #endif -namespace base { -namespace debug { +namespace base::debug { #if BUILDFLAG(IS_APPLE) || BUILDFLAG(IS_BSD) @@ -350,5 +349,4 @@ void BreakDebuggerAsyncSafe() { #endif } -} // namespace debug -} // namespace base +} // namespace base::debug diff --git a/naiveproxy/src/base/debug/dump_without_crashing.cc b/naiveproxy/src/base/debug/dump_without_crashing.cc index 44ff212337..05ea9e998a 100644 --- a/naiveproxy/src/base/debug/dump_without_crashing.cc +++ b/naiveproxy/src/base/debug/dump_without_crashing.cc @@ -78,9 +78,7 @@ bool ShouldDumpWithoutCrashWithLocationAndUniqueId( } // namespace -namespace base { - -namespace debug { +namespace base::debug { bool DumpWithoutCrashingUnthrottled() { TRACE_EVENT0("base", "DumpWithoutCrashingUnthrottled"); @@ -147,5 +145,4 @@ void ClearMapsForTesting() { LocationAndUniqueIdentifierToTimestampMap().clear(); } -} // namespace debug -} // namespace base +} // namespace base::debug diff --git a/naiveproxy/src/base/debug/dwarf_line_no.cc b/naiveproxy/src/base/debug/dwarf_line_no.cc index 47455eb01d..ecbc2af8a7 100644 --- a/naiveproxy/src/base/debug/dwarf_line_no.cc +++ b/naiveproxy/src/base/debug/dwarf_line_no.cc @@ -9,7 +9,6 @@ #include "base/debug/dwarf_line_no.h" -#include "partition_alloc/pointers/raw_ref.h" #ifdef USE_SYMBOLIZE #include @@ -17,6 +16,7 @@ #include #include +#include #include #include #include @@ -25,9 +25,9 @@ #include "base/debug/buffered_dwarf_reader.h" #include "base/third_party/symbolize/symbolize.h" #include "partition_alloc/pointers/raw_ptr.h" +#include "partition_alloc/pointers/raw_ref.h" -namespace base { -namespace debug { +namespace base::debug { namespace { @@ -1339,7 +1339,7 @@ void GetDwarfCompileUnitOffsets(const void* const* trace, uint64_t* cu_offsets, size_t num_frames) { // LINT.IfChange(max_stack_frames) - FrameInfo frame_info[250] = {}; + std::array frame_info = {}; // LINT.ThenChange(stack_trace.h:max_stack_frames) for (size_t i = 0; i < num_frames; i++) { // The `cu_offset` also encodes the original sort order. @@ -1382,8 +1382,7 @@ void GetDwarfCompileUnitOffsets(const void* const* trace, } } -} // namespace debug -} // namespace base +} // namespace base::debug #else // USE_SYMBOLIZE diff --git a/naiveproxy/src/base/debug/elf_reader.cc b/naiveproxy/src/base/debug/elf_reader.cc index 88a82c5d3c..2d4cf7f1e0 100644 --- a/naiveproxy/src/base/debug/elf_reader.cc +++ b/naiveproxy/src/base/debug/elf_reader.cc @@ -26,8 +26,7 @@ // must avoid dynamic memory allocation or using data structures which rely on // dynamic allocation. -namespace base { -namespace debug { +namespace base::debug { namespace { // See https://refspecs.linuxbase.org/elf/elf.pdf for the ELF specification. @@ -159,7 +158,7 @@ std::optional ReadElfLibraryName( const Dyn* dynamic_end = reinterpret_cast( header.p_vaddr + relocation_offset + header.p_memsz); Xword soname_strtab_offset = 0; - const char* strtab_addr = 0; + const char* strtab_addr = nullptr; for (const Dyn* dynamic_iter = dynamic_start; dynamic_iter < dynamic_end; ++dynamic_iter) { if (dynamic_iter->d_tag == DT_STRTAB) { @@ -219,5 +218,4 @@ size_t GetRelocationOffset(const void* elf_mapped_base) { reinterpret_cast(nullptr)); } -} // namespace debug -} // namespace base +} // namespace base::debug diff --git a/naiveproxy/src/base/debug/gdi_debug_util_win.cc b/naiveproxy/src/base/debug/gdi_debug_util_win.cc index 4b7af1ac16..047717e980 100644 --- a/naiveproxy/src/base/debug/gdi_debug_util_win.cc +++ b/naiveproxy/src/base/debug/gdi_debug_util_win.cc @@ -18,6 +18,7 @@ #include "base/logging.h" #include "base/notreached.h" #include "base/process/process.h" +#include "base/win/scoped_gdi_object.h" #include "base/win/scoped_handle.h" #include "base/win/win_util.h" #include "base/win/windows_version.h" @@ -355,11 +356,10 @@ NOINLINE void CrashIfCannotAllocateSmallBitmap(BITMAPINFOHEADER* header, base::debug::Alias(&small_data); header->biWidth = 5; header->biHeight = -5; - HBITMAP small_bitmap = + base::win::ScopedGDIObject small_bitmap( CreateDIBSection(nullptr, reinterpret_cast(&header), 0, - &small_data, shared_section, 0); - CHECK(small_bitmap != nullptr); - DeleteObject(small_bitmap); + &small_data, shared_section, 0)); + CHECK(small_bitmap.is_valid()); } NOINLINE void GetProcessMemoryInfo(PROCESS_MEMORY_COUNTERS_EX* pmc) { diff --git a/naiveproxy/src/base/debug/profiler.cc b/naiveproxy/src/base/debug/profiler.cc index a6d77ceaf0..7a0f4e2837 100644 --- a/naiveproxy/src/base/debug/profiler.cc +++ b/naiveproxy/src/base/debug/profiler.cc @@ -14,8 +14,7 @@ #include "base/win/pe_image.h" #endif // BUILDFLAG(IS_WIN) -namespace base { -namespace debug { +namespace base::debug { void StartProfiling(const std::string& name) {} @@ -122,5 +121,4 @@ MoveDynamicSymbol GetProfilerMoveDynamicSymbolFunc() { #endif // BUILDFLAG(IS_WIN) -} // namespace debug -} // namespace base +} // namespace base::debug diff --git a/naiveproxy/src/base/debug/stack_trace.cc b/naiveproxy/src/base/debug/stack_trace.cc index 56ff57edab..3cea43f04f 100644 --- a/naiveproxy/src/base/debug/stack_trace.cc +++ b/naiveproxy/src/base/debug/stack_trace.cc @@ -35,8 +35,7 @@ extern "C" void* __libc_stack_end; #endif // BUILDFLAG(CAN_UNWIND_WITH_FRAME_POINTERS) -namespace base { -namespace debug { +namespace base::debug { namespace { @@ -446,5 +445,4 @@ ScopedStackFrameLinker::~ScopedStackFrameLinker() { #endif // BUILDFLAG(CAN_UNWIND_WITH_FRAME_POINTERS) -} // namespace debug -} // namespace base +} // namespace base::debug diff --git a/naiveproxy/src/base/debug/stack_trace_posix.cc b/naiveproxy/src/base/debug/stack_trace_posix.cc index 3e93484c20..eedb30510a 100644 --- a/naiveproxy/src/base/debug/stack_trace_posix.cc +++ b/naiveproxy/src/base/debug/stack_trace_posix.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "base/debug/stack_trace.h" #include @@ -687,7 +692,7 @@ class SandboxSymbolizeHelper { private: friend struct DefaultSingletonTraits; - SandboxSymbolizeHelper() : is_initialized_(false) { Init(); } + SandboxSymbolizeHelper() { Init(); } ~SandboxSymbolizeHelper() { UnregisterCallback(); @@ -963,7 +968,7 @@ class SandboxSymbolizeHelper { } // Set to true upon successful initialization. - bool is_initialized_; + bool is_initialized_ = false; #if !defined(OFFICIAL_BUILD) || !defined(NO_UNWIND_TABLES) // Mapping from file name to file descriptor. Includes file descriptors diff --git a/naiveproxy/src/base/debug/stack_trace_win.cc b/naiveproxy/src/base/debug/stack_trace_win.cc index f065de4118..1a5e3d64dd 100644 --- a/naiveproxy/src/base/debug/stack_trace_win.cc +++ b/naiveproxy/src/base/debug/stack_trace_win.cc @@ -17,7 +17,6 @@ #include "base/files/file_path.h" #include "base/logging.h" #include "base/memory/singleton.h" -#include "base/ranges/algorithm.h" #include "base/strings/strcat_win.h" #include "base/strings/string_util.h" #include "base/synchronization/lock.h" @@ -338,7 +337,7 @@ StackTrace::StackTrace(const CONTEXT* context) { void StackTrace::InitTrace(const CONTEXT* context_record) { if (ShouldSuppressOutput()) { CHECK_EQ(count_, 0U); - base::ranges::fill(trace_, nullptr); + std::ranges::fill(trace_, nullptr); return; } @@ -383,7 +382,7 @@ void StackTrace::InitTrace(const CONTEXT* context_record) { trace_[count_++] = reinterpret_cast(stack_frame.AddrPC.Offset); } - base::ranges::fill(span(trace_).last(trace_.size() - count_), nullptr); + std::ranges::fill(span(trace_).last(trace_.size() - count_), nullptr); } // static diff --git a/naiveproxy/src/base/debug/task_trace.cc b/naiveproxy/src/base/debug/task_trace.cc index 442257d684..eda255e693 100644 --- a/naiveproxy/src/base/debug/task_trace.cc +++ b/naiveproxy/src/base/debug/task_trace.cc @@ -9,7 +9,6 @@ #include #include "base/pending_task.h" -#include "base/ranges/algorithm.h" #include "base/task/common/task_annotator.h" #include "build/build_config.h" @@ -19,8 +18,7 @@ #include "base/no_destructor.h" #endif // BUILDFLAG(IS_ANDROID) -namespace base { -namespace debug { +namespace base::debug { namespace { #if BUILDFLAG(IS_ANDROID) // Android sends stdout and stderr to /dev/null; logging should be done through @@ -54,7 +52,7 @@ TaskTrace::TaskTrace() { } std::array task_trace; task_trace[0] = current_task->posted_from.program_counter(); - ranges::copy(current_task->task_backtrace, task_trace.begin() + 1); + std::ranges::copy(current_task->task_backtrace, task_trace.begin() + 1); size_t length = 0; while (length < task_trace.size() && task_trace[length]) { ++length; @@ -100,9 +98,10 @@ size_t TaskTrace::GetAddresses(span addresses) const { return count; } span current_addresses = stack_trace_->addresses(); - ranges::copy_n(current_addresses.begin(), - std::min(current_addresses.size(), addresses.size()), - addresses.begin()); + std::ranges::copy_n(current_addresses.begin(), + static_cast( + std::min(current_addresses.size(), addresses.size())), + addresses.begin()); return current_addresses.size(); } @@ -111,5 +110,4 @@ std::ostream& operator<<(std::ostream& os, const TaskTrace& task_trace) { return os; } -} // namespace debug -} // namespace base +} // namespace base::debug diff --git a/naiveproxy/src/base/features.cc b/naiveproxy/src/base/features.cc index aaa4132300..b57312df11 100644 --- a/naiveproxy/src/base/features.cc +++ b/naiveproxy/src/base/features.cc @@ -52,12 +52,19 @@ BASE_FEATURE(kUseRustJsonParser, // If true, use the Rust JSON parser in-thread; otherwise, it runs in a thread // pool. -const base::FeatureParam kUseRustJsonParserInCurrentSequence{ - &kUseRustJsonParser, "UseRustJsonParserInCurrentSequence", false}; +BASE_FEATURE_PARAM(bool, + kUseRustJsonParserInCurrentSequence, + &kUseRustJsonParser, + "UseRustJsonParserInCurrentSequence", + false); // Use non default low memory device threshold. // Value should be given via |LowMemoryDeviceThresholdMB|. -#if BUILDFLAG(IS_IOS) +#if BUILDFLAG(IS_ANDROID) +// LINT.IfChange +#define LOW_MEMORY_DEVICE_THRESHOLD_MB 1024 +// LINT.ThenChange(//base/android/java/src/org/chromium/base/SysUtils.java) +#elif BUILDFLAG(IS_IOS) // For M99, 45% of devices have 2GB of RAM, and 55% have more. #define LOW_MEMORY_DEVICE_THRESHOLD_MB 1024 #else @@ -67,9 +74,11 @@ const base::FeatureParam kUseRustJsonParserInCurrentSequence{ BASE_FEATURE(kLowEndMemoryExperiment, "LowEndMemoryExperiment", FEATURE_DISABLED_BY_DEFAULT); -const base::FeatureParam kLowMemoryDeviceThresholdMB{ - &kLowEndMemoryExperiment, "LowMemoryDeviceThresholdMB", - LOW_MEMORY_DEVICE_THRESHOLD_MB}; +BASE_FEATURE_PARAM(size_t, + kLowMemoryDeviceThresholdMB, + &kLowEndMemoryExperiment, + "LowMemoryDeviceThresholdMB", + LOW_MEMORY_DEVICE_THRESHOLD_MB); #if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_CHROMEOS) // Force to enable LowEndDeviceMode partially on Android 3Gb devices. diff --git a/naiveproxy/src/base/features.h b/naiveproxy/src/base/features.h index c2bf772de2..7b68c70114 100644 --- a/naiveproxy/src/base/features.h +++ b/naiveproxy/src/base/features.h @@ -19,12 +19,12 @@ BASE_EXPORT BASE_DECLARE_FEATURE(kFeatureParamWithCache); BASE_EXPORT BASE_DECLARE_FEATURE(kUseRustJsonParser); -BASE_EXPORT extern const base::FeatureParam - kUseRustJsonParserInCurrentSequence; +BASE_EXPORT BASE_DECLARE_FEATURE_PARAM(bool, + kUseRustJsonParserInCurrentSequence); BASE_EXPORT BASE_DECLARE_FEATURE(kLowEndMemoryExperiment); -BASE_EXPORT extern const base::FeatureParam kLowMemoryDeviceThresholdMB; +BASE_EXPORT BASE_DECLARE_FEATURE_PARAM(size_t, kLowMemoryDeviceThresholdMB); #if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_CHROMEOS) BASE_EXPORT BASE_DECLARE_FEATURE(kPartialLowEndModeOn3GbDevices); diff --git a/naiveproxy/src/base/files/drive_info_posix.cc b/naiveproxy/src/base/files/drive_info_posix.cc index 63c989edfb..17aaa60376 100644 --- a/naiveproxy/src/base/files/drive_info_posix.cc +++ b/naiveproxy/src/base/files/drive_info_posix.cc @@ -12,6 +12,7 @@ #include "base/files/file_util.h" #include "base/files/scoped_file.h" #include "base/strings/string_number_conversions.h" +#include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "build/build_config.h" @@ -30,6 +31,7 @@ std::optional GetFileDriveInfo(const FilePath& file_path) { constexpr char kRotationalFormat[] = "/sys/dev/block/%lu:%lu/queue/rotational"; constexpr char kRemovableFormat[] = "/sys/dev/block/%lu:%lu/removable"; + constexpr char kDeviceFormat[] = "/sys/dev/block/%lu:%lu"; constexpr char kSizeFormat[] = "/sys/dev/block/%lu:%lu/size"; File file(file_path, File::FLAG_OPEN | File::FLAG_READ); if (!file.IsValid()) { @@ -49,22 +51,48 @@ std::optional GetFileDriveInfo(const FilePath& file_path) { std::string size_path = StringPrintf(kSizeFormat, MAJOR(path_stat.st_dev), MINOR(path_stat.st_dev)); + // Depending on the device, partitions may not expose the desired info. In the + // case when reading the device returned by Fstat() fails in both the + // rotational and removable attributes, attempt to crawl up one directory in + // the sysfs absolute path for the partition which was queried, which should + // give the device which contains this partition, and which should contain the + // desired info in the case where that info is not exposed for the partition + // itself. std::string rotates; - if (ReadFileToString(base::FilePath(rotational_path), &rotates) && - rotates.length() == 1 && (rotates[0] == '0' || rotates[0] == '1')) { - drive_info.has_seek_penalty = rotates[0] == '1'; + std::string removable; + bool rotates_read = ReadFileToString(FilePath(rotational_path), &rotates); + bool removable_read = ReadFileToString(FilePath(removable_path), &removable); + + if (!rotates_read && !removable_read) { + std::string device_path = StringPrintf( + kDeviceFormat, MAJOR(path_stat.st_dev), MINOR(path_stat.st_dev)); + FilePath parent_device_path = + MakeAbsoluteFilePath(FilePath(device_path)).DirName(); + rotates_read = ReadFileToString( + parent_device_path.Append("queue/rotational"), &rotates); + removable_read = + ReadFileToString(parent_device_path.Append("removable"), &removable); } - std::string removable; - if (ReadFileToString(base::FilePath(removable_path), &removable) && - removable.length() == 1 && (removable[0] == '0' || removable[0] == '1')) { - drive_info.is_removable = removable[0] == '1'; + if (rotates_read) { + rotates = TrimString(rotates, "\n", TrimPositions::TRIM_TRAILING); + if (rotates.length() == 1 && (rotates[0] == '0' || rotates[0] == '1')) { + drive_info.has_seek_penalty = rotates[0] == '1'; + } + } + if (removable_read) { + removable = TrimString(removable, "\n", TrimPositions::TRIM_TRAILING); + if (removable.length() == 1 && + (removable[0] == '0' || removable[0] == '1')) { + drive_info.is_removable = removable[0] == '1'; + } } std::string size; uint64_t bytes; if (ReadFileToString(FilePath(size_path), &size) && - StringToUint64(size, &bytes)) { + StringToUint64(TrimString(size, "\n", TrimPositions::TRIM_TRAILING), + &bytes)) { drive_info.size_bytes = bytes; } diff --git a/naiveproxy/src/base/files/file_enumerator_posix.cc b/naiveproxy/src/base/files/file_enumerator_posix.cc index a361f4e6e8..76a84bf524 100644 --- a/naiveproxy/src/base/files/file_enumerator_posix.cc +++ b/naiveproxy/src/base/files/file_enumerator_posix.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "base/files/file_enumerator.h" #include diff --git a/naiveproxy/src/base/files/file_path.cc b/naiveproxy/src/base/files/file_path.cc index 0329da8fb9..ff2ac1f266 100644 --- a/naiveproxy/src/base/files/file_path.cc +++ b/naiveproxy/src/base/files/file_path.cc @@ -18,7 +18,6 @@ #include "base/files/safe_base_name.h" #include "base/numerics/safe_conversions.h" #include "base/pickle.h" -#include "base/ranges/algorithm.h" #include "base/strings/strcat.h" #include "base/strings/string_util.h" #include "base/strings/sys_string_conversions.h" @@ -42,7 +41,7 @@ namespace base { using StringType = FilePath::StringType; -using StringPieceType = FilePath::StringPieceType; +using StringViewType = FilePath::StringViewType; namespace { @@ -57,7 +56,7 @@ const FilePath::CharType kStringTerminator = FILE_PATH_LITERAL('\0'); // otherwise returns npos. This can only be true on Windows, when a pathname // begins with a letter followed by a colon. On other platforms, this always // returns npos. -StringPieceType::size_type FindDriveLetter(StringPieceType path) { +StringViewType::size_type FindDriveLetter(StringViewType path) { #if defined(FILE_PATH_USES_DRIVE_LETTERS) // This is dependent on an ASCII-based character set, but that's a // reasonable assumption. iswalpha can be too inclusive here. @@ -71,7 +70,7 @@ StringPieceType::size_type FindDriveLetter(StringPieceType path) { } #if defined(FILE_PATH_USES_DRIVE_LETTERS) -bool EqualDriveLetterCaseInsensitive(StringPieceType a, StringPieceType b) { +bool EqualDriveLetterCaseInsensitive(StringViewType a, StringViewType b) { size_t a_letter_pos = FindDriveLetter(a); size_t b_letter_pos = FindDriveLetter(b); @@ -79,19 +78,19 @@ bool EqualDriveLetterCaseInsensitive(StringPieceType a, StringPieceType b) { return a == b; } - StringPieceType a_letter(a.substr(0, a_letter_pos + 1)); - StringPieceType b_letter(b.substr(0, b_letter_pos + 1)); + StringViewType a_letter(a.substr(0, a_letter_pos + 1)); + StringViewType b_letter(b.substr(0, b_letter_pos + 1)); if (!StartsWith(a_letter, b_letter, CompareCase::INSENSITIVE_ASCII)) { return false; } - StringPieceType a_rest(a.substr(a_letter_pos + 1)); - StringPieceType b_rest(b.substr(b_letter_pos + 1)); + StringViewType a_rest(a.substr(a_letter_pos + 1)); + StringViewType b_rest(b.substr(b_letter_pos + 1)); return a_rest == b_rest; } #endif // defined(FILE_PATH_USES_DRIVE_LETTERS) -bool IsPathAbsolute(StringPieceType path) { +bool IsPathAbsolute(StringViewType path) { #if defined(FILE_PATH_USES_DRIVE_LETTERS) StringType::size_type letter = FindDriveLetter(path); if (letter != StringType::npos) { @@ -192,7 +191,7 @@ FilePath::FilePath() = default; FilePath::FilePath(const FilePath& that) = default; FilePath::FilePath(FilePath&& that) noexcept = default; -FilePath::FilePath(StringPieceType path) : path_(path) { +FilePath::FilePath(StringViewType path) : path_(path) { StringType::size_type nul_pos = path_.find(kStringTerminator); if (nul_pos != StringType::npos) { path_.erase(nul_pos, StringType::npos); @@ -213,14 +212,6 @@ bool FilePath::operator==(const FilePath& that) const { #endif // defined(FILE_PATH_USES_DRIVE_LETTERS) } -bool FilePath::operator!=(const FilePath& that) const { -#if defined(FILE_PATH_USES_DRIVE_LETTERS) - return !EqualDriveLetterCaseInsensitive(this->path_, that.path_); -#else // defined(FILE_PATH_USES_DRIVE_LETTERS) - return path_ != that.path_; -#endif // defined(FILE_PATH_USES_DRIVE_LETTERS) -} - std::ostream& operator<<(std::ostream& out, const FilePath& file_path) { return out << file_path.value(); } @@ -267,7 +258,7 @@ std::vector FilePath::GetComponents() const { ret_val.emplace_back(dir.value(), 0, letter + 1); } - ranges::reverse(ret_val); + std::ranges::reverse(ret_val); return ret_val; } @@ -451,7 +442,7 @@ FilePath FilePath::RemoveFinalExtension() const { return FilePath(path_.substr(0, dot)); } -FilePath FilePath::InsertBeforeExtension(StringPieceType suffix) const { +FilePath FilePath::InsertBeforeExtension(StringViewType suffix) const { if (suffix.empty()) { return FilePath(path_); } @@ -473,7 +464,7 @@ FilePath FilePath::InsertBeforeExtensionASCII(std::string_view suffix) const { #endif } -FilePath FilePath::AddExtension(StringPieceType extension) const { +FilePath FilePath::AddExtension(StringViewType extension) const { if (IsEmptyOrSpecialCase(BaseName().value())) { return FilePath(); } @@ -502,7 +493,7 @@ FilePath FilePath::AddExtensionASCII(std::string_view extension) const { #endif } -FilePath FilePath::ReplaceExtension(StringPieceType extension) const { +FilePath FilePath::ReplaceExtension(StringViewType extension) const { if (IsEmptyOrSpecialCase(BaseName().value())) { return FilePath(); } @@ -522,7 +513,7 @@ FilePath FilePath::ReplaceExtension(StringPieceType extension) const { return FilePath(str); } -bool FilePath::MatchesExtension(StringPieceType extension) const { +bool FilePath::MatchesExtension(StringViewType extension) const { DCHECK(extension.empty() || extension[0] == kExtensionSeparator); StringType current_extension = Extension(); @@ -534,7 +525,7 @@ bool FilePath::MatchesExtension(StringPieceType extension) const { return FilePath::CompareEqualIgnoreCase(extension, current_extension); } -bool FilePath::MatchesFinalExtension(StringPieceType extension) const { +bool FilePath::MatchesFinalExtension(StringViewType extension) const { DCHECK(extension.empty() || extension[0] == kExtensionSeparator); StringType current_final_extension = FinalExtension(); @@ -546,14 +537,14 @@ bool FilePath::MatchesFinalExtension(StringPieceType extension) const { return FilePath::CompareEqualIgnoreCase(extension, current_final_extension); } -FilePath FilePath::Append(StringPieceType component) const { - StringPieceType appended = component; +FilePath FilePath::Append(StringViewType component) const { + StringViewType appended = component; StringType without_nuls; StringType::size_type nul_pos = component.find(kStringTerminator); - if (nul_pos != StringPieceType::npos) { + if (nul_pos != StringViewType::npos) { without_nuls = StringType(component.substr(0, nul_pos)); - appended = StringPieceType(without_nuls); + appended = StringViewType(without_nuls); } DCHECK(!IsPathAbsolute(appended)); @@ -793,8 +784,8 @@ bool FilePath::ReadFromPickle(PickleIterator* iter) { #if BUILDFLAG(IS_WIN) // Windows specific implementation of file string comparisons. -int FilePath::CompareIgnoreCase(StringPieceType string1, - StringPieceType string2) { +int FilePath::CompareIgnoreCase(StringViewType string1, + StringViewType string2) { // CharUpperW within user32 is used here because it will provide unicode // conversions regardless of locale. The STL alternative, towupper, has a // locale consideration that prevents it from converting all characters by @@ -803,10 +794,10 @@ int FilePath::CompareIgnoreCase(StringPieceType string1, // Perform character-wise upper case comparison rather than using the // fully Unicode-aware CompareString(). For details see: // http://blogs.msdn.com/michkap/archive/2005/10/17/481600.aspx - StringPieceType::const_iterator i1 = string1.begin(); - StringPieceType::const_iterator i2 = string2.begin(); - StringPieceType::const_iterator string1end = string1.end(); - StringPieceType::const_iterator string2end = string2.end(); + StringViewType::const_iterator i1 = string1.begin(); + StringViewType::const_iterator i2 = string2.begin(); + StringViewType::const_iterator string1end = string1.end(); + StringViewType::const_iterator string2end = string2.end(); for (; i1 != string1end && i2 != string2end; ++i1, ++i2) { wchar_t c1 = (wchar_t)LOWORD(::CharUpperW((LPWSTR)(DWORD_PTR)MAKELONG(*i1, 0))); @@ -1288,8 +1279,8 @@ inline base_icu::UChar32 HFSReadNextNonIgnorableCodepoint(const char* string, // Special UTF-8 version of FastUnicodeCompare. Cf: // http://developer.apple.com/mac/library/technotes/tn/tn1150.html#StringComparisonAlgorithm // The input strings must be in the special HFS decomposed form. -int FilePath::HFSFastUnicodeCompare(StringPieceType string1, - StringPieceType string2) { +int FilePath::HFSFastUnicodeCompare(StringViewType string1, + StringViewType string2) { size_t length1 = string1.length(); size_t length2 = string2.length(); size_t index1 = 0; @@ -1311,7 +1302,7 @@ int FilePath::HFSFastUnicodeCompare(StringPieceType string1, } } -StringType FilePath::GetHFSDecomposedForm(StringPieceType string) { +StringType FilePath::GetHFSDecomposedForm(StringViewType string) { apple::ScopedCFTypeRef cfstring(CFStringCreateWithBytesNoCopy( nullptr, reinterpret_cast(string.data()), checked_cast(string.length()), kCFStringEncodingUTF8, false, @@ -1347,8 +1338,8 @@ StringType FilePath::GetHFSDecomposedForm(CFStringRef cfstring) { return result; } -int FilePath::CompareIgnoreCase(StringPieceType string1, - StringPieceType string2) { +int FilePath::CompareIgnoreCase(StringViewType string1, + StringViewType string2) { // Quick checks for empty strings - these speed things up a bit and make the // following code cleaner. if (string1.empty()) { @@ -1396,8 +1387,8 @@ int FilePath::CompareIgnoreCase(StringPieceType string1, #elif BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA) // Generic Posix system comparisons. -int FilePath::CompareIgnoreCase(StringPieceType string1, - StringPieceType string2) { +int FilePath::CompareIgnoreCase(StringViewType string1, + StringViewType string2) { size_t rlen = std::min(string1.size(), string2.size()); int comparison = strncasecmp(string1.data(), string2.data(), rlen); if (comparison < 0 || (comparison == 0 && string1.size() < string2.size())) { diff --git a/naiveproxy/src/base/files/file_path.h b/naiveproxy/src/base/files/file_path.h index 136ba9f7ea..d16d2f7dca 100644 --- a/naiveproxy/src/base/files/file_path.h +++ b/naiveproxy/src/base/files/file_path.h @@ -146,7 +146,7 @@ #endif // BUILDFLAG(IS_WIN) #if BUILDFLAG(IS_APPLE) -typedef const struct __CFString* CFStringRef; +using CFStringRef = const struct __CFString*; #endif namespace base { @@ -162,16 +162,19 @@ class BASE_EXPORT FilePath { #if BUILDFLAG(IS_WIN) // On Windows, for Unicode-aware applications, native pathnames are wchar_t // arrays encoded in UTF-16. - typedef std::wstring StringType; + using StringType = std::wstring; #elif BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA) // On most platforms, native pathnames are char arrays, and the encoding // may or may not be specified. On Mac OS X, native pathnames are encoded // in UTF-8. - typedef std::string StringType; + using StringType = std::string; #endif // BUILDFLAG(IS_WIN) - typedef StringType::value_type CharType; - typedef std::basic_string_view StringPieceType; + using CharType = StringType::value_type; + using StringViewType = std::basic_string_view; + // DEPRECATED. Use `StringViewType` in new code. + // TODO(thestig): Remove. + using StringPieceType = StringViewType; // Null-terminated array of separators used to separate components in paths. // Each character in this array is a valid separator, but kSeparators[0] is @@ -198,7 +201,7 @@ class BASE_EXPORT FilePath { FilePath(); FilePath(const FilePath& that); - explicit FilePath(StringPieceType path); + explicit FilePath(StringViewType path); ~FilePath(); FilePath& operator=(const FilePath& that); @@ -209,12 +212,12 @@ class BASE_EXPORT FilePath { // unspecified state. FilePath& operator=(FilePath&& that) noexcept; + // On systems which use drive letters, the drive letters are compared + // case-insensitively. bool operator==(const FilePath& that) const; - bool operator!=(const FilePath& that) const; - // Required for some STL containers and operations - bool operator<(const FilePath& that) const { return path_ < that.path_; } + auto operator<=>(const FilePath& that) const = default; const StringType& value() const LIFETIME_BOUND { return path_; } @@ -325,13 +328,13 @@ class BASE_EXPORT FilePath { // path == "jojo.jpg" suffix == " (1)", returns "jojo (1).jpg" // path == "C:\pics\jojo" suffix == " (1)", returns "C:\pics\jojo (1)" // path == "C:\pics.old\jojo" suffix == " (1)", returns "C:\pics.old\jojo (1)" - [[nodiscard]] FilePath InsertBeforeExtension(StringPieceType suffix) const; + [[nodiscard]] FilePath InsertBeforeExtension(StringViewType suffix) const; [[nodiscard]] FilePath InsertBeforeExtensionASCII( std::string_view suffix) const; // Adds |extension| to |file_name|. Returns the current FilePath if // |extension| is empty. Returns "" if BaseName() == "." or "..". - [[nodiscard]] FilePath AddExtension(StringPieceType extension) const; + [[nodiscard]] FilePath AddExtension(StringViewType extension) const; // Like above, but takes the extension as an ASCII string. See AppendASCII for // details on how this is handled. @@ -341,15 +344,15 @@ class BASE_EXPORT FilePath { // does not have an extension, then |extension| is added. If |extension| is // empty, then the extension is removed from |file_name|. // Returns "" if BaseName() == "." or "..". - [[nodiscard]] FilePath ReplaceExtension(StringPieceType extension) const; + [[nodiscard]] FilePath ReplaceExtension(StringViewType extension) const; // Returns true if file path's Extension() matches `extension`. The test is // case insensitive. Don't forget the leading period if appropriate. - bool MatchesExtension(StringPieceType extension) const; + bool MatchesExtension(StringViewType extension) const; // Returns true if file path's FinalExtension() matches `extension`. The // test is case insensitive. Don't forget the leading period if appropriate. - bool MatchesFinalExtension(StringPieceType extension) const; + bool MatchesFinalExtension(StringViewType extension) const; // Returns a FilePath by appending a separator and the supplied path // component to this object's path. Append takes care to avoid adding @@ -357,7 +360,7 @@ class BASE_EXPORT FilePath { // If this object's path is kCurrentDirectory ('.'), a new FilePath // corresponding only to |component| is returned. |component| must be a // relative path; it is an error to pass an absolute path. - [[nodiscard]] FilePath Append(StringPieceType component) const; + [[nodiscard]] FilePath Append(StringViewType component) const; [[nodiscard]] FilePath Append(const FilePath& component) const; [[nodiscard]] FilePath Append(const SafeBaseName& component) const; @@ -458,14 +461,13 @@ class BASE_EXPORT FilePath { // on parts of a file path, e.g., just the extension. // CompareIgnoreCase() returns -1, 0 or 1 for less-than, equal-to and // greater-than respectively. - static int CompareIgnoreCase(StringPieceType string1, - StringPieceType string2); - static bool CompareEqualIgnoreCase(StringPieceType string1, - StringPieceType string2) { + static int CompareIgnoreCase(StringViewType string1, StringViewType string2); + static bool CompareEqualIgnoreCase(StringViewType string1, + StringViewType string2) { return CompareIgnoreCase(string1, string2) == 0; } - static bool CompareLessIgnoreCase(StringPieceType string1, - StringPieceType string2) { + static bool CompareLessIgnoreCase(StringViewType string1, + StringViewType string2) { return CompareIgnoreCase(string1, string2) < 0; } @@ -478,15 +480,15 @@ class BASE_EXPORT FilePath { // http://developer.apple.com/mac/library/technotes/tn/tn1150.html#UnicodeSubtleties // for further comments. // Returns the empty string if the conversion failed. - static StringType GetHFSDecomposedForm(StringPieceType string); + static StringType GetHFSDecomposedForm(StringViewType string); static StringType GetHFSDecomposedForm(CFStringRef cfstring); // Special UTF-8 version of FastUnicodeCompare. Cf: // http://developer.apple.com/mac/library/technotes/tn/tn1150.html#StringComparisonAlgorithm // IMPORTANT: The input strings must be in the special HFS decomposed form! // (cf. above GetHFSDecomposedForm method) - static int HFSFastUnicodeCompare(StringPieceType string1, - StringPieceType string2); + static int HFSFastUnicodeCompare(StringViewType string1, + StringViewType string2); #endif #if BUILDFLAG(IS_ANDROID) diff --git a/naiveproxy/src/base/files/file_path_watcher_kqueue.cc b/naiveproxy/src/base/files/file_path_watcher_kqueue.cc index db52862fb4..2387e95a42 100644 --- a/naiveproxy/src/base/files/file_path_watcher_kqueue.cc +++ b/naiveproxy/src/base/files/file_path_watcher_kqueue.cc @@ -13,6 +13,7 @@ #include #include +#include #include #include @@ -20,7 +21,6 @@ #include "base/files/file_util.h" #include "base/functional/bind.h" #include "base/logging.h" -#include "base/ranges/algorithm.h" #include "base/strings/stringprintf.h" #include "base/task/sequenced_task_runner.h" #include "base/threading/scoped_blocking_call.h" @@ -332,7 +332,7 @@ void FilePathWatcherKQueue::Cancel() { DPLOG(ERROR) << "close kqueue"; } kqueue_ = -1; - base::ranges::for_each(events_, ReleaseEvent); + std::ranges::for_each(events_, ReleaseEvent); events_.clear(); callback_.Reset(); } diff --git a/naiveproxy/src/base/files/file_util.cc b/naiveproxy/src/base/files/file_util.cc index 6211201ecb..30bdcc0cb8 100644 --- a/naiveproxy/src/base/files/file_util.cc +++ b/naiveproxy/src/base/files/file_util.cc @@ -20,6 +20,7 @@ #endif #include +#include #include #include #include @@ -35,9 +36,8 @@ #include "base/functional/function_ref.h" #include "base/notreached.h" #include "base/posix/eintr_wrapper.h" -#include "base/ranges/algorithm.h" +#include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" -#include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" #include "base/task/bind_post_task.h" #include "base/threading/scoped_blocking_call.h" @@ -504,15 +504,17 @@ FilePath GetUniquePath(const FilePath& path) { FilePath GetUniquePathWithSuffixFormat(const FilePath& path, base::cstring_view suffix_format) { DCHECK(!path.empty()); - DCHECK_EQ(base::ranges::count(suffix_format, '%'), 1); + DCHECK_EQ(std::ranges::count(suffix_format, '%'), 1); DCHECK(base::Contains(suffix_format, "%d")); if (!PathExists(path)) { return path; } for (int count = 1; count <= kMaxUniqueFiles; ++count) { - FilePath candidate_path = path.InsertBeforeExtensionASCII( - StringPrintfNonConstexpr(suffix_format.data(), count)); + std::string suffix(suffix_format); + base::ReplaceFirstSubstringAfterOffset(&suffix, 0, "%d", + base::NumberToString(count)); + FilePath candidate_path = path.InsertBeforeExtensionASCII(suffix); if (!PathExists(candidate_path)) { return candidate_path; } diff --git a/naiveproxy/src/base/files/file_util_posix.cc b/naiveproxy/src/base/files/file_util_posix.cc index c1f484b144..84df1596ef 100644 --- a/naiveproxy/src/base/files/file_util_posix.cc +++ b/naiveproxy/src/base/files/file_util_posix.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "base/files/file_util.h" #include diff --git a/naiveproxy/src/base/files/file_util_win.cc b/naiveproxy/src/base/files/file_util_win.cc index 60d2bd454a..0ddf273c9a 100644 --- a/naiveproxy/src/base/files/file_util_win.cc +++ b/naiveproxy/src/base/files/file_util_win.cc @@ -920,15 +920,24 @@ bool GetFileInfo(const FilePath& file_path, File::Info* results) { return false; } - ULARGE_INTEGER size; - size.HighPart = attr.nFileSizeHigh; - size.LowPart = attr.nFileSizeLow; - // TODO(crbug.com/40227936): Change Info::size to uint64_t and eliminate this - // cast. - results->size = checked_cast(size.QuadPart); - results->is_directory = (attr.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0; + + // According to + // https://learn.microsoft.com/en-us/windows/win32/api/fileapi/ns-fileapi-win32_file_attribute_data + // both attr.nFileSizeHigh and attr.nFileSizeLow are meaningless if the file + // is a directory. + if (results->is_directory) { + results->size = 0; + } else { + ULARGE_INTEGER size; + size.HighPart = attr.nFileSizeHigh; + size.LowPart = attr.nFileSizeLow; + // TODO(crbug.com/40227936): Change Info::size to uint64_t and eliminate + // this cast. + results->size = checked_cast(size.QuadPart); + } + results->last_modified = Time::FromFileTime(attr.ftLastWriteTime); results->last_accessed = Time::FromFileTime(attr.ftLastAccessTime); results->creation_time = Time::FromFileTime(attr.ftCreationTime); diff --git a/naiveproxy/src/base/files/important_file_writer_cleaner.cc b/naiveproxy/src/base/files/important_file_writer_cleaner.cc index 631c1f40e8..6d69b9a2e8 100644 --- a/naiveproxy/src/base/files/important_file_writer_cleaner.cc +++ b/naiveproxy/src/base/files/important_file_writer_cleaner.cc @@ -179,9 +179,7 @@ bool ImportantFileWriterCleaner::CleanInBackground( std::vector directories, std::atomic_bool& stop_flag) { DCHECK(!directories.empty()); - for (auto scan = directories.begin(), end = directories.end(); scan != end; - ++scan) { - const auto& directory = *scan; + for (auto& directory : directories) { FileEnumerator file_enum( directory, /*recursive=*/false, FileEnumerator::FILES, FormatTemporaryFileName(FILE_PATH_LITERAL("*")).value()); diff --git a/naiveproxy/src/base/functional/bind_internal.h b/naiveproxy/src/base/functional/bind_internal.h index 526a391309..4df9045407 100644 --- a/naiveproxy/src/base/functional/bind_internal.h +++ b/naiveproxy/src/base/functional/bind_internal.h @@ -22,7 +22,6 @@ #include "base/memory/raw_ptr_asan_bound_arg_tracker.h" #include "base/memory/raw_ref.h" #include "base/memory/weak_ptr.h" -#include "base/notreached.h" #include "base/types/always_false.h" #include "base/types/is_complete.h" #include "base/types/is_instantiation.h" diff --git a/naiveproxy/src/base/functional/callback_internal.cc b/naiveproxy/src/base/functional/callback_internal.cc index 30be53ca28..27f6900728 100644 --- a/naiveproxy/src/base/functional/callback_internal.cc +++ b/naiveproxy/src/base/functional/callback_internal.cc @@ -8,8 +8,7 @@ #include "base/notreached.h" #include "base/types/cxx23_to_underlying.h" -namespace base { -namespace internal { +namespace base::internal { namespace { @@ -64,5 +63,4 @@ bool BindStateHolder::MaybeValid() const { return bind_state_->MaybeValid(); } -} // namespace internal -} // namespace base +} // namespace base::internal diff --git a/naiveproxy/src/base/functional/function_ref.h b/naiveproxy/src/base/functional/function_ref.h index ed778e28f9..1832c1aa66 100644 --- a/naiveproxy/src/base/functional/function_ref.h +++ b/naiveproxy/src/base/functional/function_ref.h @@ -91,12 +91,10 @@ class FunctionRef { // we could teach our trampoline to deal with this, but this may be // the sign of an object lifetime bug, and again it's not clear // that this isn't just a mistake on the part of the user. - (!internal::is_instantiation_v>) && + (!is_instantiation>) && // For the same reason as the second case above, prevent // construction from `absl::FunctionRef`. - (!internal::is_instantiation_v>) + (!is_instantiation>) // NOLINTNEXTLINE(google-explicit-constructor) FunctionRef(const Functor& functor LIFETIME_BOUND) : wrapped_func_ref_(functor) {} diff --git a/naiveproxy/src/base/hash/legacy_hash.cc b/naiveproxy/src/base/hash/legacy_hash.cc index 40953fee21..563c05690d 100644 --- a/naiveproxy/src/base/hash/legacy_hash.cc +++ b/naiveproxy/src/base/hash/legacy_hash.cc @@ -9,8 +9,7 @@ #include "base/containers/span.h" #include "base/third_party/cityhash_v103/src/city_v103.h" -namespace base { -namespace legacy { +namespace base::legacy { uint64_t CityHash64(base::span data) { return internal::cityhash_v103::CityHash64( @@ -22,5 +21,4 @@ uint64_t CityHash64WithSeed(base::span data, uint64_t seed) { reinterpret_cast(data.data()), data.size(), seed); } -} // namespace legacy -} // namespace base +} // namespace base::legacy diff --git a/naiveproxy/src/base/i18n/break_iterator.cc b/naiveproxy/src/base/i18n/break_iterator.cc index 1c18bd4bdb..4cce46f308 100644 --- a/naiveproxy/src/base/i18n/break_iterator.cc +++ b/naiveproxy/src/base/i18n/break_iterator.cc @@ -18,8 +18,7 @@ #include "third_party/icu/source/common/unicode/uchar.h" #include "third_party/icu/source/common/unicode/ustring.h" -namespace base { -namespace i18n { +namespace base::i18n { namespace { @@ -275,5 +274,4 @@ std::u16string_view BreakIterator::GetString() const { return string_.substr(prev_, pos_ - prev_); } -} // namespace i18n -} // namespace base +} // namespace base::i18n diff --git a/naiveproxy/src/base/i18n/build_utf8_validator_tables.cc b/naiveproxy/src/base/i18n/build_utf8_validator_tables.cc index 45ddb5df15..14a2092bc0 100644 --- a/naiveproxy/src/base/i18n/build_utf8_validator_tables.cc +++ b/naiveproxy/src/base/i18n/build_utf8_validator_tables.cc @@ -134,8 +134,7 @@ typedef std::vector PairVector; // A class to print a table of numbers in the same style as clang-format. class TablePrinter { public: - explicit TablePrinter(FILE* stream) - : stream_(stream), values_on_this_line_(0), current_offset_(0) {} + explicit TablePrinter(FILE* stream) : stream_(stream) {} TablePrinter(const TablePrinter&) = delete; TablePrinter& operator=(const TablePrinter&) = delete; @@ -166,10 +165,10 @@ class TablePrinter { raw_ptr stream_; // Number of values so far printed on this line. - int values_on_this_line_; + int values_on_this_line_ = 0; // Total values printed so far. - int current_offset_; + int current_offset_ = 0; static const int kMaxValuesPerLine = 8; }; @@ -271,11 +270,10 @@ void MoveAllCharsToSets(PairVector* pairs) { void LogStringSets(const PairVector& pairs) { for (const auto& pair_it : pairs) { std::string set_as_string; - for (auto set_it = pair_it.set.begin(); set_it != pair_it.set.end(); - ++set_it) { + for (const auto& set_it : pair_it.set) { set_as_string += base::StringPrintf("[\\x%02x-\\x%02x]", - static_cast(set_it->from()), - static_cast(set_it->to())); + static_cast(set_it.from()), + static_cast(set_it.to())); } VLOG(1) << set_as_string; } @@ -322,9 +320,8 @@ uint8_t MakeState(const StringSet& set, {0, 1}, {range.from(), target_state}, {static_cast(range.to() + 1), 1}}; - states->push_back( - State(new_state_initializer, - new_state_initializer + std::size(new_state_initializer))); + states->emplace_back(std::begin(new_state_initializer), + std::end(new_state_initializer)); const uint8_t new_state_number = base::checked_cast(states->size() - 1); CHECK(state_map->insert(std::make_pair(set, new_state_number)).second); @@ -356,9 +353,8 @@ std::vector GenerateStates(const PairVector& pairs) { const StateRange new_range_initializer[] = { {range.from(), target_state}, {static_cast(range.to() + 1), 1}}; - states[0].insert( - states[0].end(), new_range_initializer, - new_range_initializer + std::size(new_range_initializer)); + states[0].insert(states[0].end(), std::begin(new_range_initializer), + std::end(new_range_initializer)); } } return states; @@ -384,9 +380,8 @@ void PrintStates(const std::vector& states, FILE* stream) { // bits we can discard and still determine what range a byte lies in. Sadly // it appears that ffs() is not portable, so we do it clumsily. uint8_t shift = 7; - for (auto range_it = state_it.begin(); range_it != state_it.end(); - ++range_it) { - while (shift > 0 && range_it->from % (1 << shift) != 0) { + for (const auto& range_it : state_it) { + while (shift > 0 && range_it.from % (1 << shift) != 0) { --shift; } } diff --git a/naiveproxy/src/base/i18n/case_conversion.cc b/naiveproxy/src/base/i18n/case_conversion.cc index 57b685bcb4..925d8152ee 100644 --- a/naiveproxy/src/base/i18n/case_conversion.cc +++ b/naiveproxy/src/base/i18n/case_conversion.cc @@ -15,8 +15,7 @@ #include "third_party/icu/source/common/unicode/unistr.h" #include "third_party/icu/source/common/unicode/ustring.h" -namespace base { -namespace i18n { +namespace base::i18n { namespace { @@ -98,5 +97,4 @@ std::u16string FoldCase(std::u16string_view string) { return CaseMap(string, &FoldCaseMapper); } -} // namespace i18n -} // namespace base +} // namespace base::i18n diff --git a/naiveproxy/src/base/i18n/char_iterator.cc b/naiveproxy/src/base/i18n/char_iterator.cc index 88a3ff296d..7c5798c22c 100644 --- a/naiveproxy/src/base/i18n/char_iterator.cc +++ b/naiveproxy/src/base/i18n/char_iterator.cc @@ -14,8 +14,7 @@ #include "base/check_op.h" #include "base/third_party/icu/icu_utf.h" -namespace base { -namespace i18n { +namespace base::i18n { // UTF8CharIterator ------------------------------------------------------------ @@ -134,5 +133,4 @@ void UTF16CharIterator::ReadChar() { CBU16_NEXT(str_.data(), next_pos_, str_.length(), char_); } -} // namespace i18n -} // namespace base +} // namespace base::i18n diff --git a/naiveproxy/src/base/i18n/file_util_icu.cc b/naiveproxy/src/base/i18n/file_util_icu.cc index 7817af4c92..560e10378b 100644 --- a/naiveproxy/src/base/i18n/file_util_icu.cc +++ b/naiveproxy/src/base/i18n/file_util_icu.cc @@ -27,8 +27,7 @@ #include "third_party/icu/source/common/unicode/uniset.h" #include "third_party/icu/source/i18n/unicode/coll.h" -namespace base { -namespace i18n { +namespace base::i18n { namespace { @@ -323,5 +322,4 @@ void NormalizeFileNameEncoding(FilePath* file_name) { #endif } -} // namespace i18n -} // namespace base +} // namespace base::i18n diff --git a/naiveproxy/src/base/i18n/message_formatter.cc b/naiveproxy/src/base/i18n/message_formatter.cc index fb9ebc9991..a0b3891525 100644 --- a/naiveproxy/src/base/i18n/message_formatter.cc +++ b/naiveproxy/src/base/i18n/message_formatter.cc @@ -18,8 +18,7 @@ using icu::UnicodeString; -namespace base { -namespace i18n { +namespace base::i18n { namespace { UnicodeString UnicodeStringFromStringView(std::string_view str) { return UnicodeString::fromUTF8( @@ -147,5 +146,4 @@ std::u16string MessageFormatter::FormatWithNamedArgs( return i18n::UnicodeStringToString16(formatted); } -} // namespace i18n -} // namespace base +} // namespace base::i18n diff --git a/naiveproxy/src/base/i18n/string_compare.cc b/naiveproxy/src/base/i18n/string_compare.cc index eeb07f3f8e..2563b28896 100644 --- a/naiveproxy/src/base/i18n/string_compare.cc +++ b/naiveproxy/src/base/i18n/string_compare.cc @@ -10,8 +10,7 @@ #include "base/strings/utf_string_conversions.h" #include "third_party/icu/source/common/unicode/unistr.h" -namespace base { -namespace i18n { +namespace base::i18n { // Compares the character data stored in two different std::u16string strings by // specified Collator instance. @@ -27,5 +26,4 @@ UCollationResult CompareString16WithCollator(const icu::Collator& collator, return result; } -} // namespace i18n -} // namespace base +} // namespace base::i18n diff --git a/naiveproxy/src/base/i18n/string_search.cc b/naiveproxy/src/base/i18n/string_search.cc index ae26a36e19..aa05873e51 100644 --- a/naiveproxy/src/base/i18n/string_search.cc +++ b/naiveproxy/src/base/i18n/string_search.cc @@ -14,8 +14,7 @@ #include "base/check_op.h" #include "third_party/icu/source/i18n/unicode/usearch.h" -namespace base { -namespace i18n { +namespace base::i18n { FixedPatternStringSearch::FixedPatternStringSearch(std::u16string find_this, bool case_sensitive) @@ -162,5 +161,4 @@ bool RepeatingStringSearch::NextMatchResult(int& match_index, return true; } -} // namespace i18n -} // namespace base +} // namespace base::i18n diff --git a/naiveproxy/src/base/i18n/transliterator.cc b/naiveproxy/src/base/i18n/transliterator.cc new file mode 100644 index 0000000000..6c9011d5f0 --- /dev/null +++ b/naiveproxy/src/base/i18n/transliterator.cc @@ -0,0 +1,67 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/i18n/transliterator.h" + +#include + +#include +#include + +#include "base/check.h" +#include "base/i18n/unicodestring.h" +#include "base/memory/raw_ptr.h" +#include "base/notreached.h" +#include "third_party/icu/source/common/unicode/ustring.h" +#include "third_party/icu/source/i18n/unicode/translit.h" + +namespace base { +namespace i18n { + +class ICUTransliterator : public Transliterator { + public: + ICUTransliterator(icu::Transliterator* instance) : delegate_(instance) {} + ~ICUTransliterator() override = default; + std::u16string Transliterate(std::u16string_view text) const override { + icu::UnicodeString ustr(text.data(), text.length()); + delegate_->transliterate(ustr); + return UnicodeStringToString16(ustr); + } + + private: + std::unique_ptr delegate_; +}; + +std::unique_ptr CreateTransliterator(std::string_view id) { + UParseError parseErr; + UErrorCode err = U_ZERO_ERROR; + std::unique_ptr delegate( + icu::Transliterator::createInstance( + icu::UnicodeString(id.data(), id.length()), UTRANS_FORWARD, parseErr, + err)); + DCHECK(U_SUCCESS(err)); + DCHECK(delegate != nullptr); + std::unique_ptr result( + new ICUTransliterator(delegate.release())); + return result; +} +std::unique_ptr CreateTransliteratorFromRules( + std::string_view id, + std::string_view rules) { + UParseError parseErr; + UErrorCode err = U_ZERO_ERROR; + std::unique_ptr delegate( + icu::Transliterator::createFromRules( + icu::UnicodeString(id.data(), id.length()), + icu::UnicodeString(rules.data(), rules.length()), UTRANS_FORWARD, + parseErr, err)); + DCHECK(U_SUCCESS(err)); + DCHECK(delegate != nullptr); + std::unique_ptr result( + new ICUTransliterator(delegate.release())); + return result; +} + +} // namespace i18n +} // namespace base diff --git a/naiveproxy/src/base/i18n/transliterator.h b/naiveproxy/src/base/i18n/transliterator.h new file mode 100644 index 0000000000..7c4582aa12 --- /dev/null +++ b/naiveproxy/src/base/i18n/transliterator.h @@ -0,0 +1,37 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef BASE_I18N_TRANSLITERATOR_H_ +#define BASE_I18N_TRANSLITERATOR_H_ + +#include + +#include +#include +#include + +#include "base/i18n/base_i18n_export.h" +#include "base/memory/raw_ptr.h" + +// The Transliterator class transliterate a string. + +namespace base { +namespace i18n { + +class BASE_I18N_EXPORT Transliterator { + public: + virtual ~Transliterator() = default; + virtual std::u16string Transliterate(std::u16string_view text) const = 0; +}; + +BASE_I18N_EXPORT std::unique_ptr CreateTransliterator( + std::string_view id); +BASE_I18N_EXPORT std::unique_ptr CreateTransliteratorFromRules( + std::string_view id, + std::string_view rules); + +} // namespace i18n +} // namespace base + +#endif // BASE_I18N_TRANSLITERATOR_H_ diff --git a/naiveproxy/src/base/i18n/utf8_validator_tables.cc b/naiveproxy/src/base/i18n/utf8_validator_tables.cc index b4b5e109fa..247e6adab9 100644 --- a/naiveproxy/src/base/i18n/utf8_validator_tables.cc +++ b/naiveproxy/src/base/i18n/utf8_validator_tables.cc @@ -9,8 +9,7 @@ #include -namespace base { -namespace internal { +namespace base::internal { const uint8_t kUtf8ValidatorTables[] = { // State 0, offset 0x00 @@ -53,5 +52,4 @@ const uint8_t kUtf8ValidatorTables[] = { const size_t kUtf8ValidatorTablesSize = std::size(kUtf8ValidatorTables); -} // namespace internal -} // namespace base +} // namespace base::internal diff --git a/naiveproxy/src/base/ios/crb_protocol_observers.mm b/naiveproxy/src/base/ios/crb_protocol_observers.mm index 64087386bc..18b66b7b7d 100644 --- a/naiveproxy/src/base/ios/crb_protocol_observers.mm +++ b/naiveproxy/src/base/ios/crb_protocol_observers.mm @@ -7,12 +7,12 @@ #include #include +#include #include #include "base/check.h" #include "base/containers/contains.h" #include "base/notreached.h" -#include "base/ranges/algorithm.h" @interface CRBProtocolObservers () { Protocol* _protocol; @@ -116,7 +116,7 @@ id Iterator::GetNext() { - (void)removeObserver:(id)observer { DCHECK(observer); - auto it = base::ranges::find(_observers, observer); + auto it = std::ranges::find(_observers, observer); if (it != _observers.end()) { if (_invocationDepth) { *it = nil; diff --git a/naiveproxy/src/base/json/json_parser.cc b/naiveproxy/src/base/json/json_parser.cc index a94a72152e..3a2ffe913b 100644 --- a/naiveproxy/src/base/json/json_parser.cc +++ b/naiveproxy/src/base/json/json_parser.cc @@ -9,6 +9,7 @@ #include "base/json/json_parser.h" +#include #include #include #include @@ -22,7 +23,6 @@ #include "base/metrics/histogram_functions.h" #include "base/notreached.h" #include "base/numerics/safe_conversions.h" -#include "base/ranges/algorithm.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" @@ -30,8 +30,7 @@ #include "base/strings/utf_string_conversions.h" #include "base/third_party/icu/icu_utf.h" -namespace base { -namespace internal { +namespace base::internal { namespace { @@ -74,8 +73,8 @@ constexpr base_icu::UChar32 kUnicodeReplacementPoint = 0xFFFD; // input consists purely of hex digits. I.e. no "0x" nor "OX" prefix is // permitted. bool UnprefixedHexStringToInt(std::string_view input, int* output) { - for (size_t i = 0; i < input.size(); i++) { - if (!IsHexDigit(input[i])) { + for (char i : input) { + if (!IsHexDigit(i)) { return false; } } @@ -446,7 +445,7 @@ std::optional JSONParser::ConsumeDictionary() { ConsumeChar(); // Closing '}'. // Reverse |dict_storage| to keep the last of elements with the same key in // the input. - ranges::reverse(values); + std::ranges::reverse(values); return Value(Value::Dict(std::make_move_iterator(values.begin()), std::make_move_iterator(values.end()))); } @@ -902,5 +901,4 @@ std::string JSONParser::FormatErrorMessage(int line, return description; } -} // namespace internal -} // namespace base +} // namespace base::internal diff --git a/naiveproxy/src/base/json/json_perftest_decodebench.cc b/naiveproxy/src/base/json/json_perftest_decodebench.cc index ff31bdf592..0b44084617 100644 --- a/naiveproxy/src/base/json/json_perftest_decodebench.cc +++ b/naiveproxy/src/base/json/json_perftest_decodebench.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + // This program measures the time taken to decode the given JSON files (the // command line arguments). It is for manual benchmarking. // diff --git a/naiveproxy/src/base/json/json_value_converter.cc b/naiveproxy/src/base/json/json_value_converter.cc index 73c75e78a4..da63902df8 100644 --- a/naiveproxy/src/base/json/json_value_converter.cc +++ b/naiveproxy/src/base/json/json_value_converter.cc @@ -6,8 +6,7 @@ #include "base/strings/utf_string_conversions.h" -namespace base { -namespace internal { +namespace base::internal { bool BasicValueConverter::Convert(const base::Value& value, int* field) const { @@ -64,5 +63,4 @@ bool BasicValueConverter::Convert(const base::Value& value, return true; } -} // namespace internal -} // namespace base +} // namespace base::internal diff --git a/naiveproxy/src/base/lazy_instance_helpers.cc b/naiveproxy/src/base/lazy_instance_helpers.cc index 74c4dcb5c8..4d206dd091 100644 --- a/naiveproxy/src/base/lazy_instance_helpers.cc +++ b/naiveproxy/src/base/lazy_instance_helpers.cc @@ -9,8 +9,7 @@ #include "base/at_exit.h" #include "base/threading/platform_thread.h" -namespace base { -namespace internal { +namespace base::internal { bool NeedsLazyInstance(std::atomic& state) { // Try to create the instance, if we're the first, will go from 0 to @@ -66,5 +65,4 @@ void CompleteLazyInstance(std::atomic& state, } } -} // namespace internal -} // namespace base +} // namespace base::internal diff --git a/naiveproxy/src/base/linux_util.cc b/naiveproxy/src/base/linux_util.cc index a3fe98824a..e3b9403d85 100644 --- a/naiveproxy/src/base/linux_util.cc +++ b/naiveproxy/src/base/linux_util.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "base/linux_util.h" #include diff --git a/naiveproxy/src/base/logging.cc b/naiveproxy/src/base/logging.cc index 21ed59f40c..e81d5b4f4a 100644 --- a/naiveproxy/src/base/logging.cc +++ b/naiveproxy/src/base/logging.cc @@ -9,10 +9,6 @@ #include "base/logging.h" -#ifdef BASE_CHECK_H_ -#error "logging.h should not include check.h" -#endif - #include #include diff --git a/naiveproxy/src/base/logging/rust_log_integration.cc b/naiveproxy/src/base/logging/rust_log_integration.cc index 1dba55d18a..29accefbf7 100644 --- a/naiveproxy/src/base/logging/rust_log_integration.cc +++ b/naiveproxy/src/base/logging/rust_log_integration.cc @@ -7,8 +7,7 @@ #include "base/logging.h" #include "base/logging/log_severity.h" -namespace logging { -namespace internal { +namespace logging::internal { BASE_EXPORT void print_rust_log(const char* msg, const char* file, @@ -20,5 +19,4 @@ BASE_EXPORT void print_rust_log(const char* msg, log_message.stream() << msg; } -} // namespace internal -} // namespace logging +} // namespace logging::internal diff --git a/naiveproxy/src/base/mac/process_requirement.cc b/naiveproxy/src/base/mac/process_requirement.cc index 5fec51cd8c..c717af1ba7 100644 --- a/naiveproxy/src/base/mac/process_requirement.cc +++ b/naiveproxy/src/base/mac/process_requirement.cc @@ -10,6 +10,7 @@ #include #include +#include #include #include "base/apple/mach_logging.h" @@ -28,7 +29,6 @@ #include "base/metrics/histogram_functions.h" #include "base/no_destructor.h" #include "base/notreached.h" -#include "base/ranges/algorithm.h" #include "base/strings/strcat.h" #include "base/strings/string_util.h" #include "base/task/thread_pool.h" @@ -246,7 +246,7 @@ ProcessRequirement::Builder ProcessRequirement::Builder::Identifier( ProcessRequirement::Builder ProcessRequirement::Builder::IdentifierIsOneOf( std::vector identifiers) && { CHECK(identifiers.size()); - CHECK(base::ranges::all_of(identifiers, &std::string::size)); + CHECK(std::ranges::all_of(identifiers, &std::string::size)); CHECK(identifiers_.empty()); identifiers_ = std::move(identifiers); return std::move(*this); @@ -317,7 +317,7 @@ ProcessRequirement::Builder::HasSameCertificateType() && { ProcessRequirement::Builder ProcessRequirement::Builder::TeamIdentifier( std::string team_identifier) && { CHECK(team_identifier_.empty()); - CHECK(base::ranges::all_of(team_identifier, base::IsAsciiAlphaNumeric)); + CHECK(std::ranges::all_of(team_identifier, base::IsAsciiAlphaNumeric)); team_identifier_ = std::move(team_identifier); has_same_team_identifier_called_ = false; return std::move(*this); diff --git a/naiveproxy/src/base/macros/is_empty.h b/naiveproxy/src/base/macros/is_empty.h index 68c5ab4ff4..6a11adc742 100644 --- a/naiveproxy/src/base/macros/is_empty.h +++ b/naiveproxy/src/base/macros/is_empty.h @@ -6,11 +6,9 @@ #define BASE_MACROS_IS_EMPTY_H_ // A macro that substitutes with 1 if called without arguments, otherwise 0. -#define BASE_IS_EMPTY(...) BASE_INTERNAL_IS_EMPTY_EXPANDED(__VA_ARGS__) -#define BASE_INTERNAL_IS_EMPTY_EXPANDED(...) \ - BASE_INTERNAL_IS_EMPTY_INNER(_, ##__VA_ARGS__) -#define BASE_INTERNAL_IS_EMPTY_INNER(...) \ - BASE_INTERNAL_IS_EMPTY_INNER_EXPANDED(__VA_ARGS__, 0, 1) -#define BASE_INTERNAL_IS_EMPTY_INNER_EXPANDED(e0, e1, is_empty, ...) is_empty +#define BASE_IS_EMPTY(...) BASE_INTERNAL_IS_##__VA_OPT__(NON_)##EMPTY + +#define BASE_INTERNAL_IS_EMPTY 1 +#define BASE_INTERNAL_IS_NON_EMPTY 0 #endif // BASE_MACROS_IS_EMPTY_H_ diff --git a/naiveproxy/src/base/memory/discardable_memory.cc b/naiveproxy/src/base/memory/discardable_memory.cc index 1f4f683fb8..1add4162b9 100644 --- a/naiveproxy/src/base/memory/discardable_memory.cc +++ b/naiveproxy/src/base/memory/discardable_memory.cc @@ -31,6 +31,12 @@ BASE_FEATURE(kDiscardableMemoryBackingTrial, "DiscardableMemoryBackingTrial", base::FEATURE_DISABLED_BY_DEFAULT); +BASE_FEATURE_ENUM_PARAM(DiscardableMemoryTrialGroup, + kDiscardableMemoryBackingParam, + &kDiscardableMemoryBackingTrial, + "DiscardableMemoryBacking", + DiscardableMemoryTrialGroup::kEmulatedSharedMemory, + kDiscardableMemoryBackingParamOptions); #endif // BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX) || // BUILDFLAG(IS_CHROMEOS) diff --git a/naiveproxy/src/base/memory/discardable_memory_internal.h b/naiveproxy/src/base/memory/discardable_memory_internal.h index a1f0a4eb9b..86c50cca9a 100644 --- a/naiveproxy/src/base/memory/discardable_memory_internal.h +++ b/naiveproxy/src/base/memory/discardable_memory_internal.h @@ -41,12 +41,8 @@ constexpr inline auto kDiscardableMemoryBackingParamOptions = {DiscardableMemoryTrialGroup::kAshmem, "ashmem"}, }); -constexpr inline base::FeatureParam - kDiscardableMemoryBackingParam( - &kDiscardableMemoryBackingTrial, - "DiscardableMemoryBacking", - DiscardableMemoryTrialGroup::kEmulatedSharedMemory, - kDiscardableMemoryBackingParamOptions); +BASE_EXPORT BASE_DECLARE_FEATURE_PARAM(DiscardableMemoryTrialGroup, + kDiscardableMemoryBackingParam); } // namespace features diff --git a/naiveproxy/src/base/memory/platform_shared_memory_region.cc b/naiveproxy/src/base/memory/platform_shared_memory_region.cc index 2a233c10d7..c1009087b4 100644 --- a/naiveproxy/src/base/memory/platform_shared_memory_region.cc +++ b/naiveproxy/src/base/memory/platform_shared_memory_region.cc @@ -12,8 +12,7 @@ #include "base/numerics/checked_math.h" #include "base/system/sys_info.h" -namespace base { -namespace subtle { +namespace base::subtle { // static PlatformSharedMemoryRegion PlatformSharedMemoryRegion::CreateWritable( @@ -103,5 +102,4 @@ void PlatformSharedMemoryRegion::Unmap(span mapping, SharedMemorySecurityPolicy::ReleaseReservationForMapping(mapping.size()); } -} // namespace subtle -} // namespace base +} // namespace base::subtle diff --git a/naiveproxy/src/base/memory/platform_shared_memory_region_posix.cc b/naiveproxy/src/base/memory/platform_shared_memory_region_posix.cc index 68d00d1ba2..2bdd457f11 100644 --- a/naiveproxy/src/base/memory/platform_shared_memory_region_posix.cc +++ b/naiveproxy/src/base/memory/platform_shared_memory_region_posix.cc @@ -14,8 +14,7 @@ #include "base/threading/thread_restrictions.h" #include "build/build_config.h" -namespace base { -namespace subtle { +namespace base::subtle { namespace { @@ -313,5 +312,4 @@ PlatformSharedMemoryRegion::PlatformSharedMemoryRegion( const UnguessableToken& guid) : handle_(std::move(handle)), mode_(mode), size_(size), guid_(guid) {} -} // namespace subtle -} // namespace base +} // namespace base::subtle diff --git a/naiveproxy/src/base/memory/ref_counted.h b/naiveproxy/src/base/memory/ref_counted.h index 6a1d6aadde..90ca64d1b4 100644 --- a/naiveproxy/src/base/memory/ref_counted.h +++ b/naiveproxy/src/base/memory/ref_counted.h @@ -20,7 +20,6 @@ #include "base/sequence_checker.h" #include "base/threading/thread_collision_warner.h" #include "build/build_config.h" -#include "third_party/abseil-cpp/absl/utility/utility.h" namespace base { namespace subtle { diff --git a/naiveproxy/src/base/memory/safety_checks.h b/naiveproxy/src/base/memory/safety_checks.h index 696a6d5dea..fdf8d2ab55 100644 --- a/naiveproxy/src/base/memory/safety_checks.h +++ b/naiveproxy/src/base/memory/safety_checks.h @@ -63,10 +63,6 @@ enum class MemorySafetyCheck : uint32_t { // Enables |FreeFlags::kSchedulerLoopQuarantine|. // Requires PA-E. kSchedulerLoopQuarantine = (1u << 1), - - // Enables |FreeFlags::kZap|. - // Requires PA-E. - kZapOnFree = (1u << 2), }; constexpr MemorySafetyCheck operator|(MemorySafetyCheck a, @@ -88,7 +84,7 @@ constexpr MemorySafetyCheck operator~(MemorySafetyCheck a) { // Set of checks for ADVANCED_MEMORY_SAFETY_CHECKS() annotated objects. constexpr auto kAdvancedMemorySafetyChecks = MemorySafetyCheck::kForcePartitionAlloc | - MemorySafetyCheck::kSchedulerLoopQuarantine | MemorySafetyCheck::kZapOnFree; + MemorySafetyCheck::kSchedulerLoopQuarantine; // Define type traits to determine type |T|'s memory safety check status. namespace { @@ -98,8 +94,7 @@ constexpr bool ShouldUsePartitionAlloc(MemorySafetyCheck checks) { #if PA_BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) return static_cast(checks & (MemorySafetyCheck::kForcePartitionAlloc | - MemorySafetyCheck::kSchedulerLoopQuarantine | - MemorySafetyCheck::kZapOnFree)); + MemorySafetyCheck::kSchedulerLoopQuarantine)); #else return false; #endif // PA_BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) @@ -119,9 +114,6 @@ constexpr partition_alloc::FreeFlags GetFreeFlags(MemorySafetyCheck checks) { if (static_cast(checks & MemorySafetyCheck::kSchedulerLoopQuarantine)) { flags |= partition_alloc::FreeFlags::kSchedulerLoopQuarantine; } - if (static_cast(checks & MemorySafetyCheck::kZapOnFree)) { - flags |= partition_alloc::FreeFlags::kZap; - } return flags; } diff --git a/naiveproxy/src/base/memory/shared_memory_switch.cc b/naiveproxy/src/base/memory/shared_memory_switch.cc index aa241a2e45..3782b1ab91 100644 --- a/naiveproxy/src/base/memory/shared_memory_switch.cc +++ b/naiveproxy/src/base/memory/shared_memory_switch.cc @@ -9,6 +9,7 @@ #include "base/command_line.h" #include "base/logging.h" +#include "base/memory/platform_shared_memory_handle.h" #include "base/memory/read_only_shared_memory_region.h" #include "base/memory/unsafe_shared_memory_region.h" #include "base/process/launch.h" @@ -60,43 +61,47 @@ // 3. The high 64 bits of the shared memory block GUID. // 4. The low 64 bits of the shared memory block GUID. // 5. The size of the shared memory segment as a string. +// +// TODO(crbug.com/389713696): Refactor the platform specific parts of this file. -namespace base { -namespace shared_memory { +namespace base::shared_memory { namespace { -using subtle::PlatformSharedMemoryRegion; -using subtle::ScopedPlatformSharedMemoryHandle; +using base::subtle::PlatformSharedMemoryRegion; +using base::subtle::ScopedPlatformSharedMemoryHandle; // The max shared memory size is artificially limited. This serves as a sanity // check when serializing/deserializing the handle info. This value should be // slightly larger than the largest shared memory size used in practice. constexpr size_t kMaxSharedMemorySize = 8 << 20; // 8 MiB +#if BUILDFLAG(IS_FUCHSIA) // Return a scoped platform shared memory handle for |shmem_region|, possibly // with permissions reduced to make the handle read-only. -ScopedPlatformSharedMemoryHandle GetPlatformHandle( - PlatformSharedMemoryRegion& shmem_region, - [[maybe_unused]] bool make_read_only) { -#if BUILDFLAG(IS_FUCHSIA) - if (make_read_only) { - // For Fuchsia, ScopedPlatformSharedMemoryHandle <==> zx::vmo - zx::vmo scoped_handle; - zx_status_t status = shmem_region.GetPlatformHandle()->duplicate( - ZX_RIGHT_READ | ZX_RIGHT_MAP | ZX_RIGHT_TRANSFER | - ZX_RIGHT_GET_PROPERTY | ZX_RIGHT_DUPLICATE, - &scoped_handle); - ZX_CHECK(status == ZX_OK, status) << "zx_handle_duplicate"; - return scoped_handle; +// For Fuchsia: +// * ScopedPlatformSharedMemoryHandle <==> zx::vmo +zx::vmo GetFuchsiaHandle(ScopedPlatformSharedMemoryHandle shmem_handle, + bool make_read_only) { + if (!make_read_only) { + return shmem_handle; } -#endif // BUILDFLAG(IS_FUCHSIA) - return shmem_region.PassPlatformHandle(); + zx::vmo scoped_handle; + zx_status_t status = + shmem_handle.duplicate(ZX_RIGHT_READ | ZX_RIGHT_MAP | ZX_RIGHT_TRANSFER | + ZX_RIGHT_GET_PROPERTY | ZX_RIGHT_DUPLICATE, + &scoped_handle); + ZX_CHECK(status == ZX_OK, status) << "zx_handle_duplicate"; + return scoped_handle; } +#endif // BUILDFLAG(IS_FUCHSIA) // Serializes the shared memory region metadata to a string that can be added // to the command-line of a child-process. -std::string Serialize(PlatformSharedMemoryRegion shmem_region, - bool is_read_only, +template +std::string Serialize(HandleType shmem_handle, + const UnguessableToken& shmem_token, + size_t shmem_size, + [[maybe_unused]] bool is_read_only, #if BUILDFLAG(IS_APPLE) MachPortsForRendezvous::key_type rendezvous_key, #elif BUILDFLAG(IS_POSIX) @@ -108,12 +113,6 @@ std::string Serialize(PlatformSharedMemoryRegion shmem_region, CHECK(launch_options != nullptr); #endif - CHECK(shmem_region.IsValid()); - - auto shmem_token = shmem_region.GetGUID(); - auto shmem_size = shmem_region.GetSize(); - auto shmem_handle = GetPlatformHandle(shmem_region, is_read_only); - CHECK(shmem_token); CHECK_NE(shmem_size, 0u); CHECK_LE(shmem_size, kMaxSharedMemorySize); @@ -128,15 +127,16 @@ std::string Serialize(PlatformSharedMemoryRegion shmem_region, serialized.reserve(kSerializedReservedSize); #if BUILDFLAG(IS_WIN) - // Ownership of the handle is passed to |launch_options|. We keep a non- - // owning alias for a moment, so we can serialize the handle's numeric - // value. - HANDLE handle = shmem_handle.release(); - launch_options->handles_to_inherit.push_back(handle); + // If the child is launched in elevated privilege mode, it will query the + // parent for the handle. Otherwise, in non-elevated mode, the handle will + // be passed via process inheritance. + if (!launch_options->elevated) { + launch_options->handles_to_inherit.push_back(shmem_handle); + } // Tell the child process the name of the HANDLE and whether to handle can // be inherited ('i') or must be duplicate from the parent process ('p'). - StrAppend(&serialized, {NumberToString(win::HandleToUint32(handle)), + StrAppend(&serialized, {NumberToString(win::HandleToUint32(shmem_handle)), (launch_options->elevated ? ",p," : ",i,")}); #elif BUILDFLAG(IS_APPLE) // In the receiving child, the handle is looked up using the rendezvous key. @@ -147,8 +147,10 @@ std::string Serialize(PlatformSharedMemoryRegion shmem_region, // The handle is passed via the handles to transfer launch options. The child // will use the returned handle_id to lookup the handle. Ownership of the // handle is transferred to |launch_options|. + zx::vmo scoped_handle = + GetFuchsiaHandle(std::move(shmem_handle), is_read_only); uint32_t handle_id = LaunchOptions::AddHandleToTransfer( - &launch_options->handles_to_transfer, shmem_handle.release()); + &launch_options->handles_to_transfer, scoped_handle.release()); StrAppend(&serialized, {NumberToString(handle_id), ",i,"}); #elif BUILDFLAG(IS_POSIX) // Serialize the key by which the child can lookup the shared memory handle. @@ -221,14 +223,32 @@ expected Deserialize( DCHECK(IsCurrentProcessElevated()); // LaunchProcess doesn't have a way to duplicate the handle, but this // process can since by definition it's not sandboxed. - win::ScopedHandle parent_handle(OpenProcess( - PROCESS_ALL_ACCESS, FALSE, GetParentProcessId(GetCurrentProcess()))); - DuplicateHandle(parent_handle.get(), handle, GetCurrentProcess(), &handle, - 0, FALSE, DUPLICATE_SAME_ACCESS); + if (ProcessId parent_pid = GetParentProcessId(GetCurrentProcessHandle()); + parent_pid == kNullProcessId) { + return unexpected(SharedMemoryError::kInvalidHandle); + } else if (auto parent = + Process::OpenWithAccess(parent_pid, PROCESS_ALL_ACCESS); + !parent.IsValid() || + !::DuplicateHandle(parent.Handle(), handle, + ::GetCurrentProcess(), &handle, 0, FALSE, + DUPLICATE_SAME_ACCESS)) { + return unexpected(SharedMemoryError::kInvalidHandle); + } } else if (tokens[1] != "i") { return unexpected(SharedMemoryError::kUnexpectedHandleType); } - win::ScopedHandle scoped_handle(handle); + // Under some situations, the handle value provided on the command line does + // not refer to a valid Section object. Fail gracefully rather than wrapping + // the value in a ScopedHandle, as that will lead to a crash when CloseHandle + // fails; see https://crbug.com/40071993. + win::ScopedHandle scoped_handle; + if (auto handle_or_error = win::TakeHandleOfType( + std::exchange(handle, kNullProcessHandle), L"Section"); + !handle_or_error.has_value()) { + return unexpected(SharedMemoryError::kInvalidHandle); + } else { + scoped_handle = *std::move(handle_or_error); + } #elif BUILDFLAG(IS_APPLE) DCHECK_EQ(tokens[1], "r"); auto* rendezvous = MachPortRendezvousClient::GetInstance(); @@ -287,22 +307,32 @@ expected Deserialize( std::move(scoped_handle), mode, checked_cast(size), guid.value()); } -} // namespace - -void AddToLaunchParameters(std::string_view switch_name, - ReadOnlySharedMemoryRegion read_only_memory_region, +template +void AddToLaunchParametersImpl(std::string_view switch_name, + const RegionType& memory_region, #if BUILDFLAG(IS_APPLE) - MachPortsForRendezvous::key_type rendezvous_key, + MachPortsForRendezvous::key_type rendezvous_key, #elif BUILDFLAG(IS_POSIX) - GlobalDescriptors::Key descriptor_key, - ScopedFD& out_descriptor_to_share, + GlobalDescriptors::Key descriptor_key, + ScopedFD& out_descriptor_to_share, #endif - CommandLine* command_line, - LaunchOptions* launch_options) { + CommandLine* command_line, + LaunchOptions* launch_options) { +#if BUILDFLAG(IS_WIN) + auto token = memory_region.GetGUID(); + auto size = memory_region.GetSize(); + auto handle = memory_region.GetPlatformHandle(); +#else + auto region = + RegionType::TakeHandleForSerialization(memory_region.Duplicate()); + auto token = region.GetGUID(); + auto size = region.GetSize(); + auto handle = region.PassPlatformHandle(); +#endif // !BUILDFLAG(IS_WIN) + constexpr bool is_read_only = + std::is_same::value; std::string switch_value = - Serialize(ReadOnlySharedMemoryRegion::TakeHandleForSerialization( - std::move(read_only_memory_region)), - /*is_read_only=*/true, + Serialize(std::move(handle), token, size, is_read_only, #if BUILDFLAG(IS_APPLE) rendezvous_key, #elif BUILDFLAG(IS_POSIX) @@ -312,8 +342,30 @@ void AddToLaunchParameters(std::string_view switch_name, command_line->AppendSwitchASCII(switch_name, switch_value); } +} // namespace + +void AddToLaunchParameters( + std::string_view switch_name, + const ReadOnlySharedMemoryRegion& read_only_memory_region, +#if BUILDFLAG(IS_APPLE) + MachPortsForRendezvous::key_type rendezvous_key, +#elif BUILDFLAG(IS_POSIX) + GlobalDescriptors::Key descriptor_key, + ScopedFD& out_descriptor_to_share, +#endif + CommandLine* command_line, + LaunchOptions* launch_options) { + AddToLaunchParametersImpl(switch_name, read_only_memory_region, +#if BUILDFLAG(IS_APPLE) + rendezvous_key, +#elif BUILDFLAG(IS_POSIX) + descriptor_key, out_descriptor_to_share, +#endif + command_line, launch_options); +} + void AddToLaunchParameters(std::string_view switch_name, - UnsafeSharedMemoryRegion unsafe_memory_region, + const UnsafeSharedMemoryRegion& unsafe_memory_region, #if BUILDFLAG(IS_APPLE) MachPortsForRendezvous::key_type rendezvous_key, #elif BUILDFLAG(IS_POSIX) @@ -322,17 +374,13 @@ void AddToLaunchParameters(std::string_view switch_name, #endif CommandLine* command_line, LaunchOptions* launch_options) { - std::string switch_value = - Serialize(UnsafeSharedMemoryRegion::TakeHandleForSerialization( - std::move(unsafe_memory_region)), - /*is_read_only=*/false, + AddToLaunchParametersImpl(switch_name, unsafe_memory_region, #if BUILDFLAG(IS_APPLE) - rendezvous_key, + rendezvous_key, #elif BUILDFLAG(IS_POSIX) - descriptor_key, out_descriptor_to_share, + descriptor_key, out_descriptor_to_share, #endif - launch_options); - command_line->AppendSwitchASCII(switch_name, switch_value); + command_line, launch_options); } expected @@ -361,11 +409,10 @@ ReadOnlySharedMemoryRegionFrom(std::string_view switch_value) { auto shmem_region = ReadOnlySharedMemoryRegion::Deserialize( std::move(platform_handle).value()); if (!shmem_region.IsValid()) { - LOG(ERROR) << "Faield to deserialize read-only memory handle"; + LOG(ERROR) << "Failed to deserialize read-only memory handle"; return unexpected(SharedMemoryError::kDeserializeFailed); } return ok(std::move(shmem_region)); } -} // namespace shared_memory -} // namespace base +} // namespace base::shared_memory diff --git a/naiveproxy/src/base/memory/shared_memory_switch.h b/naiveproxy/src/base/memory/shared_memory_switch.h index 36741554af..319c186b26 100644 --- a/naiveproxy/src/base/memory/shared_memory_switch.h +++ b/naiveproxy/src/base/memory/shared_memory_switch.h @@ -59,7 +59,7 @@ enum class SharedMemoryError { // descriptor to the launch flow for the zygote. BASE_EXPORT void AddToLaunchParameters( std::string_view switch_name, - ReadOnlySharedMemoryRegion read_only_memory_region, + const ReadOnlySharedMemoryRegion& read_only_memory_region, #if BUILDFLAG(IS_APPLE) MachPortsForRendezvous::key_type rendezvous_key, #elif BUILDFLAG(IS_POSIX) @@ -79,7 +79,7 @@ BASE_EXPORT void AddToLaunchParameters( // descriptor to the launch flow for the zygote. BASE_EXPORT void AddToLaunchParameters( std::string_view switch_name, - UnsafeSharedMemoryRegion unsafe_memory_region, + const UnsafeSharedMemoryRegion& unsafe_memory_region, #if BUILDFLAG(IS_APPLE) MachPortsForRendezvous::key_type rendezvous_key, #elif BUILDFLAG(IS_POSIX) diff --git a/naiveproxy/src/base/message_loop/message_pump.h b/naiveproxy/src/base/message_loop/message_pump.h index 270ffcc674..26f4345ca5 100644 --- a/naiveproxy/src/base/message_loop/message_pump.h +++ b/naiveproxy/src/base/message_loop/message_pump.h @@ -77,11 +77,6 @@ class BASE_EXPORT MessagePump { // isn't null nor max. MessagePump impls should use remaining_delay() // instead of resampling Now() if they wish to sleep for a TimeDelta. TimeTicks recent_now; - - // If true, native messages should be processed before executing more work - // from the Delegate. This is an optional hint; not all message pumps - // implement this. - bool yield_to_native = false; }; // Executes an immediate task or a ripe delayed task. Returns information @@ -287,6 +282,19 @@ class BASE_EXPORT MessagePump { // returns a valid IOWatcher implementation to use. Otherwise returns null. virtual IOWatcher* GetIOWatcher(); + // May cause the message pump to busy loop for the specified duration. May not + // work for all message pump types, and is only an upper bound of busy looping + // time. This may be used to avoid sleeping when a short wait is + // expected. This is exposed here rather than being internal to allow setting + // it depending on the context (e.g. on some threads only, or only when the + // thread is expected to benefit from it). + void SetBusyLoop(base::TimeDelta max_busy_loop_time) { + max_busy_loop_time_ = max_busy_loop_time; + } + + protected: + base::TimeDelta max_busy_loop_time_; + private: // TODO(crbug.com/379190028): Individual MessagePump subclasses should own and // initialize their own IOWatcher. diff --git a/naiveproxy/src/base/message_loop/message_pump_android.cc b/naiveproxy/src/base/message_loop/message_pump_android.cc index dcf9284cc6..5823750dcb 100644 --- a/naiveproxy/src/base/message_loop/message_pump_android.cc +++ b/naiveproxy/src/base/message_loop/message_pump_android.cc @@ -455,15 +455,6 @@ void MessagePumpAndroid::DoNonDelayedLooperWork(bool do_idle_work) { next_work_info = delegate_->DoWork(); - // If we are prioritizing native, and the next work would normally run - // immediately, skip the next work and let the native work items have a - // chance to run. This is useful when user input is waiting for native to - // have a chance to run. - if (next_work_info.is_immediate() && next_work_info.yield_to_native) { - ScheduleWork(); - return; - } - // As an optimization, yield to the Looper when input events are waiting to // be handled. In some cases input events can remain undetected. Such "input // hint false negatives" happen, for example, during initialization, in diff --git a/naiveproxy/src/base/message_loop/message_pump_apple.h b/naiveproxy/src/base/message_loop/message_pump_apple.h index 2c71ce77d8..8437a473df 100644 --- a/naiveproxy/src/base/message_loop/message_pump_apple.h +++ b/naiveproxy/src/base/message_loop/message_pump_apple.h @@ -48,8 +48,8 @@ #else #import -// Clients must subclass NSApplication and implement this protocol if they use -// MessagePumpMac. +// Clients must subclass NSApplication and implement this protocol if they want +// message_pump_apple::Create() to return a MessagePumpCrApplication instance. @protocol CrAppProtocol // Must return true if -[NSApplication sendEvent:] is currently on the stack. // See the comment for |CreateAutoreleasePool()| in the cc file for why this is diff --git a/naiveproxy/src/base/message_loop/message_pump_default.cc b/naiveproxy/src/base/message_loop/message_pump_default.cc index c6c9e93d19..103587979d 100644 --- a/naiveproxy/src/base/message_loop/message_pump_default.cc +++ b/naiveproxy/src/base/message_loop/message_pump_default.cc @@ -7,6 +7,8 @@ #include "base/auto_reset.h" #include "base/logging.h" #include "base/synchronization/waitable_event.h" +#include "base/time/time.h" +#include "base/trace_event/base_tracing.h" #include "build/build_config.h" #if BUILDFLAG(IS_APPLE) @@ -52,10 +54,38 @@ void MessagePumpDefault::Run(Delegate* delegate) { break; } + base::TimeTicks before; + bool may_busy_loop = max_busy_loop_time_.is_positive(); + if (may_busy_loop) { + before = base::TimeTicks::Now(); + } + if (next_work_info.delayed_run_time.is_max()) { - event_.Wait(); + if (ShouldBusyLoop()) { + bool signaled = BusyWaitOnEvent(before); + if (!signaled) { + event_.Wait(); + } + } else { + event_.Wait(); + } } else { - event_.TimedWait(next_work_info.remaining_delay()); + TRACE_EVENT(TRACE_DISABLED_BY_DEFAULT("base"), "TimeWait", "delay_ms", + next_work_info.remaining_delay().InMilliseconds()); + // Not handling shorter sleeps to keep the code as simple as possible. + if (ShouldBusyLoop() && + next_work_info.remaining_delay() > max_busy_loop_time_) { + bool signaled = BusyWaitOnEvent(before); + if (!signaled) { + next_work_info.recent_now = base::TimeTicks::Now(); + event_.TimedWait(next_work_info.remaining_delay()); + } + } else { + event_.TimedWait(next_work_info.remaining_delay()); + } + } + if (may_busy_loop) { + RecordWaitTime(base::TimeTicks::Now() - before); } // Since event_ is auto-reset, we don't need to do anything special here // other than service each delegate method. @@ -81,4 +111,45 @@ void MessagePumpDefault::ScheduleDelayedWork( // this way (bit.ly/merge-message-pump-do-work). } +void MessagePumpDefault::RecordWaitTime(base::TimeDelta wait_time) { + last_wait_time_ = wait_time; + constexpr float kAlpha = .9; + wait_time_exponential_moving_average_ = + kAlpha * wait_time_exponential_moving_average_ + + (1. - kAlpha) * wait_time; +} + +bool MessagePumpDefault::ShouldBusyLoop() const { + // Should only busy loop when the expected wait time is short. Of course, we + // don't know whether it will be, but we have two crude heuristics here: + // - Last wait was short, maybe the next one will. Not that if this one is + // wrong, it only impacts a single wait. + // - Recent waits were short (burst of small tasks with waiting in-between) + // + // The second one is laggy, both to start and to stop, which is why the first + // one is there too, to start busy looping faster. + // + // One important part though is that to avoid wasting too much power, we + // should not busy wait for regular sleeps, for instance animations updating + // at 60Hz. + return max_busy_loop_time_.is_positive() && + (last_wait_time_ < max_busy_loop_time_ || + wait_time_exponential_moving_average_ < max_busy_loop_time_); +} + +bool MessagePumpDefault::BusyWaitOnEvent(base::TimeTicks before) { + bool signaled = false; + { + TRACE_EVENT(TRACE_DISABLED_BY_DEFAULT("base"), "BusyWait", + "last_wait_time_ms", last_wait_time_.InMillisecondsF(), + "wait_time_exponential_moving_average_ms", + wait_time_exponential_moving_average_.InMillisecondsF()); + do { + signaled = event_.TimedWait(base::TimeDelta()); + } while (!signaled && + (base::TimeTicks::Now() - before) < max_busy_loop_time_); + } + return signaled; +} + } // namespace base diff --git a/naiveproxy/src/base/message_loop/message_pump_default.h b/naiveproxy/src/base/message_loop/message_pump_default.h index c8f72748cf..bf918d9b9d 100644 --- a/naiveproxy/src/base/message_loop/message_pump_default.h +++ b/naiveproxy/src/base/message_loop/message_pump_default.h @@ -29,12 +29,22 @@ class BASE_EXPORT MessagePumpDefault : public MessagePump { void ScheduleDelayedWork( const Delegate::NextWorkInfo& next_work_info) override; + // Visible for testing. + void RecordWaitTime(base::TimeDelta wait_time); + bool ShouldBusyLoop() const; + private: + // Returns whether the event was signaled. + bool BusyWaitOnEvent(base::TimeTicks before); + // This flag is set to false when Run should return. bool keep_running_; // Used to sleep until there is more work to do. WaitableEvent event_; + + base::TimeDelta last_wait_time_; + base::TimeDelta wait_time_exponential_moving_average_; }; } // namespace base diff --git a/naiveproxy/src/base/message_loop/message_pump_epoll.cc b/naiveproxy/src/base/message_loop/message_pump_epoll.cc index baafffc1f1..d99f576e13 100644 --- a/naiveproxy/src/base/message_loop/message_pump_epoll.cc +++ b/naiveproxy/src/base/message_loop/message_pump_epoll.cc @@ -2,10 +2,16 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "base/message_loop/message_pump_epoll.h" #include +#include #include #include #include @@ -19,7 +25,6 @@ #include "base/metrics/histogram_macros.h" #include "base/numerics/safe_conversions.h" #include "base/posix/eintr_wrapper.h" -#include "base/ranges/algorithm.h" #include "base/threading/thread_checker.h" #include "base/time/time.h" #include "base/trace_event/base_tracing.h" @@ -420,7 +425,7 @@ void MessagePumpEpoll::UnregisterInterest( EpollEventEntry& entry = entry_it->second; auto& interests = entry.interests; - auto* it = ranges::find(interests, interest); + auto* it = std::ranges::find(interests, interest); CHECK(it != interests.end(), base::NotFatalUntil::M125); interests.erase(it); diff --git a/naiveproxy/src/base/metrics/bucket_ranges.h b/naiveproxy/src/base/metrics/bucket_ranges.h index 70be84de49..b22cd731d1 100644 --- a/naiveproxy/src/base/metrics/bucket_ranges.h +++ b/naiveproxy/src/base/metrics/bucket_ranges.h @@ -32,7 +32,7 @@ namespace base { class BASE_EXPORT BucketRanges { public: - typedef std::vector Ranges; + typedef std::vector Ranges; explicit BucketRanges(size_t num_ranges); @@ -42,8 +42,8 @@ class BASE_EXPORT BucketRanges { ~BucketRanges(); size_t size() const { return ranges_.size(); } - HistogramBase::Sample range(size_t i) const { return ranges_[i]; } - void set_range(size_t i, HistogramBase::Sample value) { + HistogramBase::Sample32 range(size_t i) const { return ranges_[i]; } + void set_range(size_t i, HistogramBase::Sample32 value) { DCHECK_LT(i, ranges_.size()); DCHECK_GE(value, 0); ranges_[i] = value; diff --git a/naiveproxy/src/base/metrics/dummy_histogram.cc b/naiveproxy/src/base/metrics/dummy_histogram.cc index a4fb3ece87..30a624ac04 100644 --- a/naiveproxy/src/base/metrics/dummy_histogram.cc +++ b/naiveproxy/src/base/metrics/dummy_histogram.cc @@ -27,9 +27,9 @@ class DummySampleCountIterator : public SampleCountIterator { // SampleCountIterator: bool Done() const override { return true; } void Next() override { NOTREACHED(); } - void Get(HistogramBase::Sample* min, + void Get(HistogramBase::Sample32* min, int64_t* max, - HistogramBase::Count* count) override { + HistogramBase::Count32* count) override { NOTREACHED(); } }; @@ -42,13 +42,13 @@ class DummyHistogramSamples : public HistogramSamples { DummyHistogramSamples& operator=(const DummyHistogramSamples&) = delete; // HistogramSamples: - void Accumulate(HistogramBase::Sample value, - HistogramBase::Count count) override {} - HistogramBase::Count GetCount(HistogramBase::Sample value) const override { - return HistogramBase::Count(); + void Accumulate(HistogramBase::Sample32 value, + HistogramBase::Count32 count) override {} + HistogramBase::Count32 GetCount(HistogramBase::Sample32 value) const override { + return HistogramBase::Count32(); } - HistogramBase::Count TotalCount() const override { - return HistogramBase::Count(); + HistogramBase::Count32 TotalCount() const override { + return HistogramBase::Count32(); } std::unique_ptr Iterator() const override { return std::make_unique(); @@ -79,8 +79,8 @@ HistogramType DummyHistogram::GetHistogramType() const { } bool DummyHistogram::HasConstructionArguments( - Sample expected_minimum, - Sample expected_maximum, + Sample32 expected_minimum, + Sample32 expected_maximum, size_t expected_bucket_count) const { return true; } diff --git a/naiveproxy/src/base/metrics/dummy_histogram.h b/naiveproxy/src/base/metrics/dummy_histogram.h index 74910e49eb..6433376a5a 100644 --- a/naiveproxy/src/base/metrics/dummy_histogram.h +++ b/naiveproxy/src/base/metrics/dummy_histogram.h @@ -27,15 +27,15 @@ class BASE_EXPORT DummyHistogram : public HistogramBase { DummyHistogram(const DummyHistogram&) = delete; DummyHistogram& operator=(const DummyHistogram&) = delete; - // HistogramBase: + // HistogramBase void CheckName(std::string_view name) const override {} uint64_t name_hash() const override; HistogramType GetHistogramType() const override; - bool HasConstructionArguments(Sample expected_minimum, - Sample expected_maximum, + bool HasConstructionArguments(Sample32 expected_minimum, + Sample32 expected_maximum, size_t expected_bucket_count) const override; - void Add(Sample value) override {} - void AddCount(Sample value, int count) override {} + void Add(Sample32 value) override {} + void AddCount(Sample32 value, int count) override {} bool AddSamples(const HistogramSamples& samples) override; bool AddSamplesFromPickle(PickleIterator* iter) override; std::unique_ptr SnapshotSamples() const override; diff --git a/naiveproxy/src/base/metrics/field_trial.cc b/naiveproxy/src/base/metrics/field_trial.cc index 30ade16d75..bee3a697d4 100644 --- a/naiveproxy/src/base/metrics/field_trial.cc +++ b/naiveproxy/src/base/metrics/field_trial.cc @@ -2,13 +2,17 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "base/metrics/field_trial.h" #include #include #include -#include "base/auto_reset.h" #include "base/base_switches.h" #include "base/command_line.h" #include "base/containers/span.h" @@ -627,7 +631,7 @@ std::string FieldTrialList::AllParamsToString(EscapeDataFunc encode_data_func) { if (params_associator->GetFieldTrialParamsWithoutFallback( *trial.trial_name, *trial.group_name, ¶ms)) { if (params.size() > 0) { - // Add comma to seprate from previous entry if it exists. + // Add comma to separate from previous entry if it exists. if (!output.empty()) { output.append(1, ','); } @@ -760,15 +764,14 @@ void FieldTrialList::PopulateLaunchOptionsWithFieldTrialState( CHECK(global_->readonly_allocator_region_.IsValid()); global_->field_trial_allocator_->UpdateTrackingHistograms(); - shared_memory::AddToLaunchParameters( - switches::kFieldTrialHandle, - global_->readonly_allocator_region_.Duplicate(), + shared_memory::AddToLaunchParameters(switches::kFieldTrialHandle, + global_->readonly_allocator_region_, #if BUILDFLAG(IS_APPLE) - kFieldTrialRendezvousKey, + kFieldTrialRendezvousKey, #elif BUILDFLAG(IS_POSIX) - descriptor_key, descriptor_to_share, + descriptor_key, descriptor_to_share, #endif - command_line, launch_options); + command_line, launch_options); // Append --enable-features and --disable-features switches corresponding // to the features enabled on the command-line, so that child and browser diff --git a/naiveproxy/src/base/metrics/field_trial_params.cc b/naiveproxy/src/base/metrics/field_trial_params.cc index 05e2c5024e..a8a2597f4f 100644 --- a/naiveproxy/src/base/metrics/field_trial_params.cc +++ b/naiveproxy/src/base/metrics/field_trial_params.cc @@ -35,6 +35,37 @@ bool IsFeatureParamWithCacheEnabled() { } // namespace internal +template <> +bool FeatureParam::GetWithoutCache() const { + return GetFieldTrialParamByFeatureAsBool(*feature, name, default_value); +} + +template <> +int FeatureParam::GetWithoutCache() const { + return GetFieldTrialParamByFeatureAsInt(*feature, name, default_value); +} + +template <> +size_t FeatureParam::GetWithoutCache() const { + return checked_cast(GetFieldTrialParamByFeatureAsInt( + *feature, name, checked_cast(default_value))); +} + +template <> +double FeatureParam::GetWithoutCache() const { + return GetFieldTrialParamByFeatureAsDouble(*feature, name, default_value); +} + +template <> +std::string FeatureParam::GetWithoutCache() const { + return GetFieldTrialParamByFeatureAsString(*feature, name, default_value); +} + +template <> +base::TimeDelta FeatureParam::GetWithoutCache() const { + return GetFieldTrialParamByFeatureAsTimeDelta(*feature, name, default_value); +} + void LogInvalidValue(const Feature& feature, const char* type, const std::string& param_name, @@ -66,6 +97,14 @@ std::string UnescapeValue(const std::string& value) { UnescapeRule::URL_SPECIAL_CHARS_EXCEPT_PATH_SEPARATORS); } +void LogInvalidEnumValue(const Feature& feature, + const std::string& param_name, + const std::string& value_as_string, + int default_value_as_int) { + LogInvalidValue(feature, "an enum", param_name, value_as_string, + base::NumberToString(default_value_as_int)); +} + bool AssociateFieldTrialParams(const std::string& trial_name, const std::string& group_name, const FieldTrialParams& params) { @@ -255,43 +294,4 @@ base::TimeDelta GetFieldTrialParamByFeatureAsTimeDelta( return ret.value(); } -template <> -bool FeatureParam::GetWithoutCache() const { - return GetFieldTrialParamByFeatureAsBool(*feature, name, default_value); -} - -template <> -int FeatureParam::GetWithoutCache() const { - return GetFieldTrialParamByFeatureAsInt(*feature, name, default_value); -} - -template <> -size_t FeatureParam::GetWithoutCache() const { - return checked_cast(GetFieldTrialParamByFeatureAsInt( - *feature, name, checked_cast(default_value))); -} - -template <> -double FeatureParam::GetWithoutCache() const { - return GetFieldTrialParamByFeatureAsDouble(*feature, name, default_value); -} - -template <> -std::string FeatureParam::GetWithoutCache() const { - return GetFieldTrialParamByFeatureAsString(*feature, name, default_value); -} - -template <> -base::TimeDelta FeatureParam::GetWithoutCache() const { - return GetFieldTrialParamByFeatureAsTimeDelta(*feature, name, default_value); -} - -void LogInvalidEnumValue(const Feature& feature, - const std::string& param_name, - const std::string& value_as_string, - int default_value_as_int) { - LogInvalidValue(feature, "an enum", param_name, value_as_string, - base::NumberToString(default_value_as_int)); -} - } // namespace base diff --git a/naiveproxy/src/base/metrics/field_trial_params.h b/naiveproxy/src/base/metrics/field_trial_params.h index 58a1837d62..0ab2853e37 100644 --- a/naiveproxy/src/base/metrics/field_trial_params.h +++ b/naiveproxy/src/base/metrics/field_trial_params.h @@ -61,11 +61,207 @@ typedef std::map FieldTrialParams; // Param string decoding function for AssociateFieldTrialParamsFromString(). typedef std::string (*FieldTrialParamsDecodeStringFunc)(const std::string& str); +// Shared declaration for various FeatureParam types. +// +// This template is defined for the following types T: +// bool +// int +// size_t +// double +// std::string +// enum types +// base::TimeDelta +// +// Attempting to use it with any other type is a compile error. +// +// Getting a param value from a FeatureParam will have the same semantics as +// GetFieldTrialParamValueByFeature(), see that function's comments for details. +// `cache_getter` is used to provide a dedicated getter that is used to give a +// local cache to the FeatureParam. Usually, this is automatically generated and +// provided via BASE_FEATURE_PARAM() or BASE_FEATURE_ENUM_PARAM() macro. +// +// Example to declares a double-valued parameter. +// +// constexpr FeatureParam kAssistantTriggerThreshold = { +// &kAssistantFeature, "trigger_threshold", 0.10}; +// +// If the feature is not enabled, the parameter is not set, or set to an invalid +// value, then Get() will return the default value. +template > +struct FeatureParam { + using DefaultValueType = + typename internal::FeatureParamTraits::DefaultValueType; + + // Prevent use of FeatureParam<> with unsupported types (e.g. void*). Uses T + // in its definition so that evaluation is deferred until the template is + // instantiated. + static_assert(std::is_same_v || std::is_same_v || + std::is_same_v || std::is_same_v || + std::is_same_v || + std::is_same_v, + "Unsupported FeatureParam<> type"); + + constexpr FeatureParam(const Feature* feature, + const char* name, + DefaultValueType default_value, + T (*cache_getter)(const FeatureParam*) = nullptr) + : feature(feature), + name(name), + default_value(default_value), + cache_getter(cache_getter) {} + + // Calling Get() or GetWithoutCache() will activate the field trial associated + // with |feature|. See GetFieldTrialParamValueByFeature() for more details. + BASE_EXPORT T Get() const { + if (internal::IsFeatureParamWithCacheEnabled() && cache_getter) { + return cache_getter(this); + } + return GetWithoutCache(); + } + BASE_EXPORT T GetWithoutCache() const; + + // RAW_PTR_EXCLUSION: Using raw_ptr here would make FeatureParam lose its + // trivial destructor, causing it to be classified as a non-trivial class + // member in contexts where it's included. This can complicate code and + // impact performance. base::Features are expected to be globals with + // static lifetime, so this is pretty much always safe. + RAW_PTR_EXCLUSION const Feature* const feature; + const char* const name; + const DefaultValueType default_value; + T (*const cache_getter)(const FeatureParam*); +}; + +// Declarations for GetWithoutCache() specializations and explicit +// instantiations for the FeatureParam<> to ensure instantiating them +// in the base components to export them. +template <> +bool FeatureParam::GetWithoutCache() const; +template struct FeatureParam; +template struct internal::FeatureParamTraits; + +template <> +int FeatureParam::GetWithoutCache() const; +template struct FeatureParam; +template struct internal::FeatureParamTraits; + +template <> +size_t FeatureParam::GetWithoutCache() const; +template struct FeatureParam; +template struct internal::FeatureParamTraits; + +template <> +double FeatureParam::GetWithoutCache() const; +template struct FeatureParam; +template struct internal::FeatureParamTraits; + +template <> +std::string FeatureParam::GetWithoutCache() const; +template struct FeatureParam; + +template <> +TimeDelta FeatureParam::GetWithoutCache() const; +template struct FeatureParam; +template struct internal::FeatureParamTraits; + +// Feature param declaration for an enum, with associated options. Example: +// +// constexpr FeatureParam::Option kShapeParamOptions[] = { +// {SHAPE_CIRCLE, "circle"}, +// {SHAPE_CYLINDER, "cylinder"}, +// {SHAPE_PAPERCLIP, "paperclip"}}; +// constexpr FeatureParam kAssistantShapeParam = { +// &kAssistantFeature, "shape", SHAPE_CIRCLE, &kShapeParamOptions}; +// +// With this declaration, the parameter may be set to "circle", "cylinder", or +// "paperclip", and that will be translated to one of the three enum values. By +// default, or if the param is set to an unknown value, the parameter will be +// assumed to be SHAPE_CIRCLE. +template +struct FeatureParam { + struct Option { + constexpr Option(Enum value, const char* name) : value(value), name(name) {} + + const Enum value; + const char* const name; + }; + + template + constexpr FeatureParam( + const Feature* feature, + const char* name, + const Enum default_value, + const std::array& options, + Enum (*cache_getter)(const FeatureParam*) = nullptr) + : feature(feature), + name(name), + default_value(default_value), + options(options.data()), + option_count(option_count), + cache_getter(cache_getter) { + static_assert(option_count >= 1, "FeatureParam has no options"); + } + + template + constexpr FeatureParam( + const Feature* feature, + const char* name, + const Enum default_value, + const Option (*options)[option_count], + Enum (*cache_getter)(const FeatureParam*) = nullptr) + : feature(feature), + name(name), + default_value(default_value), + options(*options), + option_count(option_count), + cache_getter(cache_getter) { + static_assert(option_count >= 1, "FeatureParam has no options"); + } + + // Calling Get() or GetWithoutCache() will activate the field trial associated + // with |feature|. See GetFieldTrialParamValueByFeature() for more details. + Enum Get() const { + if (internal::IsFeatureParamWithCacheEnabled() && cache_getter) { + return cache_getter(this); + } + return GetWithoutCache(); + } + Enum GetWithoutCache() const { + return GetFieldTrialParamByFeatureAsEnum( + *feature, name, default_value, base::span(&*options, option_count)); + } + + // Returns the param-string for the given enum value. + std::string GetName(Enum value) const { + for (size_t i = 0; i < option_count; ++i) { + if (value == options[i].value) { + return options[i].name; + } + } + NOTREACHED(); + } + + const raw_ptr feature; + const char* const name; + const Enum default_value; + // TODO(crbug.com/40284755): Remove AllowPtrArithmetic if possible after + // unsafe buffers have been evaluated. + const raw_ptr options; + const size_t option_count; + Enum (*const cache_getter)(const FeatureParam*); +}; + // Unescapes special characters from the given string. Used in // AssociateFieldTrialParamsFromString() as one of the feature params decoding // functions. BASE_EXPORT std::string UnescapeValue(const std::string& value); +// Logs a warning that a feature param expected to map to an enum was an unknown +// non-empty value. +BASE_EXPORT void LogInvalidEnumValue(const Feature& feature, + const std::string& param_name, + const std::string& value_as_string, + int default_value_as_int); + // Associates the specified set of key-value |params| with the field trial // specified by |trial_name| and |group_name|. Fails and returns false if the // specified field trial already has params associated with it or the trial @@ -164,204 +360,29 @@ BASE_EXPORT base::TimeDelta GetFieldTrialParamByFeatureAsTimeDelta( const std::string& param_name, base::TimeDelta default_value); -// Shared declaration for various FeatureParam types. -// -// This template is defined for the following types T: -// bool -// int -// size_t -// double -// std::string -// enum types -// base::TimeDelta -// -// Attempting to use it with any other type is a compile error. -// -// Getting a param value from a FeatureParam will have the same semantics as -// GetFieldTrialParamValueByFeature(), see that function's comments for details. -// `cache_getter` is used to provide a dedicated getter tbat is used to give a -// local cache to the FeatureParam. Usually, this is automatically generated and -// provided via BASE_FEATURE_PARAM() or BASE_FEATURE_ENUM_PARAM() macro. -// -// Example to declares a double-valued parameter. -// -// constexpr FeatureParam kAssistantTriggerThreshold = { -// &kAssistantFeature, "trigger_threshold", 0.10}; -// -// If the feature is not enabled, the parameter is not set, or set to an invalid -// value, then Get() will return the default value. -template > -struct FeatureParam { - using DefaultValueType = - typename internal::FeatureParamTraits::DefaultValueType; - - // Prevent use of FeatureParam<> with unsupported types (e.g. void*). Uses T - // in its definition so that evaluation is deferred until the template is - // instantiated. - static_assert(std::is_same_v || std::is_same_v || - std::is_same_v || std::is_same_v || - std::is_same_v || - std::is_same_v, - "Unsupported FeatureParam<> type"); - - constexpr FeatureParam(const Feature* feature, - const char* name, - DefaultValueType default_value, - T (*cache_getter)(const FeatureParam*) = nullptr) - : feature(feature), - name(name), - default_value(default_value), - cache_getter(cache_getter) {} - - // Calling Get() or GetWithoutCache() will activate the field trial associated - // with |feature|. See GetFieldTrialParamValueByFeature() for more details. - BASE_EXPORT T Get() const { - if (internal::IsFeatureParamWithCacheEnabled() && cache_getter) { - return cache_getter(this); - } - return GetWithoutCache(); - } - BASE_EXPORT T GetWithoutCache() const; - - // RAW_PTR_EXCLUSION: #global-scope - RAW_PTR_EXCLUSION const Feature* const feature; - const char* const name; - const DefaultValueType default_value; - T (*const cache_getter)(const FeatureParam*); -}; - -// Declarations for GetWithoutCache() specializations and explicit -// instantiations for the FeatureParam<> to ensure instantiating them -// in the base components to export them. -template <> -bool FeatureParam::GetWithoutCache() const; -template struct FeatureParam; -template struct internal::FeatureParamTraits; - -template <> -int FeatureParam::GetWithoutCache() const; -template struct FeatureParam; -template struct internal::FeatureParamTraits; - -template <> -size_t FeatureParam::GetWithoutCache() const; -template struct FeatureParam; -template struct internal::FeatureParamTraits; - -template <> -double FeatureParam::GetWithoutCache() const; -template struct FeatureParam; -template struct internal::FeatureParamTraits; - -template <> -std::string FeatureParam::GetWithoutCache() const; -template struct FeatureParam; - -template <> -TimeDelta FeatureParam::GetWithoutCache() const; -template struct FeatureParam; -template struct internal::FeatureParamTraits; - -BASE_EXPORT void LogInvalidEnumValue(const Feature& feature, - const std::string& param_name, - const std::string& value_as_string, - int default_value_as_int); - -// Feature param declaration for an enum, with associated options. Example: -// -// constexpr FeatureParam::Option kShapeParamOptions[] = { -// {SHAPE_CIRCLE, "circle"}, -// {SHAPE_CYLINDER, "cylinder"}, -// {SHAPE_PAPERCLIP, "paperclip"}}; -// constexpr FeatureParam kAssistantShapeParam = { -// &kAssistantFeature, "shape", SHAPE_CIRCLE, &kShapeParamOptions}; -// -// With this declaration, the parameter may be set to "circle", "cylinder", or -// "paperclip", and that will be translated to one of the three enum values. By -// default, or if the param is set to an unknown value, the parameter will be -// assumed to be SHAPE_CIRCLE. +// Same as GetFieldTrialParamValueByFeature(). On top of that, it converts the +// string value into an Enum and returns it, if successful. Otherwise, it +// returns `default_value`. If the string value is not empty and the conversion +// does not succeed, it produces a warning to LOG. template -struct FeatureParam { - struct Option { - constexpr Option(Enum value, const char* name) : value(value), name(name) {} - - const Enum value; - const char* const name; - }; - - template - constexpr FeatureParam( - const Feature* feature, - const char* name, - const Enum default_value, - const std::array& options, - Enum (*cache_getter)(const FeatureParam*) = nullptr) - : feature(feature), - name(name), - default_value(default_value), - options(options.data()), - option_count(option_count), - cache_getter(cache_getter) { - static_assert(option_count >= 1, "FeatureParam has no options"); - } - - template - constexpr FeatureParam( - const Feature* feature, - const char* name, - const Enum default_value, - const Option (*options)[option_count], - Enum (*cache_getter)(const FeatureParam*) = nullptr) - : feature(feature), - name(name), - default_value(default_value), - options(*options), - option_count(option_count), - cache_getter(cache_getter) { - static_assert(option_count >= 1, "FeatureParam has no options"); - } - - // Calling Get() or GetWithoutCache() will activate the field trial associated - // with |feature|. See GetFieldTrialParamValueByFeature() for more details. - Enum Get() const { - if (internal::IsFeatureParamWithCacheEnabled() && cache_getter) { - return cache_getter(this); - } - return GetWithoutCache(); - } - Enum GetWithoutCache() const { - std::string value = GetFieldTrialParamValueByFeature(*feature, name); - if (value.empty()) { - return default_value; - } - for (size_t i = 0; i < option_count; ++i) { - if (value == options[i].name) { - return options[i].value; - } - } - LogInvalidEnumValue(*feature, name, value, static_cast(default_value)); +Enum GetFieldTrialParamByFeatureAsEnum( + const Feature& feature, + const std::string& param_name, + Enum default_value, + base::span::Option> options) { + std::string value = GetFieldTrialParamValueByFeature(feature, param_name); + if (value.empty()) { return default_value; } - - // Returns the param-string for the given enum value. - std::string GetName(Enum value) const { - for (size_t i = 0; i < option_count; ++i) { - if (value == options[i].value) { - return options[i].name; - } + for (const auto& option : options) { + if (value == option.name) { + return option.value; } - NOTREACHED(); } - - const raw_ptr feature; - const char* const name; - const Enum default_value; - // TODO(crbug.com/40284755): Remove AllowPtrArithmetic if possible after - // unsafe buffers have been evaluated. - const raw_ptr options; - const size_t option_count; - Enum (*const cache_getter)(const FeatureParam*); -}; + LogInvalidEnumValue(feature, param_name, value, + static_cast(default_value)); + return default_value; +} } // namespace base diff --git a/naiveproxy/src/base/metrics/histogram.cc b/naiveproxy/src/base/metrics/histogram.cc index eb696c65d1..4c5b50e7ac 100644 --- a/naiveproxy/src/base/metrics/histogram.cc +++ b/naiveproxy/src/base/metrics/histogram.cc @@ -35,7 +35,6 @@ #include "base/metrics/statistics_recorder.h" #include "base/notreached.h" #include "base/pickle.h" -#include "base/ranges/algorithm.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" #include "base/synchronization/lock.h" @@ -67,7 +66,7 @@ bool ReadHistogramArguments(PickleIterator* iter, // checks above and beyond those in Histogram::Initialize() if (*declared_max <= 0 || *declared_min <= 0 || *declared_max < *declared_min || - INT_MAX / sizeof(HistogramBase::Count) <= *bucket_count || + INT_MAX / sizeof(HistogramBase::Count32) <= *bucket_count || *bucket_count < 2) { DLOG(ERROR) << "Values error decoding Histogram: " << histogram_name; return false; @@ -95,14 +94,14 @@ bool ValidateRangeChecksum(const HistogramBase& histogram, } // namespace -typedef HistogramBase::Count Count; -typedef HistogramBase::Sample Sample; +typedef HistogramBase::Count32 Count32; +typedef HistogramBase::Sample32 Sample32; class Histogram::Factory { public: Factory(std::string_view name, - HistogramBase::Sample minimum, - HistogramBase::Sample maximum, + Sample32 minimum, + Sample32 maximum, size_t bucket_count, int32_t flags) : Factory(name, HISTOGRAM, minimum, maximum, bucket_count, flags) {} @@ -117,8 +116,8 @@ class Histogram::Factory { protected: Factory(std::string_view name, HistogramType histogram_type, - HistogramBase::Sample minimum, - HistogramBase::Sample maximum, + Sample32 minimum, + Sample32 maximum, size_t bucket_count, int32_t flags) : name_(name), @@ -151,8 +150,8 @@ class Histogram::Factory { // unnecessary parameters everywhere. const std::string_view name_; const HistogramType histogram_type_; - HistogramBase::Sample minimum_; - HistogramBase::Sample maximum_; + Sample32 minimum_; + Sample32 maximum_; size_t bucket_count_; int32_t flags_; }; @@ -234,7 +233,7 @@ HistogramBase* Histogram::Factory::Build() { // return would cause Chrome to crash; better to just record it for later // analysis. UmaHistogramSparse("Histogram.MismatchedConstructionArguments", - static_cast(HashMetricName(name_))); + static_cast(HashMetricName(name_))); DLOG(ERROR) << "Histogram " << name_ << " has mismatched construction arguments"; return DummyHistogram::GetInstance(); @@ -243,8 +242,8 @@ HistogramBase* Histogram::Factory::Build() { } HistogramBase* Histogram::FactoryGet(std::string_view name, - Sample minimum, - Sample maximum, + Sample32 minimum, + Sample32 maximum, size_t bucket_count, int32_t flags) { return FactoryGetInternal(name, minimum, maximum, bucket_count, flags); @@ -268,8 +267,8 @@ HistogramBase* Histogram::FactoryMicrosecondsTimeGet(std::string_view name, } HistogramBase* Histogram::FactoryGet(const std::string& name, - Sample minimum, - Sample maximum, + Sample32 minimum, + Sample32 maximum, size_t bucket_count, int32_t flags) { return FactoryGetInternal(name, minimum, maximum, bucket_count, flags); @@ -293,8 +292,8 @@ HistogramBase* Histogram::FactoryMicrosecondsTimeGet(const std::string& name, } HistogramBase* Histogram::FactoryGet(const char* name, - Sample minimum, - Sample maximum, + Sample32 minimum, + Sample32 maximum, size_t bucket_count, int32_t flags) { return FactoryGetInternal(name, minimum, maximum, bucket_count, flags); @@ -338,14 +337,14 @@ std::unique_ptr Histogram::PersistentCreate( // that bucket onward we do use the exponential growth of buckets. // // static -void Histogram::InitializeBucketRanges(Sample minimum, - Sample maximum, +void Histogram::InitializeBucketRanges(Sample32 minimum, + Sample32 maximum, BucketRanges* ranges) { double log_max = log(static_cast(maximum)); double log_ratio; double log_next; size_t bucket_index = 1; - Sample current = minimum; + Sample32 current = minimum; ranges->set_range(bucket_index, current); size_t bucket_count = ranges->bucket_count(); @@ -357,7 +356,7 @@ void Histogram::InitializeBucketRanges(Sample minimum, log_ratio = (log_max - log_current) / (bucket_count - bucket_index); // See where the next bucket would start. log_next = log_current + log_ratio; - Sample next; + Sample32 next; next = static_cast(std::round(exp(log_next))); if (next > current) { current = next; @@ -375,7 +374,7 @@ const int Histogram::kCommonRaceBasedCountMismatch = 5; uint32_t Histogram::FindCorruption(const HistogramSamples& samples) const { uint32_t inconsistencies = NO_INCONSISTENCIES; - Sample previous_range = -1; // Bottom range is always 0. + Sample32 previous_range = -1; // Bottom range is always 0. for (size_t index = 0; index < bucket_count(); ++index) { int new_range = ranges(index); if (previous_range >= new_range) { @@ -412,7 +411,7 @@ const BucketRanges* Histogram::bucket_ranges() const { return unlogged_samples_->bucket_ranges(); } -Sample Histogram::declared_min() const { +Sample32 Histogram::declared_min() const { const BucketRanges* ranges = bucket_ranges(); if (ranges->bucket_count() < 2) { return -1; @@ -420,7 +419,7 @@ Sample Histogram::declared_min() const { return ranges->range(1); } -Sample Histogram::declared_max() const { +Sample32 Histogram::declared_max() const { const BucketRanges* ranges = bucket_ranges(); if (ranges->bucket_count() < 2) { return -1; @@ -428,7 +427,7 @@ Sample Histogram::declared_max() const { return ranges->range(ranges->bucket_count() - 1); } -Sample Histogram::ranges(size_t i) const { +Sample32 Histogram::ranges(size_t i) const { return bucket_ranges()->range(i); } @@ -438,8 +437,8 @@ size_t Histogram::bucket_count() const { // static bool Histogram::InspectConstructionArguments(std::string_view name, - Sample* minimum, - Sample* maximum, + Sample32* minimum, + Sample32* maximum, size_t* bucket_count) { bool check_okay = true; @@ -465,7 +464,7 @@ bool Histogram::InspectConstructionArguments(std::string_view name, } if (*bucket_count > kBucketCount_MAX) { UmaHistogramSparse("Histogram.TooManyBuckets.1000", - static_cast(HashMetricName(name))); + static_cast(HashMetricName(name))); // Blink.UseCounter legitimately has more than 1000 entries in its enum. if (!StartsWith(name, "Blink.UseCounter")) { @@ -500,7 +499,7 @@ bool Histogram::InspectConstructionArguments(std::string_view name, if (!check_okay) { UmaHistogramSparse("Histogram.BadConstructionArguments", - static_cast(HashMetricName(name))); + static_cast(HashMetricName(name))); } return check_okay; @@ -514,8 +513,8 @@ HistogramType Histogram::GetHistogramType() const { return HISTOGRAM; } -bool Histogram::HasConstructionArguments(Sample expected_minimum, - Sample expected_maximum, +bool Histogram::HasConstructionArguments(Sample32 expected_minimum, + Sample32 expected_maximum, size_t expected_bucket_count) const { return (expected_bucket_count == bucket_count() && expected_minimum == declared_min() && @@ -687,8 +686,8 @@ HistogramBase* Histogram::DeserializeInfoImpl(PickleIterator* iter) { // static HistogramBase* Histogram::FactoryGetInternal(std::string_view name, - Sample minimum, - Sample maximum, + Sample32 minimum, + Sample32 maximum, size_t bucket_count, int32_t flags) { bool valid_arguments = @@ -708,10 +707,10 @@ HistogramBase* Histogram::FactoryTimeGetInternal(std::string_view name, TimeDelta maximum, size_t bucket_count, int32_t flags) { - DCHECK_LT(minimum.InMilliseconds(), std::numeric_limits::max()); - DCHECK_LT(maximum.InMilliseconds(), std::numeric_limits::max()); - return FactoryGetInternal(name, static_cast(minimum.InMilliseconds()), - static_cast(maximum.InMilliseconds()), + DCHECK_LT(minimum.InMilliseconds(), std::numeric_limits::max()); + DCHECK_LT(maximum.InMilliseconds(), std::numeric_limits::max()); + return FactoryGetInternal(name, static_cast(minimum.InMilliseconds()), + static_cast(maximum.InMilliseconds()), bucket_count, flags); } @@ -722,10 +721,10 @@ HistogramBase* Histogram::FactoryMicrosecondsTimeGetInternal( TimeDelta maximum, size_t bucket_count, int32_t flags) { - DCHECK_LT(minimum.InMicroseconds(), std::numeric_limits::max()); - DCHECK_LT(maximum.InMicroseconds(), std::numeric_limits::max()); - return FactoryGetInternal(name, static_cast(minimum.InMicroseconds()), - static_cast(maximum.InMicroseconds()), + DCHECK_LT(minimum.InMicroseconds(), std::numeric_limits::max()); + DCHECK_LT(maximum.InMicroseconds(), std::numeric_limits::max()); + return FactoryGetInternal(name, static_cast(minimum.InMicroseconds()), + static_cast(maximum.InMicroseconds()), bucket_count, flags); } @@ -759,8 +758,8 @@ Value::Dict Histogram::GetParameters() const { class LinearHistogram::Factory : public Histogram::Factory { public: Factory(std::string_view name, - HistogramBase::Sample minimum, - HistogramBase::Sample maximum, + Sample32 minimum, + Sample32 maximum, size_t bucket_count, int32_t flags, const DescriptionPair* descriptions) @@ -813,8 +812,8 @@ class LinearHistogram::Factory : public Histogram::Factory { LinearHistogram::~LinearHistogram() = default; HistogramBase* LinearHistogram::FactoryGet(std::string_view name, - Sample minimum, - Sample maximum, + Sample32 minimum, + Sample32 maximum, size_t bucket_count, int32_t flags) { return FactoryGetInternal(name, minimum, maximum, bucket_count, flags); @@ -829,8 +828,8 @@ HistogramBase* LinearHistogram::FactoryTimeGet(std::string_view name, } HistogramBase* LinearHistogram::FactoryGet(const std::string& name, - Sample minimum, - Sample maximum, + Sample32 minimum, + Sample32 maximum, size_t bucket_count, int32_t flags) { return FactoryGetInternal(name, minimum, maximum, bucket_count, flags); @@ -845,8 +844,8 @@ HistogramBase* LinearHistogram::FactoryTimeGet(const std::string& name, } HistogramBase* LinearHistogram::FactoryGet(const char* name, - Sample minimum, - Sample maximum, + Sample32 minimum, + Sample32 maximum, size_t bucket_count, int32_t flags) { return FactoryGetInternal(name, minimum, maximum, bucket_count, flags); @@ -873,8 +872,8 @@ std::unique_ptr LinearHistogram::PersistentCreate( HistogramBase* LinearHistogram::FactoryGetWithRangeDescription( std::string_view name, - Sample minimum, - Sample maximum, + Sample32 minimum, + Sample32 maximum, size_t bucket_count, int32_t flags, const DescriptionPair descriptions[]) { @@ -928,8 +927,8 @@ std::string LinearHistogram::GetAsciiBucketRange(size_t i) const { } // static -void LinearHistogram::InitializeBucketRanges(Sample minimum, - Sample maximum, +void LinearHistogram::InitializeBucketRanges(Sample32 minimum, + Sample32 maximum, BucketRanges* ranges) { double min = minimum; double max = maximum; @@ -938,7 +937,7 @@ void LinearHistogram::InitializeBucketRanges(Sample minimum, for (size_t i = 1; i < bucket_count; ++i) { double linear_range = (min * (bucket_count - 1 - i) + max * (i - 1)) / (bucket_count - 2); - auto range = static_cast(linear_range + 0.5); + auto range = static_cast(linear_range + 0.5); ranges->set_range(i, range); } ranges->set_range(ranges->bucket_count(), HistogramBase::kSampleType_MAX); @@ -947,8 +946,8 @@ void LinearHistogram::InitializeBucketRanges(Sample minimum, // static HistogramBase* LinearHistogram::FactoryGetInternal(std::string_view name, - Sample minimum, - Sample maximum, + Sample32 minimum, + Sample32 maximum, size_t bucket_count, int32_t flags) { return FactoryGetWithRangeDescription(name, minimum, maximum, bucket_count, @@ -961,10 +960,10 @@ HistogramBase* LinearHistogram::FactoryTimeGetInternal(std::string_view name, TimeDelta maximum, size_t bucket_count, int32_t flags) { - DCHECK_LT(minimum.InMilliseconds(), std::numeric_limits::max()); - DCHECK_LT(maximum.InMilliseconds(), std::numeric_limits::max()); - return FactoryGetInternal(name, static_cast(minimum.InMilliseconds()), - static_cast(maximum.InMilliseconds()), + DCHECK_LT(minimum.InMilliseconds(), std::numeric_limits::max()); + DCHECK_LT(maximum.InMilliseconds(), std::numeric_limits::max()); + return FactoryGetInternal(name, static_cast(minimum.InMilliseconds()), + static_cast(maximum.InMilliseconds()), bucket_count, flags); } @@ -1001,8 +1000,8 @@ HistogramBase* LinearHistogram::DeserializeInfoImpl(PickleIterator* iter) { //------------------------------------------------------------------------------ ScaledLinearHistogram::ScaledLinearHistogram(std::string_view name, - Sample minimum, - Sample maximum, + Sample32 minimum, + Sample32 maximum, size_t bucket_count, int32_t scale, int32_t flags) @@ -1015,7 +1014,7 @@ ScaledLinearHistogram::ScaledLinearHistogram(std::string_view name, DCHECK(histogram_); DCHECK_LT(1, scale); DCHECK_EQ(1, minimum); - CHECK_EQ(static_cast(bucket_count), maximum - minimum + 2) + CHECK_EQ(static_cast(bucket_count), maximum - minimum + 2) << " ScaledLinearHistogram requires buckets of size 1"; // Normally, |histogram_| should have type LINEAR_HISTOGRAM or be @@ -1030,8 +1029,8 @@ ScaledLinearHistogram::ScaledLinearHistogram(std::string_view name, } ScaledLinearHistogram::ScaledLinearHistogram(const std::string& name, - Sample minimum, - Sample maximum, + Sample32 minimum, + Sample32 maximum, size_t bucket_count, int32_t scale, int32_t flags) @@ -1043,8 +1042,8 @@ ScaledLinearHistogram::ScaledLinearHistogram(const std::string& name, flags) {} ScaledLinearHistogram::ScaledLinearHistogram(const char* name, - Sample minimum, - Sample maximum, + Sample32 minimum, + Sample32 maximum, size_t bucket_count, int32_t scale, int32_t flags) @@ -1057,7 +1056,7 @@ ScaledLinearHistogram::ScaledLinearHistogram(const char* name, ScaledLinearHistogram::~ScaledLinearHistogram() = default; -void ScaledLinearHistogram::AddScaledCount(Sample value, int64_t count) { +void ScaledLinearHistogram::AddScaledCount(Sample32 value, int64_t count) { if (histogram_->GetHistogramType() == DUMMY_HISTOGRAM) { return; } @@ -1071,7 +1070,7 @@ void ScaledLinearHistogram::AddScaledCount(Sample value, int64_t count) { DCHECK_EQ(histogram_->GetHistogramType(), LINEAR_HISTOGRAM); LinearHistogram* histogram = static_cast(histogram_); - const auto max_value = static_cast(histogram->bucket_count() - 1); + const auto max_value = static_cast(histogram->bucket_count() - 1); value = std::clamp(value, 0, max_value); int64_t scaled_count = count / scale_; @@ -1085,7 +1084,7 @@ void ScaledLinearHistogram::AddScaledCount(Sample value, int64_t count) { &remainders_[static_cast(value)], remainder); // If remainder passes 1/2 scale, increment main count (thus rounding up). // The remainder is decremented by the full scale, though, which will - // cause it to go negative and thus requrire another increase by the full + // cause it to go negative and thus require another increase by the full // scale amount before another bump of the scaled count. if (remainder >= scale_ / 2) { scaled_count += 1; @@ -1207,7 +1206,7 @@ HistogramBase* BooleanHistogram::DeserializeInfoImpl(PickleIterator* iter) { class CustomHistogram::Factory : public Histogram::Factory { public: Factory(std::string_view name, - const std::vector* custom_ranges, + const std::vector* custom_ranges, int32_t flags) : Histogram::Factory(name, CUSTOM_HISTOGRAM, 0, 0, 0, flags) { custom_ranges_ = custom_ranges; @@ -1222,8 +1221,9 @@ class CustomHistogram::Factory : public Histogram::Factory { std::vector ranges = *custom_ranges_; ranges.push_back(0); // Ensure we have a zero value. ranges.push_back(HistogramBase::kSampleType_MAX); - ranges::sort(ranges); - ranges.erase(ranges::unique(ranges), ranges.end()); + std::ranges::sort(ranges); + auto removed = std::ranges::unique(ranges); + ranges.erase(removed.begin(), removed.end()); BucketRanges* bucket_ranges = new BucketRanges(ranges.size()); for (size_t i = 0; i < ranges.size(); i++) { @@ -1239,26 +1239,26 @@ class CustomHistogram::Factory : public Histogram::Factory { } private: - raw_ptr> custom_ranges_; + raw_ptr> custom_ranges_; }; HistogramBase* CustomHistogram::FactoryGet( std::string_view name, - const std::vector& custom_ranges, + const std::vector& custom_ranges, int32_t flags) { return FactoryGetInternal(name, custom_ranges, flags); } HistogramBase* CustomHistogram::FactoryGet( const std::string& name, - const std::vector& custom_ranges, + const std::vector& custom_ranges, int32_t flags) { return FactoryGetInternal(name, custom_ranges, flags); } HistogramBase* CustomHistogram::FactoryGet( const char* name, - const std::vector& custom_ranges, + const std::vector& custom_ranges, int32_t flags) { return FactoryGetInternal(name, custom_ranges, flags); } @@ -1279,10 +1279,10 @@ HistogramType CustomHistogram::GetHistogramType() const { } // static -std::vector CustomHistogram::ArrayToCustomEnumRanges( - base::span values) { - std::vector all_values; - for (Sample value : values) { +std::vector CustomHistogram::ArrayToCustomEnumRanges( + base::span values) { + std::vector all_values; + for (Sample32 value : values) { all_values.push_back(value); // Ensure that a guard bucket is added. If we end up with duplicate @@ -1307,7 +1307,7 @@ CustomHistogram::CustomHistogram( void CustomHistogram::SerializeInfoImpl(Pickle* pickle) const { Histogram::SerializeInfoImpl(pickle); - // Serialize ranges. First and last ranges are alwasy 0 and INT_MAX, so don't + // Serialize ranges. First and last ranges are always 0 and INT_MAX, so don't // write them. for (size_t i = 1; i < bucket_ranges()->bucket_count(); ++i) { pickle->WriteInt(bucket_ranges()->range(i)); @@ -1329,9 +1329,9 @@ HistogramBase* CustomHistogram::DeserializeInfoImpl(PickleIterator* iter) { } // First and last ranges are not serialized. - std::vector sample_ranges(bucket_count - 1); + std::vector sample_ranges(bucket_count - 1); - for (Sample& sample : sample_ranges) { + for (Sample32& sample : sample_ranges) { if (!iter->ReadInt(&sample)) { return nullptr; } @@ -1353,7 +1353,7 @@ HistogramBase* CustomHistogram::DeserializeInfoImpl(PickleIterator* iter) { // static HistogramBase* CustomHistogram::FactoryGetInternal( std::string_view name, - const std::vector& custom_ranges, + const std::vector& custom_ranges, int32_t flags) { CHECK(ValidateCustomRanges(custom_ranges)); @@ -1362,9 +1362,9 @@ HistogramBase* CustomHistogram::FactoryGetInternal( // static bool CustomHistogram::ValidateCustomRanges( - const std::vector& custom_ranges) { + const std::vector& custom_ranges) { bool has_valid_range = false; - for (Sample sample : custom_ranges) { + for (Sample32 sample : custom_ranges) { if (sample < 0 || sample > HistogramBase::kSampleType_MAX - 1) { return false; } diff --git a/naiveproxy/src/base/metrics/histogram.h b/naiveproxy/src/base/metrics/histogram.h index 1847380c55..a0b3462159 100644 --- a/naiveproxy/src/base/metrics/histogram.h +++ b/naiveproxy/src/base/metrics/histogram.h @@ -102,11 +102,11 @@ class BASE_EXPORT Histogram : public HistogramBase { public: // Initialize maximum number of buckets in histograms as 1000, plus over and // under. This must be a value that fits in a uint32_t (since that's how we - // serialize bucket counts) as well as a Sample (since samples can be up to + // serialize bucket counts) as well as a Sample32 (since samples can be up to // this value). static constexpr size_t kBucketCount_MAX = 1002; - typedef std::vector Counts; + using Counts = std::vector; Histogram(const Histogram&) = delete; Histogram& operator=(const Histogram&) = delete; @@ -124,8 +124,8 @@ class BASE_EXPORT Histogram : public HistogramBase { // more buckets than the range of numbers; having more buckets than 1 per // value in the range would be nonsensical. static HistogramBase* FactoryGet(std::string_view name, - Sample minimum, - Sample maximum, + Sample32 minimum, + Sample32 maximum, size_t bucket_count, int32_t flags); static HistogramBase* FactoryTimeGet(std::string_view name, @@ -143,8 +143,8 @@ class BASE_EXPORT Histogram : public HistogramBase { // char* |name| param, to avoid code bloat from the std::string constructor // being inlined into call sites. static HistogramBase* FactoryGet(const std::string& name, - Sample minimum, - Sample maximum, + Sample32 minimum, + Sample32 maximum, size_t bucket_count, int32_t flags); static HistogramBase* FactoryTimeGet(const std::string& name, @@ -159,8 +159,8 @@ class BASE_EXPORT Histogram : public HistogramBase { int32_t flags); static HistogramBase* FactoryGet(const char* name, - Sample minimum, - Sample maximum, + Sample32 minimum, + Sample32 maximum, size_t bucket_count, int32_t flags); static HistogramBase* FactoryTimeGet(const char* name, @@ -183,8 +183,8 @@ class BASE_EXPORT Histogram : public HistogramBase { HistogramSamples::Metadata* meta, HistogramSamples::Metadata* logged_meta); - static void InitializeBucketRanges(Sample minimum, - Sample maximum, + static void InitializeBucketRanges(Sample32 minimum, + Sample32 maximum, BucketRanges* ranges); // This constant if for FindCorruption. Since snapshots of histograms are @@ -208,9 +208,9 @@ class BASE_EXPORT Histogram : public HistogramBase { // Accessors for factory construction, serialization and testing. //---------------------------------------------------------------------------- const BucketRanges* bucket_ranges() const; - Sample declared_min() const; - Sample declared_max() const; - virtual Sample ranges(size_t i) const; + Sample32 declared_min() const; + Sample32 declared_max() const; + virtual Sample32 ranges(size_t i) const; virtual size_t bucket_count() const; // This function validates histogram construction arguments. It returns false @@ -219,18 +219,18 @@ class BASE_EXPORT Histogram : public HistogramBase { // Note. Currently it allow some bad input, e.g. 0 as minimum, but silently // converts it to good input: 1. static bool InspectConstructionArguments(std::string_view name, - Sample* minimum, - Sample* maximum, + Sample32* minimum, + Sample32* maximum, size_t* bucket_count); // HistogramBase implementation: uint64_t name_hash() const override; HistogramType GetHistogramType() const override; - bool HasConstructionArguments(Sample expected_minimum, - Sample expected_maximum, + bool HasConstructionArguments(Sample32 expected_minimum, + Sample32 expected_maximum, size_t expected_bucket_count) const override; - void Add(Sample value) override; - void AddCount(Sample value, int count) override; + void Add(Sample32 value) override; + void AddCount(Sample32 value, int count) override; std::unique_ptr SnapshotSamples() const override; std::unique_ptr SnapshotUnloggedSamples() const override; void MarkSamplesAsLogged(const HistogramSamples& samples) final; @@ -289,8 +289,8 @@ class BASE_EXPORT Histogram : public HistogramBase { static HistogramBase* DeserializeInfoImpl(base::PickleIterator* iter); static HistogramBase* FactoryGetInternal(std::string_view name, - Sample minimum, - Sample maximum, + Sample32 minimum, + Sample32 maximum, size_t bucket_count, int32_t flags); static HistogramBase* FactoryTimeGetInternal(std::string_view name, @@ -346,8 +346,8 @@ class BASE_EXPORT LinearHistogram : public Histogram { /* minimum should start from 1. 0 is as minimum is invalid. 0 is an implicit default underflow bucket. */ static HistogramBase* FactoryGet(std::string_view name, - Sample minimum, - Sample maximum, + Sample32 minimum, + Sample32 maximum, size_t bucket_count, int32_t flags); static HistogramBase* FactoryTimeGet(std::string_view name, @@ -360,8 +360,8 @@ class BASE_EXPORT LinearHistogram : public Histogram { // const char* |name| param, to avoid code bloat from the std::string // constructor being inlined into call sites. static HistogramBase* FactoryGet(const std::string& name, - Sample minimum, - Sample maximum, + Sample32 minimum, + Sample32 maximum, size_t bucket_count, int32_t flags); static HistogramBase* FactoryTimeGet(const std::string& name, @@ -371,8 +371,8 @@ class BASE_EXPORT LinearHistogram : public Histogram { int32_t flags); static HistogramBase* FactoryGet(const char* name, - Sample minimum, - Sample maximum, + Sample32 minimum, + Sample32 maximum, size_t bucket_count, int32_t flags); static HistogramBase* FactoryTimeGet(const char* name, @@ -391,7 +391,7 @@ class BASE_EXPORT LinearHistogram : public Histogram { HistogramSamples::Metadata* logged_meta); struct DescriptionPair { - Sample sample; + Sample32 sample; const char* description; // Null means end of a list of pairs. }; @@ -402,14 +402,14 @@ class BASE_EXPORT LinearHistogram : public Histogram { // "description" field. static HistogramBase* FactoryGetWithRangeDescription( std::string_view name, - Sample minimum, - Sample maximum, + Sample32 minimum, + Sample32 maximum, size_t bucket_count, int32_t flags, const DescriptionPair descriptions[]); - static void InitializeBucketRanges(Sample minimum, - Sample maximum, + static void InitializeBucketRanges(Sample32 minimum, + Sample32 maximum, BucketRanges* ranges); // Overridden from Histogram: @@ -437,8 +437,8 @@ class BASE_EXPORT LinearHistogram : public Histogram { static HistogramBase* DeserializeInfoImpl(base::PickleIterator* iter); static HistogramBase* FactoryGetInternal(std::string_view name, - Sample minimum, - Sample maximum, + Sample32 minimum, + Sample32 maximum, size_t bucket_count, int32_t flags); static HistogramBase* FactoryTimeGetInternal(std::string_view name, @@ -450,7 +450,7 @@ class BASE_EXPORT LinearHistogram : public Histogram { // For some ranges, we store a printable description of a bucket range. // If there is no description, then GetAsciiBucketRange() uses parent class // to provide a description. - typedef std::map BucketDescriptionMap; + typedef std::map BucketDescriptionMap; BucketDescriptionMap bucket_description_; }; @@ -465,14 +465,14 @@ class BASE_EXPORT LinearHistogram : public Histogram { // cause overflows of the 31-bit counters, usually with an enum as the value. class BASE_EXPORT ScaledLinearHistogram { using AtomicCount = Histogram::AtomicCount; - using Sample = Histogram::Sample; + using Sample32 = Histogram::Sample32; public: // Currently only works with "exact" linear histograms: minimum=1, maximum=N, // and bucket_count=N+1. ScaledLinearHistogram(std::string_view name, - Sample minimum, - Sample maximum, + Sample32 minimum, + Sample32 maximum, size_t bucket_count, int32_t scale, int32_t flags); @@ -481,14 +481,14 @@ class BASE_EXPORT ScaledLinearHistogram { // char* |name| param, to avoid code bloat from the std::string constructor // being inlined into call sites. ScaledLinearHistogram(const char* name, - Sample minimum, - Sample maximum, + Sample32 minimum, + Sample32 maximum, size_t bucket_count, int32_t scale, int32_t flags); ScaledLinearHistogram(const std::string& name, - Sample minimum, - Sample maximum, + Sample32 minimum, + Sample32 maximum, size_t bucket_count, int32_t scale, int32_t flags); @@ -502,7 +502,7 @@ class BASE_EXPORT ScaledLinearHistogram { // the accumulated remainder by |count|%|scale|. An additional increment // is done when the remainder has grown sufficiently large. // The value after scaling must fit into 32-bit signed integer. - void AddScaledCount(Sample value, int64_t count); + void AddScaledCount(Sample32 value, int64_t count); int32_t scale() const { return scale_; } HistogramBase* histogram() { return histogram_; } @@ -579,17 +579,17 @@ class BASE_EXPORT CustomHistogram : public Histogram { // compatibility). The limits can be unordered or contain duplication, but // client should not depend on this. static HistogramBase* FactoryGet(std::string_view name, - const std::vector& custom_ranges, + const std::vector& custom_ranges, int32_t flags); // Overload of the above function that take a const std::string& or const // char* |name| param, to avoid code bloat from the std::string constructor // being inlined into call sites. static HistogramBase* FactoryGet(const std::string& name, - const std::vector& custom_ranges, + const std::vector& custom_ranges, int32_t flags); static HistogramBase* FactoryGet(const char* name, - const std::vector& custom_ranges, + const std::vector& custom_ranges, int32_t flags); CustomHistogram(const CustomHistogram&) = delete; @@ -612,8 +612,8 @@ class BASE_EXPORT CustomHistogram : public Histogram { // This function ensures that a guard bucket exists right after any // valid sample value (unless the next higher sample is also a valid value), // so that invalid samples never fall into the same bucket as valid samples. - static std::vector ArrayToCustomEnumRanges( - base::span values); + static std::vector ArrayToCustomEnumRanges( + base::span values); protected: class Factory; @@ -637,10 +637,10 @@ class BASE_EXPORT CustomHistogram : public Histogram { static HistogramBase* FactoryGetInternal( std::string_view name, - const std::vector& custom_ranges, + const std::vector& custom_ranges, int32_t flags); - static bool ValidateCustomRanges(const std::vector& custom_ranges); + static bool ValidateCustomRanges(const std::vector& custom_ranges); }; namespace internal { diff --git a/naiveproxy/src/base/metrics/histogram_base.cc b/naiveproxy/src/base/metrics/histogram_base.cc index e8fad6142b..dce1ca95da 100644 --- a/naiveproxy/src/base/metrics/histogram_base.cc +++ b/naiveproxy/src/base/metrics/histogram_base.cc @@ -70,7 +70,7 @@ HistogramBase* DeserializeHistogramInfo(PickleIterator* iter) { } } -HistogramBase::CountAndBucketData::CountAndBucketData(Count count, +HistogramBase::CountAndBucketData::CountAndBucketData(Count32 count, int64_t sum, Value::List buckets) : count(count), sum(sum), buckets(std::move(buckets)) {} @@ -83,7 +83,7 @@ HistogramBase::CountAndBucketData::CountAndBucketData( HistogramBase::CountAndBucketData& HistogramBase::CountAndBucketData::operator=( CountAndBucketData&& other) = default; -const HistogramBase::Sample HistogramBase::kSampleType_MAX = INT_MAX; +const HistogramBase::Sample32 HistogramBase::kSampleType_MAX = INT_MAX; HistogramBase::HistogramBase(const char* name) : histogram_name_(name), flags_(kNoFlags) {} @@ -110,7 +110,7 @@ bool HistogramBase::HasFlags(int32_t flags) const { return (this->flags() & flags) == flags; } -void HistogramBase::AddScaled(Sample value, int count, int scale) { +void HistogramBase::AddScaled(Sample32 value, int count, int scale) { DCHECK_GT(scale, 0); // Convert raw count and probabilistically round up/down if the remainder @@ -128,16 +128,16 @@ void HistogramBase::AddScaled(Sample value, int count, int scale) { AddCount(value, count_scaled); } -void HistogramBase::AddKilo(Sample value, int count) { +void HistogramBase::AddKilo(Sample32 value, int count) { AddScaled(value, count, 1000); } -void HistogramBase::AddKiB(Sample value, int count) { +void HistogramBase::AddKiB(Sample32 value, int count) { AddScaled(value, count, 1024); } void HistogramBase::AddTimeMillisecondsGranularity(const TimeDelta& time) { - Add(saturated_cast(time.InMilliseconds())); + Add(saturated_cast(time.InMilliseconds())); } void HistogramBase::AddTimeMicrosecondsGranularity(const TimeDelta& time) { @@ -145,7 +145,7 @@ void HistogramBase::AddTimeMicrosecondsGranularity(const TimeDelta& time) { // clocks. High-resolution metrics cannot make use of low-resolution data and // reporting it merely adds noise to the metric. https://crbug.com/807615#c16 if (TimeTicks::IsHighResolution()) { - Add(saturated_cast(time.InMicroseconds())); + Add(saturated_cast(time.InMicroseconds())); } } @@ -182,7 +182,7 @@ void HistogramBase::WriteJSON(std::string* output, serializer.Serialize(root); } -void HistogramBase::FindAndRunCallbacks(HistogramBase::Sample sample) const { +void HistogramBase::FindAndRunCallbacks(HistogramBase::Sample32 sample) const { StatisticsRecorder::GlobalSampleCallback global_sample_callback = StatisticsRecorder::global_sample_callback(); if (global_sample_callback) { @@ -201,15 +201,15 @@ void HistogramBase::FindAndRunCallbacks(HistogramBase::Sample sample) const { HistogramBase::CountAndBucketData HistogramBase::GetCountAndBucketData() const { std::unique_ptr snapshot = SnapshotSamples(); - Count count = snapshot->TotalCount(); + Count32 count = snapshot->TotalCount(); int64_t sum = snapshot->sum(); std::unique_ptr it = snapshot->Iterator(); Value::List buckets; while (!it->Done()) { - Sample bucket_min; + Sample32 bucket_min; int64_t bucket_max; - Count bucket_count; + Count32 bucket_count; it->Get(&bucket_min, &bucket_max, &bucket_count); Value::Dict bucket_value; @@ -240,11 +240,11 @@ void HistogramBase::WriteAsciiBucketGraph(double x_count, } const std::string HistogramBase::GetSimpleAsciiBucketRange( - Sample sample) const { + Sample32 sample) const { return StringPrintf("%d", sample); } -void HistogramBase::WriteAsciiBucketValue(Count current, +void HistogramBase::WriteAsciiBucketValue(Count32 current, double scaled_sum, std::string* output) const { StringAppendF(output, " (%d = %3.1f%%)", current, current / scaled_sum); @@ -262,12 +262,15 @@ char const* HistogramBase::GetPermanentName(std::string_view name) { // A set of histogram names that provides the "permanent" lifetime required // by histogram objects for those strings that are not already code constants // or held in persistent memory. - static base::NoDestructor> permanent_names; + static base::NoDestructor>> permanent_names; static base::NoDestructor permanent_names_lock; AutoLock lock(*permanent_names_lock); - auto result = permanent_names->insert(std::string(name)); - return result.first->c_str(); + auto it = permanent_names->lower_bound(name); + if (it == permanent_names->end() || *it != name) { + it = permanent_names->emplace_hint(it, name); + } + return it->c_str(); } } // namespace base diff --git a/naiveproxy/src/base/metrics/histogram_base.h b/naiveproxy/src/base/metrics/histogram_base.h index 1c1eaaee6f..f77970bb47 100644 --- a/naiveproxy/src/base/metrics/histogram_base.h +++ b/naiveproxy/src/base/metrics/histogram_base.h @@ -94,11 +94,11 @@ BASE_EXPORT HistogramBase* DeserializeHistogramInfo(base::PickleIterator* iter); class BASE_EXPORT HistogramBase { public: - typedef int32_t Sample; // Used for samples. - typedef subtle::Atomic32 AtomicCount; // Used to count samples. - typedef int32_t Count; // Used to manipulate counts in temporaries. + using Sample32 = int32_t; // Used for samples. + using AtomicCount = subtle::Atomic32; // Used to count samples. + using Count32 = int32_t; // Used to manipulate counts in temporaries. - static const Sample kSampleType_MAX; // INT_MAX + static const Sample32 kSampleType_MAX; // INT_MAX enum Flags { kNoFlags = 0x0, @@ -173,28 +173,28 @@ class BASE_EXPORT HistogramBase { // Whether the histogram has construction arguments as parameters specified. // For histograms that don't have the concept of minimum, maximum or // bucket_count, this function always returns false. - virtual bool HasConstructionArguments(Sample expected_minimum, - Sample expected_maximum, + virtual bool HasConstructionArguments(Sample32 expected_minimum, + Sample32 expected_maximum, size_t expected_bucket_count) const = 0; - virtual void Add(Sample value) = 0; + virtual void Add(Sample32 value) = 0; // In Add function the |value| bucket is increased by one, but in some use // cases we need to increase this value by an arbitrary integer. AddCount // function increases the |value| bucket by |count|. |count| should be greater // than or equal to 1. - virtual void AddCount(Sample value, int count) = 0; + virtual void AddCount(Sample32 value, int count) = 0; // Similar to above but divides |count| by the |scale| amount. Probabilistic // rounding is used to yield a reasonably accurate total when many samples // are added. Methods for common cases of scales 1000 and 1024 are included. // The ScaledLinearHistogram (which can also used be for enumerations) may be // a better (and faster) solution. - void AddScaled(Sample value, int count, int scale); - void AddKilo(Sample value, int count); // scale=1000 - void AddKiB(Sample value, int count); // scale=1024 + void AddScaled(Sample32 value, int count, int scale); + void AddKilo(Sample32 value, int count); // scale=1000 + void AddKiB(Sample32 value, int count); // scale=1024 - // Convenient functions that call Add(Sample). + // Convenient functions that call Add(Sample32). void AddTime(const TimeDelta& time) { AddTimeMillisecondsGranularity(time); } void AddTimeMillisecondsGranularity(const TimeDelta& time); // Note: AddTimeMicrosecondsGranularity() drops the report if this client @@ -299,11 +299,11 @@ class BASE_EXPORT HistogramBase { enum ReportActivity { HISTOGRAM_CREATED, HISTOGRAM_LOOKUP }; struct BASE_EXPORT CountAndBucketData { - Count count; + Count32 count; int64_t sum; Value::List buckets; - CountAndBucketData(Count count, int64_t sum, Value::List buckets); + CountAndBucketData(Count32 count, int64_t sum, Value::List buckets); ~CountAndBucketData(); CountAndBucketData(CountAndBucketData&& other); @@ -327,17 +327,17 @@ class BASE_EXPORT HistogramBase { std::string* output) const; // Return a string description of what goes in a given bucket. - const std::string GetSimpleAsciiBucketRange(Sample sample) const; + const std::string GetSimpleAsciiBucketRange(Sample32 sample) const; // Write textual description of the bucket contents (relative to histogram). // Output is the count in the buckets, as well as the percentage. - void WriteAsciiBucketValue(Count current, + void WriteAsciiBucketValue(Count32 current, double scaled_sum, std::string* output) const; // Retrieves the registered callbacks for this histogram, if any, and runs // them passing |sample| as the parameter. - void FindAndRunCallbacks(Sample sample) const; + void FindAndRunCallbacks(Sample32 sample) const; // Gets a permanent string that can be used for histogram objects when the // original is not a code constant or held in persistent memory. diff --git a/naiveproxy/src/base/metrics/histogram_functions.h b/naiveproxy/src/base/metrics/histogram_functions.h index effa04b16f..9baec5417d 100644 --- a/naiveproxy/src/base/metrics/histogram_functions.h +++ b/naiveproxy/src/base/metrics/histogram_functions.h @@ -68,8 +68,9 @@ BASE_EXPORT void UmaHistogramExactLinear(std::string_view name, // base::UmaHistogramEnumeration("My.Enumeration", // NewTabPageAction::kClickTitle); // -// Note that there are code that refer implementation details of this function. -// Keep them synchronized. +// `kMaxValue` should be 1000 or less. +// Note that there is code that refers to implementation details of this +// function. Keep it synchronized. // LINT.IfChange(UmaHistogramEnumeration) template void UmaHistogramEnumeration(std::string_view name, T sample) { @@ -81,6 +82,8 @@ void UmaHistogramEnumeration(std::string_view name, T sample) { "Enumeration's kMaxValue is out of range of INT_MAX!"); DCHECK_LE(static_cast(sample), static_cast(T::kMaxValue)); + // While UmaHistogramExactLinear’s documentation states that the third + // argument should be 101 or less, a value up to 1001 is actually accepted. return UmaHistogramExactLinear(name, static_cast(sample), static_cast(T::kMaxValue) + 1); } @@ -101,24 +104,27 @@ void UmaHistogramEnumeration(std::string_view name, T sample) { // kCount); // Note: The value in |sample| must be strictly less than |enum_size|. This is // otherwise functionally equivalent to the above. +// `enum_size` must be less than or equal to 1001. template void UmaHistogramEnumeration(std::string_view name, T sample, T enum_size) { static_assert(std::is_enum_v, "T is not an enum."); DCHECK_LE(static_cast(enum_size), static_cast(INT_MAX)); DCHECK_LT(static_cast(sample), static_cast(enum_size)); + // While UmaHistogramExactLinear’s documentation states that the third + // argument should be 101 or less, a value up to 1001 is actually accepted. return UmaHistogramExactLinear(name, static_cast(sample), static_cast(enum_size)); } // LINT.ThenChange(/base/metrics/histogram_functions_internal_overloads.h:UmaHistogramEnumeration) -// For adding boolean sample to histogram. +// For adding a boolean sample to histogram. // Sample usage: // base::UmaHistogramBoolean("My.Boolean", true) // LINT.IfChange(UmaHistogramBoolean) BASE_EXPORT void UmaHistogramBoolean(std::string_view name, bool sample); // LINT.ThenChange(/base/metrics/histogram_functions_internal_overloads.h:UmaHistogramBoolean) -// For adding histogram sample denoting a percentage. +// For adding a histogram sample denoting a percentage. // Percents are integers between 1 and 100, inclusively. // Sample usage: // base::UmaHistogramPercentage("My.Percent", 69) @@ -130,7 +136,7 @@ BASE_EXPORT void UmaHistogramPercentageObsoleteDoNotUse(std::string_view name, int percent); // LINT.ThenChange(/base/metrics/histogram_functions_internal_overloads.h:UmaHistogramPercentage) -// For adding counts histogram. +// For adding a counts histogram. // Sample usage: // base::UmaHistogramCustomCounts("My.Counts", some_value, 1, 600, 30) // LINT.IfChange(UmaHistogramCounts) @@ -149,7 +155,7 @@ BASE_EXPORT void UmaHistogramCounts1M(std::string_view name, int sample); BASE_EXPORT void UmaHistogramCounts10M(std::string_view name, int sample); // LINT.ThenChange(/base/metrics/histogram_functions_internal_overloads.h:UmaHistogramCounts) -// For histograms storing times. It uses milliseconds granularity. +// For histograms storing times. Uses milliseconds granularity. // LINT.IfChange(UmaHistogramTimes) BASE_EXPORT void UmaHistogramCustomTimes(std::string_view name, TimeDelta sample, @@ -162,6 +168,7 @@ BASE_EXPORT void UmaHistogramCustomTimes(std::string_view name, BASE_EXPORT void UmaHistogramTimes(std::string_view name, TimeDelta sample); // For medium timings up to 3 minutes (50 buckets). +// TODO(crbug.com/353712922): rename and disambiguate this function/macro BASE_EXPORT void UmaHistogramMediumTimes(std::string_view name, TimeDelta sample); // For time intervals up to 1 hr (50 buckets). @@ -185,7 +192,7 @@ BASE_EXPORT void UmaHistogramMicrosecondsTimes(std::string_view name, TimeDelta sample); // LINT.ThenChange(/base/metrics/histogram_functions_internal_overloads.h:UmaHistogramMicrosecondsTimes) -// For recording memory related histograms. +// For recording memory-related histograms. // LINT.IfChange(UmaHistogramMemory) // Used to measure common KB-granularity memory stats. Range is up to 500M. BASE_EXPORT void UmaHistogramMemoryKB(std::string_view name, int sample); @@ -198,7 +205,7 @@ BASE_EXPORT void UmaHistogramMemoryLargeMB(std::string_view name, int sample); // For recording sparse histograms. // The |sample| can be a negative or non-negative number. // -// Sparse histograms are well suited for recording counts of exact sample values +// Sparse histograms are well-suited for recording counts of exact sample values // that are sparsely distributed over a relatively large range, in cases where // ultra-fast performance is not critical. For instance, Sqlite.Version.* are // sparse because for any given database, there's going to be exactly one diff --git a/naiveproxy/src/base/metrics/histogram_macros.h b/naiveproxy/src/base/metrics/histogram_macros.h index c527bbb638..5a1d37ea35 100644 --- a/naiveproxy/src/base/metrics/histogram_macros.h +++ b/naiveproxy/src/base/metrics/histogram_macros.h @@ -423,7 +423,8 @@ enum class ScopedHistogramTiming { constant_histogram_name, index, constant_maximum, \ histogram_add_method_invocation, histogram_factory_get_invocation) \ do { \ - static std::atomic_uintptr_t atomic_histograms[constant_maximum]; \ + static std::array \ + atomic_histograms; \ DCHECK_LE(0, index); \ DCHECK_LT(index, constant_maximum); \ HISTOGRAM_POINTER_USE( \ diff --git a/naiveproxy/src/base/metrics/histogram_macros_internal.h b/naiveproxy/src/base/metrics/histogram_macros_internal.h index 26526d3058..138ce81b1d 100644 --- a/naiveproxy/src/base/metrics/histogram_macros_internal.h +++ b/naiveproxy/src/base/metrics/histogram_macros_internal.h @@ -184,10 +184,10 @@ struct EnumSizeTraits { // Similar to the previous macro but intended for enumerations. This delegates // the work to the previous macro, but supports scoped enumerations as well by -// forcing an explicit cast to the HistogramBase::Sample integral type. +// forcing an explicit cast to the HistogramBase::Sample32 integral type. // // Note the range checks verify two separate issues: -// - that the declared enum size isn't out of range of HistogramBase::Sample +// - that the declared enum size isn't out of range of HistogramBase::Sample32 // - that the declared enum size is > 0 // // TODO(dcheng): This should assert that the passed in types are actually enum @@ -206,11 +206,11 @@ struct EnumSizeTraits { static_assert( \ static_cast(boundary) < \ static_cast( \ - std::numeric_limits::max()), \ - "|boundary| is out of range of HistogramBase::Sample"); \ + std::numeric_limits::max()), \ + "|boundary| is out of range of HistogramBase::Sample32"); \ INTERNAL_HISTOGRAM_EXACT_LINEAR_WITH_FLAG( \ - name, static_cast(sample), \ - static_cast(boundary), flag); \ + name, static_cast(sample), \ + static_cast(boundary), flag); \ } while (0) #define INTERNAL_HISTOGRAM_SCALED_ENUMERATION_WITH_FLAG(name, sample, count, \ @@ -224,11 +224,11 @@ struct EnumSizeTraits { static_assert( \ static_cast(boundary) < \ static_cast( \ - std::numeric_limits::max()), \ - "|boundary| is out of range of HistogramBase::Sample"); \ + std::numeric_limits::max()), \ + "|boundary| is out of range of HistogramBase::Sample32"); \ INTERNAL_HISTOGRAM_SCALED_EXACT_LINEAR_WITH_FLAG( \ - name, static_cast(sample), count, \ - static_cast(boundary), scale, flag); \ + name, static_cast(sample), count, \ + static_cast(boundary), scale, flag); \ } while (0) // This is a helper macro used by other macros and shouldn't be used directly. diff --git a/naiveproxy/src/base/metrics/histogram_nocompile.nc b/naiveproxy/src/base/metrics/histogram_nocompile.nc index 7e9d540619..7ce81c83f4 100644 --- a/naiveproxy/src/base/metrics/histogram_nocompile.nc +++ b/naiveproxy/src/base/metrics/histogram_nocompile.nc @@ -40,8 +40,8 @@ void MaxOutOfRange() { enum class TypeA { A = -1 }; enum class TypeB : uint32_t { B = 0xffffffff }; - UMA_HISTOGRAM_ENUMERATION("", TypeA::A, TypeA::A); // expected-error {{|boundary| is out of range of HistogramBase::Sample}} - UMA_HISTOGRAM_ENUMERATION("", TypeB::B, TypeB::B); // expected-error {{|boundary| is out of range of HistogramBase::Sample}} + UMA_HISTOGRAM_ENUMERATION("", TypeA::A, TypeA::A); // expected-error {{|boundary| is out of range of HistogramBase::Sample32}} + UMA_HISTOGRAM_ENUMERATION("", TypeB::B, TypeB::B); // expected-error {{|boundary| is out of range of HistogramBase::Sample32}} } void NoMaxValue() { diff --git a/naiveproxy/src/base/metrics/histogram_samples.cc b/naiveproxy/src/base/metrics/histogram_samples.cc index e1a89c1374..fe89e32de7 100644 --- a/naiveproxy/src/base/metrics/histogram_samples.cc +++ b/naiveproxy/src/base/metrics/histogram_samples.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "base/metrics/histogram_samples.h" #include @@ -40,21 +45,21 @@ class SampleCountPickleIterator : public SampleCountIterator { bool Done() const override; void Next() override; - void Get(HistogramBase::Sample* min, + void Get(HistogramBase::Sample32* min, int64_t* max, - HistogramBase::Count* count) override; + HistogramBase::Count32* count) override; private: const raw_ptr iter_; - HistogramBase::Sample min_; + HistogramBase::Sample32 min_; int64_t max_; - HistogramBase::Count count_; - bool is_done_; + HistogramBase::Count32 count_; + bool is_done_ = false; }; SampleCountPickleIterator::SampleCountPickleIterator(PickleIterator* iter) - : iter_(iter), is_done_(false) { + : iter_(iter) { Next(); } @@ -70,9 +75,9 @@ void SampleCountPickleIterator::Next() { } } -void SampleCountPickleIterator::Get(HistogramBase::Sample* min, +void SampleCountPickleIterator::Get(HistogramBase::Sample32* min, int64_t* max, - HistogramBase::Count* count) { + HistogramBase::Count32* count) { DCHECK(!Done()); *min = min_; *max = max_; @@ -144,7 +149,7 @@ HistogramSamples::AtomicSingleSample::ExtractAndDisable() { bool HistogramSamples::AtomicSingleSample::Accumulate( size_t bucket, - HistogramBase::Count count) { + HistogramBase::Count32 count) { if (count == 0) { return true; } @@ -251,7 +256,7 @@ bool HistogramSamples::Add(const HistogramSamples& other) { bool HistogramSamples::AddFromPickle(PickleIterator* iter) { int64_t sum; - HistogramBase::Count redundant_count; + HistogramBase::Count32 redundant_count; if (!iter->ReadInt64(&sum) || !iter->ReadInt(&redundant_count)) { return false; @@ -310,9 +315,9 @@ void HistogramSamples::Serialize(Pickle* pickle) const { pickle->WriteInt64(sum()); pickle->WriteInt(redundant_count()); - HistogramBase::Sample min; + HistogramBase::Sample32 min; int64_t max; - HistogramBase::Count count; + HistogramBase::Count32 count; for (std::unique_ptr it = Iterator(); !it->Done(); it->Next()) { it->Get(&min, &max, &count); @@ -322,8 +327,8 @@ void HistogramSamples::Serialize(Pickle* pickle) const { } } -bool HistogramSamples::AccumulateSingleSample(HistogramBase::Sample value, - HistogramBase::Count count, +bool HistogramSamples::AccumulateSingleSample(HistogramBase::Sample32 value, + HistogramBase::Count32 count, size_t bucket) { if (single_sample().Accumulate(bucket, count)) { // Success. Update the (separate) sum and redundant-count. @@ -334,7 +339,7 @@ bool HistogramSamples::AccumulateSingleSample(HistogramBase::Sample value, } void HistogramSamples::IncreaseSumAndCount(int64_t sum, - HistogramBase::Count count) { + HistogramBase::Count32 count) { #ifdef ARCH_CPU_64_BITS subtle::NoBarrier_AtomicIncrement(&meta_->sum, sum); #else @@ -344,7 +349,7 @@ void HistogramSamples::IncreaseSumAndCount(int64_t sum, } void HistogramSamples::RecordNegativeSample(NegativeSampleReason reason, - HistogramBase::Count increment) { + HistogramBase::Count32 increment) { UMA_HISTOGRAM_ENUMERATION("UMA.NegativeSamples.Reason", reason, MAX_NEGATIVE_SAMPLE_REASONS); UMA_HISTOGRAM_CUSTOM_COUNTS("UMA.NegativeSamples.Increment", increment, 1, @@ -374,20 +379,20 @@ std::string HistogramSamples::GetAsciiHeader(std::string_view histogram_name, } std::string HistogramSamples::GetAsciiBody() const { - HistogramBase::Count total_count = TotalCount(); + HistogramBase::Count32 total_count = TotalCount(); double scaled_total_count = total_count / 100.0; // Determine how wide the largest bucket range is (how many digits to print), // so that we'll be able to right-align starts for the graphical bars. // Determine which bucket has the largest sample count so that we can // normalize the graphical bar-width relative to that sample count. - HistogramBase::Count largest_count = 0; - HistogramBase::Sample largest_sample = 0; + HistogramBase::Count32 largest_count = 0; + HistogramBase::Sample32 largest_sample = 0; std::unique_ptr it = Iterator(); while (!it->Done()) { - HistogramBase::Sample min; + HistogramBase::Sample32 min; int64_t max; - HistogramBase::Count count; + HistogramBase::Count32 count; it->Get(&min, &max, &count); if (min > largest_sample) { largest_sample = min; @@ -410,9 +415,9 @@ std::string HistogramSamples::GetAsciiBody() const { it = Iterator(); std::string output; while (!it->Done()) { - HistogramBase::Sample min; + HistogramBase::Sample32 min; int64_t max; - HistogramBase::Count count; + HistogramBase::Count32 count; it->Get(&min, &max, &count); // value is min, so display it @@ -421,7 +426,7 @@ std::string HistogramSamples::GetAsciiBody() const { if (const auto range_size = range.size(); print_width >= range_size) { output.append(print_width + 1 - range_size, ' '); } - HistogramBase::Count current_size = round(count * scaling_factor); + HistogramBase::Count32 current_size = round(count * scaling_factor); WriteAsciiBucketGraph(current_size, kLineLength, &output); WriteAsciiBucketValue(count, scaled_total_count, &output); output.append(1, '\n'); @@ -444,14 +449,14 @@ void HistogramSamples::WriteAsciiBucketGraph(double x_count, } } -void HistogramSamples::WriteAsciiBucketValue(HistogramBase::Count current, +void HistogramSamples::WriteAsciiBucketValue(HistogramBase::Count32 current, double scaled_sum, std::string* output) const { StringAppendF(output, " (%d = %3.1f%%)", current, current / scaled_sum); } const std::string HistogramSamples::GetSimpleAsciiBucketRange( - HistogramBase::Sample sample) const { + HistogramBase::Sample32 sample) const { return StringPrintf("%d", sample); } @@ -462,9 +467,9 @@ bool SampleCountIterator::GetBucketIndex(size_t* index) const { return false; } -SingleSampleIterator::SingleSampleIterator(HistogramBase::Sample min, +SingleSampleIterator::SingleSampleIterator(HistogramBase::Sample32 min, int64_t max, - HistogramBase::Count count, + HistogramBase::Count32 count, size_t bucket_index, bool value_was_extracted) : min_(min), @@ -490,9 +495,9 @@ void SingleSampleIterator::Next() { count_ = 0; } -void SingleSampleIterator::Get(HistogramBase::Sample* min, +void SingleSampleIterator::Get(HistogramBase::Sample32* min, int64_t* max, - HistogramBase::Count* count) { + HistogramBase::Count32* count) { DCHECK(!Done()); *min = min_; *max = max_; diff --git a/naiveproxy/src/base/metrics/histogram_samples.h b/naiveproxy/src/base/metrics/histogram_samples.h index b40f3fdbed..97015cb084 100644 --- a/naiveproxy/src/base/metrics/histogram_samples.h +++ b/naiveproxy/src/base/metrics/histogram_samples.h @@ -73,7 +73,7 @@ class BASE_EXPORT HistogramSamples { // Adds a given count to the held bucket. If not possible, it returns false // and leaves the parts unchanged. Once extracted/disabled, this always // returns false. This in an "acquire/release" operation. - bool Accumulate(size_t bucket, HistogramBase::Count count); + bool Accumulate(size_t bucket, HistogramBase::Count32 count); // Returns if the sample has been "disabled" (via Extract) and thus not // allowed to accept further accumulation. @@ -103,7 +103,7 @@ class BASE_EXPORT HistogramSamples { // to have multiple sample-sets representing subsets of the data. uint64_t id; - // The sum of all the entries, effectivly the sum(sample * count) for + // The sum of all the entries, effectively the sum(sample * count) for // all samples. Despite being atomic, no guarantees are made on the // accuracy of this value; there may be races during histogram // accumulation and snapshotting that we choose to accept. It should @@ -142,10 +142,11 @@ class BASE_EXPORT HistogramSamples { HistogramSamples& operator=(const HistogramSamples&) = delete; virtual ~HistogramSamples(); - virtual void Accumulate(HistogramBase::Sample value, - HistogramBase::Count count) = 0; - virtual HistogramBase::Count GetCount(HistogramBase::Sample value) const = 0; - virtual HistogramBase::Count TotalCount() const = 0; + virtual void Accumulate(HistogramBase::Sample32 value, + HistogramBase::Count32 count) = 0; + virtual HistogramBase::Count32 GetCount( + HistogramBase::Sample32 value) const = 0; + virtual HistogramBase::Count32 TotalCount() const = 0; bool Add(const HistogramSamples& other); @@ -200,7 +201,7 @@ class BASE_EXPORT HistogramSamples { return meta_->sum; #endif } - HistogramBase::Count redundant_count() const { + HistogramBase::Count32 redundant_count() const { return subtle::NoBarrier_Load(&meta_->redundant_count); } @@ -228,16 +229,16 @@ class BASE_EXPORT HistogramSamples { // Accumulates to the embedded single-sample field if possible. Returns true // on success, false otherwise. Sum and redundant-count are also updated in // the success case. - bool AccumulateSingleSample(HistogramBase::Sample value, - HistogramBase::Count count, + bool AccumulateSingleSample(HistogramBase::Sample32 value, + HistogramBase::Count32 count, size_t bucket); // Atomically adjust the sum and redundant-count. - void IncreaseSumAndCount(int64_t sum, HistogramBase::Count count); + void IncreaseSumAndCount(int64_t sum, HistogramBase::Count32 count); // Record a negative-sample observation and the reason why. void RecordNegativeSample(NegativeSampleReason reason, - HistogramBase::Count increment); + HistogramBase::Count32 increment); AtomicSingleSample& single_sample() { return meta_->single_sample; } const AtomicSingleSample& single_sample() const { @@ -251,7 +252,7 @@ class BASE_EXPORT HistogramSamples { // Writes textual description of the bucket contents (relative to histogram). // Output is the count in the buckets, as well as the percentage. - void WriteAsciiBucketValue(HistogramBase::Count current, + void WriteAsciiBucketValue(HistogramBase::Count32 current, double scaled_sum, std::string* output) const; @@ -264,7 +265,7 @@ class BASE_EXPORT HistogramSamples { // Returns a string description of what goes in a given bucket. const std::string GetSimpleAsciiBucketRange( - HistogramBase::Sample sample) const; + HistogramBase::Sample32 sample) const; Metadata* meta() { return meta_; } @@ -292,12 +293,12 @@ class BASE_EXPORT SampleCountIterator { // full int32_t range and bucket max is exclusive, so it needs to support // values up to MAXINT32+1. // Requires: !Done(); - virtual void Get(HistogramBase::Sample* min, + virtual void Get(HistogramBase::Sample32* min, int64_t* max, - HistogramBase::Count* count) = 0; - static_assert(std::numeric_limits::max() < + HistogramBase::Count32* count) = 0; + static_assert(std::numeric_limits::max() < std::numeric_limits::max(), - "Get() |max| must be able to hold Histogram::Sample max + 1"); + "Get() |max| must be able to hold Histogram::Sample32 max + 1"); // Get the index of current histogram bucket. // For histograms that don't use predefined buckets, it returns false. @@ -307,9 +308,9 @@ class BASE_EXPORT SampleCountIterator { class BASE_EXPORT SingleSampleIterator : public SampleCountIterator { public: - SingleSampleIterator(HistogramBase::Sample min, + SingleSampleIterator(HistogramBase::Sample32 min, int64_t max, - HistogramBase::Count count, + HistogramBase::Count32 count, size_t bucket_index, bool value_was_extracted); ~SingleSampleIterator() override; @@ -317,19 +318,19 @@ class BASE_EXPORT SingleSampleIterator : public SampleCountIterator { // SampleCountIterator: bool Done() const override; void Next() override; - void Get(HistogramBase::Sample* min, + void Get(HistogramBase::Sample32* min, int64_t* max, - HistogramBase::Count* count) override; + HistogramBase::Count32* count) override; // SampleVector uses predefined buckets so iterator can return bucket index. bool GetBucketIndex(size_t* index) const override; private: // Information about the single value to return. - const HistogramBase::Sample min_; + const HistogramBase::Sample32 min_; const int64_t max_; const size_t bucket_index_; - HistogramBase::Count count_; + HistogramBase::Count32 count_; // Whether the value that this iterator holds was extracted from the // underlying data (i.e., reset to 0). diff --git a/naiveproxy/src/base/metrics/histogram_shared_memory.cc b/naiveproxy/src/base/metrics/histogram_shared_memory.cc index 02534f2b7f..9c58ba0b4e 100644 --- a/naiveproxy/src/base/metrics/histogram_shared_memory.cc +++ b/naiveproxy/src/base/metrics/histogram_shared_memory.cc @@ -115,8 +115,7 @@ HistogramSharedMemory::Create(int process_id, } // static -bool HistogramSharedMemory::PassOnCommandLineIsEnabled( - std::string_view process_type) { +bool HistogramSharedMemory::PassOnCommandLineIsEnabled(int process_type) { // On ChromeOS and for "utility" processes on other platforms there seems to // be one or more mechanisms on startup which walk through all inherited // shared memory regions and take a read-only handle to them. When we later @@ -127,40 +126,32 @@ bool HistogramSharedMemory::PassOnCommandLineIsEnabled( // Example: The call to OpenSymbolFiles() in base/debug/stack_trace_posix.cc // grabs a read-only handle to the shmem region for some process types. // - // TODO(crbug.com/40109064): Fix ChromeOS and utility processes. + // TODO(crbug.com/40109064): Fix ChromeOS GPU and Android utility processes. + // Constants from content::ProcessType; + [[maybe_unused]] constexpr int PROCESS_TYPE_GPU = 9; + [[maybe_unused]] constexpr int PROCESS_TYPE_UTILITY = 6; return (FeatureList::IsEnabled(kPassHistogramSharedMemoryOnLaunch) #if BUILDFLAG(IS_CHROMEOS) - && process_type != "gpu-process" + && process_type != PROCESS_TYPE_GPU #elif BUILDFLAG(IS_ANDROID) - && process_type != "utility" + && process_type != PROCESS_TYPE_UTILITY #endif ); } // static void HistogramSharedMemory::AddToLaunchParameters( - UnsafeSharedMemoryRegion histogram_shmem_region, + const UnsafeSharedMemoryRegion& histogram_shmem_region, #if BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_APPLE) GlobalDescriptors::Key descriptor_key, ScopedFD& descriptor_to_share, #endif CommandLine* command_line, LaunchOptions* launch_options) { + CHECK(histogram_shmem_region.IsValid()); CHECK(command_line); - - const std::string process_type = command_line->GetSwitchValueASCII("type"); - const bool enabled = PassOnCommandLineIsEnabled(process_type); - - DVLOG(1) << (enabled ? "A" : "Not a") - << "dding histogram shared memory launch parameters for " - << process_type << " process."; - - if (!enabled) { - return; - } - shared_memory::AddToLaunchParameters(::switches::kMetricsSharedMemoryHandle, - std::move(histogram_shmem_region), + histogram_shmem_region, #if BUILDFLAG(IS_APPLE) kRendezvousKey, #elif BUILDFLAG(IS_POSIX) diff --git a/naiveproxy/src/base/metrics/histogram_shared_memory.h b/naiveproxy/src/base/metrics/histogram_shared_memory.h index 88f39fa62c..d16d5d215d 100644 --- a/naiveproxy/src/base/metrics/histogram_shared_memory.h +++ b/naiveproxy/src/base/metrics/histogram_shared_memory.h @@ -85,8 +85,8 @@ struct BASE_EXPORT HistogramSharedMemory { #endif // Returns true if passing the shared memory handle via command-line arguments - // is enabled. - static bool PassOnCommandLineIsEnabled(std::string_view process_type); + // is enabled. |process_type| values should come from content:::ProcessType. + static bool PassOnCommandLineIsEnabled(int process_type); // Updates the launch parameters to share |unsafe_memory_region| to a // child process that is about to be launched. This should be called in the @@ -97,7 +97,7 @@ struct BASE_EXPORT HistogramSharedMemory { // caller is expected to transmit the descriptor to the launch flow for the // zygote. static void AddToLaunchParameters( - UnsafeSharedMemoryRegion unsafe_memory_region, + const UnsafeSharedMemoryRegion& unsafe_memory_region, #if BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_APPLE) GlobalDescriptors::Key descriptor_key, ScopedFD& descriptor_to_share, diff --git a/naiveproxy/src/base/metrics/histogram_snapshot_manager.cc b/naiveproxy/src/base/metrics/histogram_snapshot_manager.cc index 15e32833f9..5e1df4022c 100644 --- a/naiveproxy/src/base/metrics/histogram_snapshot_manager.cc +++ b/naiveproxy/src/base/metrics/histogram_snapshot_manager.cc @@ -49,6 +49,9 @@ void HistogramSnapshotManager::PrepareFinalDelta( void HistogramSnapshotManager::PrepareSamples(const HistogramBase* histogram, const HistogramSamples& samples) { DCHECK(histogram_flattener_); + if (samples.TotalCount() <= 0) { + return; + } // Crash if we detect that our histograms have been overwritten. This may be // a fair distance from the memory smasher, but we hope to correlate these @@ -83,9 +86,7 @@ void HistogramSnapshotManager::PrepareSamples(const HistogramBase* histogram, return; } - if (samples.TotalCount() > 0) { - histogram_flattener_->RecordDelta(*histogram, samples); - } + histogram_flattener_->RecordDelta(*histogram, samples); } } // namespace base diff --git a/naiveproxy/src/base/metrics/persistent_histogram_allocator.cc b/naiveproxy/src/base/metrics/persistent_histogram_allocator.cc index 6efe6213d0..f61ea873db 100644 --- a/naiveproxy/src/base/metrics/persistent_histogram_allocator.cc +++ b/naiveproxy/src/base/metrics/persistent_histogram_allocator.cc @@ -69,7 +69,7 @@ subtle::AtomicWord g_histogram_allocator = 0; // which is returned to the caller. A return of nullptr indicates that the // passed boundaries are invalid. std::unique_ptr CreateRangesFromData( - HistogramBase::Sample* ranges_data, + HistogramBase::Sample32* ranges_data, uint32_t ranges_checksum, size_t count) { // To avoid racy destruction at shutdown, the following may be leaked. @@ -178,7 +178,7 @@ PersistentSparseHistogramDataManager::GetSampleMapRecordsWhileLocked( std::vector PersistentSparseHistogramDataManager::LoadRecords( PersistentSampleMapRecords* sample_map_records, - std::optional until_value) { + std::optional until_value) { // DataManager must be locked in order to access the `sample_records_` // vectors. base::AutoLock auto_lock(lock_); @@ -200,7 +200,7 @@ PersistentSparseHistogramDataManager::LoadRecords( // Get the next sample-record. The iterator will always resume from where // it left off even if it previously had nothing further to return. uint64_t found_id; - HistogramBase::Sample value; + HistogramBase::Sample32 value; PersistentMemoryAllocator::Reference ref = PersistentSampleMap::GetNextPersistentRecord(record_iterator_, &found_id, &value); @@ -256,14 +256,14 @@ PersistentSampleMapRecords::~PersistentSampleMapRecords() = default; std::vector PersistentSampleMapRecords::GetNextRecords( - std::optional until_value) { + std::optional until_value) { auto references = data_manager_->LoadRecords(this, until_value); seen_ += references.size(); return references; } PersistentMemoryAllocator::Reference PersistentSampleMapRecords::CreateNew( - HistogramBase::Sample value) { + HistogramBase::Sample32 value) { return PersistentSampleMap::CreatePersistentRecord(data_manager_->allocator_, sample_map_id_, value); } @@ -324,15 +324,19 @@ std::unique_ptr PersistentHistogramAllocator::GetHistogram( // count data (while these must reference the persistent counts) and always // add it to the local list of known histograms (while these may be simple // references to histograms in other processes). - size_t length = 0; + size_t alloc_size = 0; PersistentHistogramData* data = - memory_allocator_->GetAsObject(ref, &length); + memory_allocator_->GetAsObject(ref, &alloc_size); - // Check that metadata is reasonable: name is null-terminated and non-empty, + // Checks data for nullptr; `metric_name` not empty means data is not nullptr. + std::string_view metric_name = PersistentMemoryAllocator::StringViewAt( + data, offsetof(PersistentHistogramData, name), alloc_size); + + // Check that metadata is reasonable: metric_name is non-empty, // ID fields have been loaded with a hash of the name (0 is considered // unset/invalid). - if (!data || data->name[0] == '\0' || - reinterpret_cast(data)[length - 1] != '\0' || + if (metric_name.empty() || + reinterpret_cast(data)[alloc_size - 1] != '\0' || data->samples_metadata.id == 0 || data->logged_metadata.id == 0 || // Note: Sparse histograms use `id + 1` in `logged_metadata`. (data->logged_metadata.id != data->samples_metadata.id && @@ -341,7 +345,7 @@ std::unique_ptr PersistentHistogramAllocator::GetHistogram( // could just verify the name length based on the overall alloc length, // but that doesn't work because the allocated block may have been // aligned to the next boundary value. - HashMetricName(data->name) != data->samples_metadata.id) { + HashMetricName(metric_name) != data->samples_metadata.id) { return nullptr; } return CreateHistogram(data); @@ -410,12 +414,12 @@ std::unique_ptr PersistentHistogramAllocator::AllocateHistogram( bucket_ranges->persistent_reference(); if (!ranges_ref) { size_t ranges_count = bucket_count + 1; - size_t ranges_bytes = ranges_count * sizeof(HistogramBase::Sample); + size_t ranges_bytes = ranges_count * sizeof(HistogramBase::Sample32); ranges_ref = memory_allocator_->Allocate(ranges_bytes, kTypeIdRangesArray); if (ranges_ref) { - HistogramBase::Sample* ranges_data = - memory_allocator_->GetAsArray( + HistogramBase::Sample32* ranges_data = + memory_allocator_->GetAsArray( ranges_ref, kTypeIdRangesArray, ranges_count); if (ranges_data) { for (size_t i = 0; i < bucket_ranges->size(); ++i) { @@ -595,15 +599,15 @@ std::unique_ptr PersistentHistogramAllocator::CreateHistogram( uint32_t histogram_ranges_checksum = histogram_data_ptr->ranges_checksum; size_t allocated_bytes = 0; - HistogramBase::Sample* ranges_data = - memory_allocator_->GetAsArray( + HistogramBase::Sample32* ranges_data = + memory_allocator_->GetAsArray( histogram_ranges_ref, kTypeIdRangesArray, PersistentMemoryAllocator::kSizeAny, &allocated_bytes); const uint32_t max_buckets = - std::numeric_limits::max() / sizeof(HistogramBase::Sample); + std::numeric_limits::max() / sizeof(HistogramBase::Sample32); size_t required_bytes = - (histogram_bucket_count + 1) * sizeof(HistogramBase::Sample); + (histogram_bucket_count + 1) * sizeof(HistogramBase::Sample32); if (!ranges_data || histogram_bucket_count < 2 || histogram_bucket_count >= max_buckets || allocated_bytes < required_bytes) { @@ -985,10 +989,11 @@ void GlobalHistogramAllocator::Set(GlobalHistogramAllocator* allocator) { DVLOG(1) << histogram_count << " histogram(s) created before persistence was enabled."; - if (allocator && allocator->Name() && allocator->Name()[0]) { - UmaHistogramCounts100(StrCat({"UMA.PersistentAllocator.EarlyHistograms.", - allocator->Name()}), - static_cast(histogram_count)); + std::string_view name = (allocator ? allocator->Name() : ""); + if (!name.empty()) { + UmaHistogramCounts100( + StrCat({"UMA.PersistentAllocator.EarlyHistograms.", name}), + static_cast(histogram_count)); } } } diff --git a/naiveproxy/src/base/metrics/persistent_histogram_allocator.h b/naiveproxy/src/base/metrics/persistent_histogram_allocator.h index 83d779bd0d..46a6af2d91 100644 --- a/naiveproxy/src/base/metrics/persistent_histogram_allocator.h +++ b/naiveproxy/src/base/metrics/persistent_histogram_allocator.h @@ -65,7 +65,7 @@ class BASE_EXPORT PersistentSparseHistogramDataManager { struct ReferenceAndSample { PersistentMemoryAllocator::Reference reference; - HistogramBase::Sample value; + HistogramBase::Sample32 value; }; // Gets the vector holding records for a given sample-map id. @@ -87,7 +87,7 @@ class BASE_EXPORT PersistentSparseHistogramDataManager { // `sample_map_records` has seen all its records. std::vector LoadRecords( PersistentSampleMapRecords* sample_map_records, - std::optional until_value); + std::optional until_value); // Weak-pointer to the allocator used by the sparse histograms. raw_ptr allocator_; @@ -134,11 +134,11 @@ class BASE_EXPORT PersistentSampleMapRecords { // vector is returned, which definitely means that `this` has seen all its // records. std::vector GetNextRecords( - std::optional until_value); + std::optional until_value); // Creates a new persistent sample-map record for sample `value` and returns // a reference to it. - PersistentMemoryAllocator::Reference CreateNew(HistogramBase::Sample value); + PersistentMemoryAllocator::Reference CreateNew(HistogramBase::Sample32 value); // Convenience method that gets the object for a given reference so callers // don't have to also keep their own pointer to the appropriate allocator. @@ -230,12 +230,18 @@ class BASE_EXPORT PersistentHistogramAllocator { // Implement the "metadata" API of a PersistentMemoryAllocator, forwarding // those requests to the real one. uint64_t Id() const { return memory_allocator_->Id(); } - const char* Name() const { return memory_allocator_->Name(); } const void* data() const { return memory_allocator_->data(); } size_t length() const { return memory_allocator_->length(); } size_t size() const { return memory_allocator_->size(); } size_t used() const { return memory_allocator_->used(); } + // Returns the internal name of this allocator (possibly an empty string). + // The returned string_view references a bounded span within the shared + // memory region. As such, it should be treated as a volatile but bounded + // block of memory. In particular, clients should respect the 'length()' of + // the returned view instead of relying on a terminating NUL char. + std::string_view Name() const { return memory_allocator_->Name(); } + // Recreate a Histogram from data held in persistent memory. Though this // object will be local to the current process, the sample data will be // shared with all other threads referencing it. This method takes a `ref` diff --git a/naiveproxy/src/base/metrics/persistent_histogram_storage.cc b/naiveproxy/src/base/metrics/persistent_histogram_storage.cc index 3a094f994b..bc16b3fe91 100644 --- a/naiveproxy/src/base/metrics/persistent_histogram_storage.cc +++ b/naiveproxy/src/base/metrics/persistent_histogram_storage.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "base/metrics/persistent_histogram_storage.h" #include diff --git a/naiveproxy/src/base/metrics/persistent_memory_allocator.cc b/naiveproxy/src/base/metrics/persistent_memory_allocator.cc index 49df6dea1c..da4f295c34 100644 --- a/naiveproxy/src/base/metrics/persistent_memory_allocator.cc +++ b/naiveproxy/src/base/metrics/persistent_memory_allocator.cc @@ -26,7 +26,6 @@ #include "base/metrics/histogram_functions.h" #include "base/metrics/persistent_histogram_allocator.h" #include "base/metrics/sparse_histogram.h" -#include "base/notreached.h" #include "base/numerics/checked_math.h" #include "base/numerics/safe_conversions.h" #include "base/strings/strcat.h" @@ -45,18 +44,20 @@ #endif #endif +#define PMA "PMA-DBG" + namespace { -// Limit of memory segment size. It has to fit in an unsigned 32-bit number -// and should be a power of 2 in order to accommodate almost any page size. +// Limit of memory segment size. It has to fit in an unsigned 32-bit number and +// should be a power of 2 in order to accommodate almost any page size. constexpr uint32_t kSegmentMaxSize = 1 << 30; // 1 GiB -// A constant (random) value placed in the shared metadata to identify -// an already initialized memory segment. +// A constant (random) value placed in the shared metadata to identify an +// already initialized memory segment. constexpr uint32_t kGlobalCookie = 0x408305DC; -// The current version of the metadata. If updates are made that change -// the metadata, the version number can be queried to operate in a backward- +// The current version of the metadata. If updates are made that change the +// metadata, the version number can be queried to operate in a backward- // compatible manner until the memory segment is completely re-initalized. // Note: If you update the metadata in a non-backwards compatible way, reset // `kCompatibleVersions`. Otherwise, add the previous version. @@ -76,9 +77,9 @@ constexpr uint32_t kBlockCookieAllocated = 0xC8799269; constexpr uint32_t kFlagCorrupt = 1 << 0; constexpr uint32_t kFlagFull = 1 << 1; -// Errors that are logged in "errors" histogram. -// These values are persisted to logs. Entries should not be renumbered and -// numeric values should never be reused. +// Errors that are logged in "errors" histogram. These values are persisted to +// logs. Entries should not be renumbered and numeric values should never be +// reused. enum AllocatorError : int { kMemoryIsCorrupt = 1, kMaxValue = kMemoryIsCorrupt, @@ -191,9 +192,13 @@ void PersistentMemoryAllocator::Iterator::Reset(Reference starting_after) { // Ensure that the starting point is a valid, iterable block (meaning it can // be read and has a non-zero "next" pointer). const volatile BlockHeader* block = - allocator_->GetBlock(starting_after, 0, 0, false, false); + allocator_->GetBlock(/*ref=*/starting_after, /*type_id=*/0, /*size=*/0, + /*queue_ok=*/false, /*free_ok=*/false); if (!block || block->next.load(std::memory_order_relaxed) == 0) { - NOTREACHED(); + allocator_->DumpWithoutCrashing(/*ref=*/starting_after, + /*expected_type=*/0, + /*expected_size=*/0, + /*dump_block_header=*/true); } } @@ -228,7 +233,8 @@ PersistentMemoryAllocator::Iterator::GetNext(uint32_t* type_return, size_t next_size = 0; while (true) { const volatile BlockHeader* block = - allocator_->GetBlock(last, 0, 0, true, false); + allocator_->GetBlock(/*ref=*/last, /*type_id=*/0, /*size=*/0, + /*queue_ok=*/true, /*free_ok=*/false); if (!block) { // Invalid iterator state. return kReferenceNull; } @@ -248,7 +254,9 @@ PersistentMemoryAllocator::Iterator::GetNext(uint32_t* type_return, if (next == kReferenceQueue) { // No next allocation in queue. return kReferenceNull; } - block = allocator_->GetBlock(next, 0, 0, false, false, &next_size); + block = allocator_->GetBlock(/*ref=*/next, /*type_id=*/0, /*size=*/0, + /*queue_ok=*/false, /*free_ok=*/false, + /*alloc_size=*/&next_size); if (!block) { // Memory is corrupt. allocator_->SetCorrupt(); return kReferenceNull; @@ -472,31 +480,22 @@ PersistentMemoryAllocator::PersistentMemoryAllocator(Memory memory, } } -PersistentMemoryAllocator::~PersistentMemoryAllocator() { - // It's strictly forbidden to do any memory access here in case there is - // some issue with the underlying memory segment. The "Local" allocator - // makes use of this to allow deletion of the segment on the heap from - // within its destructor. -} +// It's strictly forbidden to do any memory access inside this destructor in +// case there is some issue with the underlying memory segment. The "Local" +// allocator makes use of this to allow deletion of the segment on the heap from +// within its destructor. +PersistentMemoryAllocator::~PersistentMemoryAllocator() = default; uint64_t PersistentMemoryAllocator::Id() const { return shared_meta()->id; } -const char* PersistentMemoryAllocator::Name() const { +std::string_view PersistentMemoryAllocator::Name() const { Reference name_ref = shared_meta()->name; - size_t name_length = 0; + size_t alloc_size = 0; const char* name_cstr = GetAsArray( - name_ref, 0, PersistentMemoryAllocator::kSizeAny, &name_length); - if (!name_cstr) { - return ""; - } - - if (name_cstr[name_length - 1] != '\0') { - NOTREACHED(); - } - - return name_cstr; + name_ref, 0, PersistentMemoryAllocator::kSizeAny, &alloc_size); + return StringViewAt(name_cstr, /*offset=*/0, alloc_size); } void PersistentMemoryAllocator::CreateTrackingHistograms( @@ -504,11 +503,10 @@ void PersistentMemoryAllocator::CreateTrackingHistograms( if (name.empty() || access_mode_ == kReadOnly) { return; } - std::string name_string(name); DCHECK(!used_histogram_); used_histogram_ = LinearHistogram::FactoryGet( - "UMA.PersistentAllocator." + name_string + ".UsedPct", 1, 101, 21, + base::StrCat({"UMA.PersistentAllocator.", name, ".UsedPct"}), 1, 101, 21, HistogramBase::kUmaTargetedHistogramFlag); } @@ -552,7 +550,8 @@ PersistentMemoryAllocator::Reference PersistentMemoryAllocator::GetAsReference( } uint32_t PersistentMemoryAllocator::GetType(Reference ref) const { - const volatile BlockHeader* const block = GetBlock(ref, 0, 0, false, false); + const volatile BlockHeader* const block = GetBlock( + ref, /*type_id=*/0, /*size=*/0, /*queue_ok=*/false, /*free_ok=*/false); if (!block) { return 0; } @@ -564,7 +563,8 @@ bool PersistentMemoryAllocator::ChangeType(Reference ref, uint32_t from_type_id, bool clear) { DCHECK_NE(access_mode_, kReadOnly); - volatile BlockHeader* const block = GetBlock(ref, 0, 0, false, false); + volatile BlockHeader* const block = GetBlock( + ref, /*type_id=*/0, /*size=*/0, /*queue_ok=*/false, /*free_ok=*/false); if (!block) { return false; } @@ -621,6 +621,17 @@ bool PersistentMemoryAllocator::ChangeType(Reference ref, std::memory_order_acquire); } +// static +std::string_view PersistentMemoryAllocator::StringViewAt(const void* object, + size_t offset, + size_t alloc_size) { + if (!object || offset >= alloc_size) { + return ""; + } + const char* const cstr = static_cast(object) + offset; + return std::string_view(cstr, strnlen(cstr, alloc_size - offset - 1)); +} + PersistentMemoryAllocator::Reference PersistentMemoryAllocator::Allocate( size_t req_size, uint32_t type_id, @@ -636,14 +647,16 @@ PersistentMemoryAllocator::Reference PersistentMemoryAllocator::AllocateImpl( // Validate req_size to ensure it won't overflow when used as 32-bit value. if (req_size > kSegmentMaxSize - sizeof(BlockHeader)) { - NOTREACHED(); + this->DumpWithoutCrashing(/*ref=*/0, type_id, req_size, + /*dump_block_header=*/false); + return kReferenceNull; } // Round up the requested size, plus header, to the next allocation alignment. size_t size = bits::AlignUp(req_size + sizeof(BlockHeader), kAllocAlignment); if (size <= sizeof(BlockHeader) || size > mem_page_) { - // This shouldn't be reached through normal means. - debug::DumpWithoutCrashing(); + this->DumpWithoutCrashing(/*ref=*/0, type_id, req_size, + /*dump_block_header=*/false); return kReferenceNull; } @@ -670,9 +683,11 @@ PersistentMemoryAllocator::Reference PersistentMemoryAllocator::AllocateImpl( } // Get pointer to the "free" block. If something has been allocated since - // the load of freeptr above, it is still safe as nothing will be written - // to that location until after the compare-exchange below. - volatile BlockHeader* const block = GetBlock(freeptr, 0, 0, false, true); + // the load of freeptr above, it is still safe as nothing will be read or + // written to that location until after the compare-exchange below. + volatile BlockHeader* const block = + GetBlock(/*ref=*/freeptr, /*type_id=*/0, /*size=*/0, /*queue_ok=*/false, + /*free_ok=*/true); if (!block) { SetCorrupt(); return kReferenceNull; @@ -689,32 +704,22 @@ PersistentMemoryAllocator::Reference PersistentMemoryAllocator::AllocateImpl( return kReferenceNull; } + // TODO(crbug.com/40064026): With the current state of the code, this + // code path should not be reached. However, crash reports have been + // hinting that it is. Add crash keys to investigate this. #if !BUILDFLAG(IS_NACL) - // In production, with the current state of the code, this code path - // should not be reached. However, crash reports have been hinting that it - // is. Add crash keys to investigate this. - // TODO(crbug.com/40064026): Remove them once done. - SCOPED_CRASH_KEY_NUMBER("PersistentMemoryAllocator", "mem_size_", - mem_size_); - SCOPED_CRASH_KEY_NUMBER("PersistentMemoryAllocator", "mem_page_", - mem_page_); - SCOPED_CRASH_KEY_NUMBER("PersistentMemoryAllocator", "freeptr", freeptr); - SCOPED_CRASH_KEY_NUMBER("PersistentMemoryAllocator", "page_free", - page_free); - SCOPED_CRASH_KEY_NUMBER("PersistentMemoryAllocator", "size", size); - SCOPED_CRASH_KEY_NUMBER("PersistentMemoryAllocator", "req_size", - req_size); - SCOPED_CRASH_KEY_NUMBER("PersistentMemoryAllocator", "type_id", type_id); - std::string persistent_file_name = "N/A"; - auto* allocator = GlobalHistogramAllocator::Get(); - if (allocator && allocator->HasPersistentLocation()) { - persistent_file_name = - allocator->GetPersistentLocation().BaseName().AsUTF8Unsafe(); - } - SCOPED_CRASH_KEY_STRING256("PersistentMemoryAllocator", "file_name", - persistent_file_name); - debug::DumpWithoutCrashing(); + const auto* allocator = GlobalHistogramAllocator::Get(); + SCOPED_CRASH_KEY_STRING256( + PMA, "file_name", + allocator && allocator->HasPersistentLocation() + ? allocator->GetPersistentLocation().BaseName().AsUTF8Unsafe() + : "N/A"); #endif // !BUILDFLAG(IS_NACL) + // It is not thread-safe to read from the block header. + this->DumpWithoutCrashing(/*ref=*/freeptr, + /*expected_type=*/type_id, + /*expected_size=*/req_size, + /*dump_block_header=*/false); const uint32_t new_freeptr = freeptr + page_free; if (shared_meta()->freeptr.compare_exchange_strong( @@ -815,7 +820,8 @@ void PersistentMemoryAllocator::MakeIterable(Reference ref) { if (IsCorrupt()) { return; } - volatile BlockHeader* block = GetBlock(ref, 0, 0, false, false); + volatile BlockHeader* block = GetBlock(ref, /*type_id=*/0, /*size=*/0, + /*queue_ok=*/false, /*free_ok=*/false); if (!block) { // invalid reference return; } @@ -836,7 +842,8 @@ void PersistentMemoryAllocator::MakeIterable(Reference ref) { for (;;) { // Acquire the current tail-pointer released by previous call to this // method and validate it. - block = GetBlock(tail, 0, 0, true, false); + block = GetBlock(/*ref=*/tail, /*type_id=*/0, /*size=*/0, /*queue_ok=*/true, + /*free_ok=*/false); if (!block) { SetCorrupt(); return; @@ -997,8 +1004,8 @@ const volatile void* PersistentMemoryAllocator::GetBlockData( size_t size, size_t* alloc_size) const { DCHECK(size > 0); - const volatile BlockHeader* block = - GetBlock(ref, type_id, size, false, false, alloc_size); + const volatile BlockHeader* block = GetBlock( + ref, type_id, size, /*queue_ok=*/false, /*free_ok=*/false, alloc_size); if (!block) { return nullptr; } @@ -1010,12 +1017,50 @@ void PersistentMemoryAllocator::UpdateTrackingHistograms() { if (used_histogram_) { MemoryInfo meminfo; GetMemoryInfo(&meminfo); - HistogramBase::Sample used_percent = static_cast( + HistogramBase::Sample32 used_percent = static_cast( ((meminfo.total - meminfo.free) * 100ULL / meminfo.total)); used_histogram_->Add(used_percent); } } +void PersistentMemoryAllocator::DumpWithoutCrashing( + [[maybe_unused]] Reference ref, + [[maybe_unused]] uint32_t expected_type, + [[maybe_unused]] size_t expected_size, + [[maybe_unused]] bool dump_block_header) const { +#if !BUILDFLAG(IS_NACL) + SCOPED_CRASH_KEY_STRING32(PMA, "name", Name()); + SCOPED_CRASH_KEY_NUMBER(PMA, "memory_size", size()); + SCOPED_CRASH_KEY_NUMBER(PMA, "page_size", page_size()); + SCOPED_CRASH_KEY_BOOL(PMA, "is_full", IsFull()); + SCOPED_CRASH_KEY_BOOL(PMA, "is_corrupted", IsCorrupt()); + SCOPED_CRASH_KEY_NUMBER(PMA, "freeptr", freeptr()); + SCOPED_CRASH_KEY_NUMBER( + PMA, "global_cookie", + static_cast(shared_meta())->cookie); + SCOPED_CRASH_KEY_NUMBER(PMA, "ref", ref); + SCOPED_CRASH_KEY_NUMBER(PMA, "expected_type", expected_type); + SCOPED_CRASH_KEY_NUMBER(PMA, "expected_size", expected_size); + + const volatile BlockHeader* const block = + dump_block_header ? GetBlock(ref, /*type_id=*/expected_type, + /*size=*/expected_size, /*queue_ok=*/false, + /*free_ok=*/false) + : nullptr; + std::string_view unknown = dump_block_header ? "unknown" : "N/A"; + + SCOPED_CRASH_KEY_STRING32(PMA, "block_size", + block ? NumberToString(block->size) : unknown); + SCOPED_CRASH_KEY_STRING32(PMA, "block_cookie", + block ? NumberToString(block->cookie) : unknown); + SCOPED_CRASH_KEY_STRING32(PMA, "block_type_id", + block ? NumberToString(block->type_id) : unknown); + SCOPED_CRASH_KEY_STRING32(PMA, "block_next", + block ? NumberToString(block->next) : unknown); +#endif // !BUILDFLAG(IS_NACL) + ::base::debug::DumpWithoutCrashing(); +} + //----- LocalPersistentMemoryAllocator ----------------------------------------- LocalPersistentMemoryAllocator::LocalPersistentMemoryAllocator( @@ -1257,12 +1302,10 @@ span DelayedPersistentAllocation::GetUntyped() const { // contents of the allocation in any way. Reference ref = reference_->load(std::memory_order_acquire); -#if !BUILDFLAG(IS_NACL) - // TODO(crbug.com/40064026): Remove these. They are used to investigate - // unexpected failures. - bool ref_found = (ref != 0); - bool raced = false; -#endif // !BUILDFLAG(IS_NACL) + // TODO(crbug.com/40064026): Remove this. It is used to investigate unexpected + // failures and code paths. + [[maybe_unused]] const bool ref_found = (ref != 0); + [[maybe_unused]] bool race_detected = false; if (!ref) { [[maybe_unused]] size_t alloc_size = 0; @@ -1285,65 +1328,59 @@ span DelayedPersistentAllocation::GetUntyped() const { DCHECK_LE(size_, alloc_size); allocator_->ChangeType(ref, 0, type_, /*clear=*/false); ref = existing; -#if !BUILDFLAG(IS_NACL) - raced = true; -#endif // !BUILDFLAG(IS_NACL) + race_detected = true; } } + // Find the referenced memory and return it as a span if successful. uint8_t* mem = allocator_->GetAsArray(ref, type_, size_); - if (!mem) { -#if !BUILDFLAG(IS_NACL) - // TODO(crbug.com/40064026): Remove these. They are used to investigate - // unexpected failures. - SCOPED_CRASH_KEY_BOOL("PersistentMemoryAllocator", "full", - allocator_->IsFull()); - SCOPED_CRASH_KEY_BOOL("PersistentMemoryAllocator", "corrupted", - allocator_->IsCorrupt()); - SCOPED_CRASH_KEY_NUMBER("PersistentMemoryAllocator", "freeptr", - allocator_->freeptr()); - // The allocator's cookie should always be `kGlobalCookie`. Add it to crash - // keys to see if the file was corrupted externally, e.g. by a file - // shredder. Cast to volatile to avoid compiler optimizations and ensure - // that the actual value is read. - SCOPED_CRASH_KEY_NUMBER( - "PersistentMemoryAllocator", "cookie", - static_cast( - allocator_->shared_meta()) - ->cookie); - SCOPED_CRASH_KEY_NUMBER("PersistentMemoryAllocator", "ref", ref); - SCOPED_CRASH_KEY_BOOL("PersistentMemoryAllocator", "ref_found", ref_found); - SCOPED_CRASH_KEY_BOOL("PersistentMemoryAllocator", "raced", raced); - SCOPED_CRASH_KEY_NUMBER("PersistentMemoryAllocator", "type_", type_); - SCOPED_CRASH_KEY_NUMBER("PersistentMemoryAllocator", "size_", size_); - if (ref == 0xC8799269) { - // There are many crash reports containing the corrupted "0xC8799269" - // value in `ref`. This value is actually a "magic" number to indicate - // that a certain block in persistent memory was successfully allocated, - // so it should not appear there. Include some extra crash keys to see if - // the surrounding values were also corrupted. If so, the value before - // would be the size of the allocated object, and the value after would be - // the type id of the allocated object. If they are not corrupted, these - // would contain `ranges_checksum` and the start of `samples_metadata` - // respectively (see PersistentHistogramData struct). We do some pointer - // arithmetic here -- it should theoretically be safe, unless something - // went terribly wrong... - SCOPED_CRASH_KEY_NUMBER( - "PersistentMemoryAllocator", "ref_before", - (reference_ - 1)->load(std::memory_order_relaxed)); - SCOPED_CRASH_KEY_NUMBER( - "PersistentMemoryAllocator", "ref_after", - (reference_ + 1)->load(std::memory_order_relaxed)); - DUMP_WILL_BE_NOTREACHED(); - return span(); - } -#endif // !BUILDFLAG(IS_NACL) - // This should never happen but be tolerant if it does as corruption from - // the outside is something to guard against. - DUMP_WILL_BE_NOTREACHED(); - return span(); + if (mem) { + // This is the success path. + return span(mem + offset_, size_ - offset_); } - return span(mem + offset_, size_ - offset_); + + // TODO(crbug.com/40064026) Under normal circumstances, this should not be + // reached. Getting here means the is some corruption or error in the + // allocator and/or the allocated block. + +#if !BUILDFLAG(IS_NACL) + // There are many crash reports containing the `kBlockCookieAllocated` magic + // value in `ref`. This value is used to indicate that a given block in + // persistent memory was successfully allocated, so it should not appear as a + // `ref` value. This likely indicates a dereference into a block header. + // Include some extra crash keys inspect the surrounding values. The value + // before would likely be the size of the allocated object, and the value + // after would likely be the type id of the allocated object. If this is, in + // fact, a valid reference, the value before should contain the + // `ranges_checksum` and value after should contain the start of + // `samples_metadata` respectively (see PersistentHistogramData struct). We do + // some pointer arithmetic here -- it should theoretically be safe, unless + // something went terribly wrong... + const bool ref_is_magic_number = (ref == kBlockCookieAllocated); + SCOPED_CRASH_KEY_STRING32( + PMA, "ref_value_before", + ref_is_magic_number + ? NumberToString((reference_ - 1)->load(std::memory_order_relaxed)) + : "N/A"); + SCOPED_CRASH_KEY_STRING32( + PMA, "ref_value_after", + ref_is_magic_number + ? NumberToString((reference_ + 1)->load(std::memory_order_relaxed)) + : "N/A"); + SCOPED_CRASH_KEY_BOOL(PMA, "ref_found", ref_found); + SCOPED_CRASH_KEY_BOOL(PMA, "race_detected", race_detected); +#endif // !BUILDFLAG(IS_NACL) + + // The allocator has detected a corrupt/invalid reference. This is not fatal. + // Capture the current state to a crash dump so the circumstances can be + // analyzed, + allocator_->DumpWithoutCrashing(ref, + /*expected_type=*/type_, + /*expected_size=*/size_, + /*dump_block_header=*/true); + + // Caller's must gracefully handle the return of an empty span. + return span(); } } // namespace base diff --git a/naiveproxy/src/base/metrics/persistent_memory_allocator.h b/naiveproxy/src/base/metrics/persistent_memory_allocator.h index d7e3ed6f76..fdaafc791f 100644 --- a/naiveproxy/src/base/metrics/persistent_memory_allocator.h +++ b/naiveproxy/src/base/metrics/persistent_memory_allocator.h @@ -345,7 +345,7 @@ class BASE_EXPORT PersistentMemoryAllocator { virtual ~PersistentMemoryAllocator(); - // Check if memory segment is acceptable for creation of an Allocator. This + // Checks if memory segment is acceptable for creation of an Allocator. This // doesn't do any analysis of the data and so doesn't guarantee that the // contents are valid, just that the paramaters won't cause the program to // abort. The IsCorrupt() method will report detection of data problems @@ -355,11 +355,15 @@ class BASE_EXPORT PersistentMemoryAllocator { size_t page_size, bool readonly); - // Get the internal identifier for this persistent memory segment. + // Returns the internal identifier for this persistent memory segment. uint64_t Id() const; - // Get the internal name of this allocator (possibly an empty string). - const char* Name() const; + // Returns the internal name of this allocator (possibly an empty string). + // The returned string_view references a bounded span within the shared + // memory region. As such, it should be treated as a volatile but bounded + // block of memory. In particular, clients should respect the 'length()' of + // the returned view instead of relying on a terminating NUL char. + std::string_view Name() const; // Is this segment open only for read? bool IsReadonly() const { return access_mode_ == kReadOnly; } @@ -368,7 +372,7 @@ class BASE_EXPORT PersistentMemoryAllocator { void SetMemoryState(uint8_t memory_state); uint8_t GetMemoryState() const; - // Create internal histograms for tracking memory use and allocation sizes + // Creates internal histograms for tracking memory use and allocation sizes // for allocator of `name` (which can simply be the result of Name()). This // is done separately from construction for situations such as when the // histograms will be backed by memory provided by this very allocator. @@ -400,9 +404,10 @@ class BASE_EXPORT PersistentMemoryAllocator { const void* data() const { return const_cast(mem_base_); } size_t length() const { return mem_size_; } size_t size() const { return mem_size_; } + size_t page_size() const { return mem_page_; } size_t used() const; - // Get an object referenced by a `ref`. For safety reasons, the `type_id` + // Returns the object referenced by a `ref`. For safety reasons, the `type_id` // code and size-of(`T`) are compared to ensure the reference is valid // and cannot return an object outside of the memory segment. A `type_id` of // kTypeIdAny (zero) will match any though the size is still checked. NULL is @@ -423,7 +428,7 @@ class BASE_EXPORT PersistentMemoryAllocator { // elements, or manually insert padding fields as appropriate for the // largest architecture, including at the end. // - // To protected against mistakes, all objects must have the attribute + // To protect against mistakes, all objects must have the attribute // `kExpectedInstanceSize` (static constexpr size_t) that is a hard-coded // numerical value -- NNN, not sizeof(T) -- that can be tested. If the // instance size is not fixed, at least one build will fail. @@ -460,7 +465,7 @@ class BASE_EXPORT PersistentMemoryAllocator { GetBlockData(ref, T::kPersistentTypeId, sizeof(T), alloc_size))); } - // Like GetAsObject() but get an array of simple, fixed-size types. + // Like GetAsObject() but returns an array of simple, fixed-size types. // // Use a `count` of the required number of array elements, or kSizeAny. // The, optionally returned, `alloc_size` can be used to calculate the upper @@ -491,12 +496,12 @@ class BASE_EXPORT PersistentMemoryAllocator { GetBlockData(ref, type_id, count * sizeof(T), alloc_size))); } - // Get the corresponding reference for an object held in persistent memory. + // Gets the corresponding reference for an object held in persistent memory. // If the `memory` is not valid or the type does not match, a kReferenceNull // result will be returned. Reference GetAsReference(const void* memory, uint32_t type_id) const; - // Access the internal "type" of an object. This generally isn't necessary + // Accesses the internal "type" of an object. This generally isn't necessary // but can be used to "clear" the type and so effectively mark it as deleted // even though the memory stays valid and allocated. Changing the type is // an atomic compare/exchange and so requires knowing the existing value. @@ -528,7 +533,7 @@ class BASE_EXPORT PersistentMemoryAllocator { // Changing the type does not alter its "iterable" status. void MakeIterable(Reference ref); - // Get the information about the amount of free space in the allocator. The + // Gets the information about the amount of free space in the allocator. The // amount of free space should be treated as approximate due to extras from // alignment and metadata. Concurrent allocations from other threads will // also make the true amount less than what is reported. @@ -556,7 +561,7 @@ class BASE_EXPORT PersistentMemoryAllocator { // While the above works much like malloc & free, these next methods provide // an "object" interface similar to new and delete. - // Reserve space in the memory segment of the desired `size` and `type_id`. + // Reserves space in the memory segment of the desired `size` and `type_id`. // // A return value of zero indicates the allocation failed, otherwise the // returned reference can be used by any process to get a real pointer via @@ -566,8 +571,8 @@ class BASE_EXPORT PersistentMemoryAllocator { uint32_t type_id, size_t* alloc_size = nullptr); - // Allocate and construct an object in persistent memory. The type must have - // both (size_t) kExpectedInstanceSize and (uint32_t) kPersistentTypeId + // Allocates and constructs an object in persistent memory. The type must + // have both (size_t) kExpectedInstanceSize and (uint32_t) kPersistentTypeId // static constexpr fields that are used to ensure compatibility between // software versions. An optional size parameter can be specified to force // the allocation to be bigger than the size of the object; this is useful @@ -673,6 +678,21 @@ class BASE_EXPORT PersistentMemoryAllocator { MakeIterable(GetAsReference(obj)); } + // Returns a string_view of a c-style string that is located at the end of an + // allocated memory block. It is the caller's responsibility to know/ensure + // that `object` is of some type that ends with a c-style string and that + // said string begins at `offset` bytes from `object`. `alloc_size` must be + // the size of the allocation, as returned by the allocator. If `object` is + // `nullptr` or `offset >= alloc_size` then an empty string_view is returned. + // Users should treat the returned view as a volatile bounded memory region; + // it references the underlying shared memory, whose contents can be changed + // or corrupted at any time. In particular, clients should respect the + // 'length()' of the returned view instead of relying on a terminating NUL + // char. + static std::string_view StringViewAt(const void* object, + size_t offset, + size_t alloc_size); + protected: enum MemoryType { MEM_EXTERNAL, @@ -790,9 +810,14 @@ class BASE_EXPORT PersistentMemoryAllocator { // Histogram recording used space. raw_ptr used_histogram_ = nullptr; - // TODO(crbug.com/40064026) For debugging purposes. Remove these once done. + // TODO(crbug.com/40064026): Remove these. They are used to investigate + // unexpected failures and code paths. friend class DelayedPersistentAllocation; friend class metrics::FileMetricsProvider; + void DumpWithoutCrashing(Reference ref, + uint32_t expected_type, + size_t expected_size, + bool dump_block_header) const; friend class PersistentMemoryAllocatorTest; FRIEND_TEST_ALL_PREFIXES(PersistentMemoryAllocatorTest, AllocateAndIterate); diff --git a/naiveproxy/src/base/metrics/persistent_sample_map.cc b/naiveproxy/src/base/metrics/persistent_sample_map.cc index 6d74b51142..83b65d50e5 100644 --- a/naiveproxy/src/base/metrics/persistent_sample_map.cc +++ b/naiveproxy/src/base/metrics/persistent_sample_map.cc @@ -4,26 +4,30 @@ #include "base/metrics/persistent_sample_map.h" +#include +#include + #include #include #include "base/check_op.h" #include "base/containers/contains.h" -#include "base/debug/crash_logging.h" +#include "base/metrics/histogram_base.h" #include "base/metrics/histogram_macros.h" +#include "base/metrics/histogram_samples.h" #include "base/metrics/persistent_histogram_allocator.h" #include "base/metrics/sample_map_iterator.h" #include "base/notreached.h" -#include "base/numerics/safe_conversions.h" +#include "build/buildflag.h" + +#if !BUILDFLAG(IS_NACL) +#include "base/debug/crash_logging.h" +#endif namespace base { -typedef HistogramBase::Count Count; -typedef HistogramBase::Sample Sample; - -typedef std::map, CtnExperimental>> - SampleToCountMap; +using Count32 = HistogramBase::Count32; +using Sample32 = HistogramBase::Sample32; namespace { @@ -37,19 +41,19 @@ struct SampleRecord { // Expected size for 32/64-bit check. static constexpr size_t kExpectedInstanceSize = 16; - uint64_t id; // Unique identifier of owner. - Sample value; // The value for which this record holds a count. - std::atomic count; // The count associated with the above value. + uint64_t id; // Unique identifier of owner. + Sample32 value; // The value for which this record holds a count. + std::atomic count; // The count associated with the above value. // `count` may operate inter-process and so must be lock-free. - // static_assert(std::atomic::is_always_lock_free); + // static_assert(std::atomic::is_always_lock_free); // For backwards compatibility, `std::atomic` and `Count` must have // the same memory layouts. If this ever changes, make sure to increment // `kPersistentTypeId` above. - static_assert(std::is_standard_layout_v>); - static_assert(sizeof(std::atomic) == sizeof(Count)); - static_assert(alignof(std::atomic) == alignof(Count)); + static_assert(std::is_standard_layout_v>); + static_assert(sizeof(std::atomic) == sizeof(Count32)); + static_assert(alignof(std::atomic) == alignof(Count32)); }; } // namespace @@ -62,30 +66,25 @@ PersistentSampleMap::PersistentSampleMap( PersistentSampleMap::~PersistentSampleMap() = default; -void PersistentSampleMap::Accumulate(Sample value, Count count) { +void PersistentSampleMap::Accumulate(Sample32 value, Count32 count) { // We have to do the following atomically, because even if the caller is using // a lock, a separate process (that is not aware of this lock) may // concurrently modify the value. GetOrCreateSampleCountStorage(value)->fetch_add(count, std::memory_order_relaxed); - IncreaseSumAndCount(strict_cast(count) * value, count); + IncreaseSumAndCount(int64_t{count} * value, count); } -Count PersistentSampleMap::GetCount(Sample value) const { - // Have to override "const" to make sure all samples have been loaded before - // being able to know what value to return. - const std::atomic* const count_pointer = - const_cast(this)->GetSampleCountStorage(value); +Count32 PersistentSampleMap::GetCount(Sample32 value) const { + const std::atomic* const count_pointer = GetSampleCountStorage(value); return count_pointer ? count_pointer->load(std::memory_order_relaxed) : 0; } -Count PersistentSampleMap::TotalCount() const { - // Have to override "const" in order to make sure all samples have been - // loaded before trying to iterate over the map. - const_cast(this)->ImportSamples( - /*until_value=*/std::nullopt); - - Count count = 0; +Count32 PersistentSampleMap::TotalCount() const { + // Make sure all samples have been loaded before trying to iterate over the + // map. + ImportSamples(); + Count32 count = 0; for (const auto& entry : sample_counts_) { count += entry.second->load(std::memory_order_relaxed); } @@ -93,10 +92,9 @@ Count PersistentSampleMap::TotalCount() const { } std::unique_ptr PersistentSampleMap::Iterator() const { - // Have to override "const" in order to make sure all samples have been - // loaded before trying to iterate over the map. - const_cast(this)->ImportSamples( - /*until_value=*/std::nullopt); + // Make sure all samples have been loaded before trying to iterate over the + // map. + ImportSamples(); return std::make_unique>( sample_counts_); } @@ -104,7 +102,7 @@ std::unique_ptr PersistentSampleMap::Iterator() const { std::unique_ptr PersistentSampleMap::ExtractingIterator() { // Make sure all samples have been loaded before trying to iterate over the // map. - ImportSamples(/*until_value=*/std::nullopt); + ImportSamples(); return std::make_unique>( sample_counts_); } @@ -119,7 +117,7 @@ PersistentMemoryAllocator::Reference PersistentSampleMap::GetNextPersistentRecord( PersistentMemoryAllocator::Iterator& iterator, uint64_t* sample_map_id, - Sample* value) { + Sample32* value) { const SampleRecord* record = iterator.GetNextOfObject(); if (!record) { return 0; @@ -135,41 +133,40 @@ PersistentMemoryAllocator::Reference PersistentSampleMap::CreatePersistentRecord( PersistentMemoryAllocator* allocator, uint64_t sample_map_id, - Sample value) { + Sample32 value) { SampleRecord* record = allocator->New(); - if (!record) { - if (!allocator->IsFull()) { -#if !BUILDFLAG(IS_NACL) - // TODO(crbug.com/40064026): Remove these. They are used to investigate - // unexpected failures. - SCOPED_CRASH_KEY_BOOL("PersistentSampleMap", "corrupted", - allocator->IsCorrupt()); -#endif // !BUILDFLAG(IS_NACL) - DUMP_WILL_BE_NOTREACHED() << "corrupt=" << allocator->IsCorrupt(); - } - return 0; + if (record) { + record->id = sample_map_id; + record->value = value; + record->count = 0; + PersistentMemoryAllocator::Reference ref = + allocator->GetAsReference(record); + allocator->MakeIterable(ref); + return ref; } - record->id = sample_map_id; - record->value = value; - record->count = 0; - - PersistentMemoryAllocator::Reference ref = allocator->GetAsReference(record); - allocator->MakeIterable(ref); - return ref; + if (!allocator->IsFull()) { + const bool corrupt = allocator->IsCorrupt(); +#if !BUILDFLAG(IS_NACL) + // TODO(crbug.com/40064026): Remove. + SCOPED_CRASH_KEY_BOOL("PersistentSampleMap", "corrupted", corrupt); +#endif // !BUILDFLAG(IS_NACL) + DUMP_WILL_BE_NOTREACHED() << "corrupt=" << corrupt; + } + return 0; } bool PersistentSampleMap::AddSubtractImpl(SampleCountIterator* iter, Operator op) { - Sample min; + Sample32 min; int64_t max; - Count count; + Count32 count; for (; !iter->Done(); iter->Next()) { iter->Get(&min, &max, &count); if (count == 0) { continue; } - if (strict_cast(min) + 1 != max) { + if (int64_t{min} + 1 != max) { return false; // SparseHistogram only supports bucket with size 1. } @@ -183,21 +180,17 @@ bool PersistentSampleMap::AddSubtractImpl(SampleCountIterator* iter, return true; } -std::atomic* PersistentSampleMap::GetSampleCountStorage(Sample value) { +std::atomic* PersistentSampleMap::GetSampleCountStorage( + Sample32 value) const { // If |value| is already in the map, just return that. - auto it = sample_counts_.find(value); - if (it != sample_counts_.end()) { - return it->second; - } - - // Import any new samples from persistent memory looking for the value. - return ImportSamples(/*until_value=*/value); + const auto it = sample_counts_.find(value); + return (it == sample_counts_.end()) ? ImportSamples(value) : it->second.get(); } -std::atomic* PersistentSampleMap::GetOrCreateSampleCountStorage( - Sample value) { +std::atomic* PersistentSampleMap::GetOrCreateSampleCountStorage( + Sample32 value) { // Get any existing count storage. - std::atomic* count_pointer = GetSampleCountStorage(value); + std::atomic* count_pointer = GetSampleCountStorage(value); if (count_pointer) { return count_pointer; } @@ -211,7 +204,7 @@ std::atomic* PersistentSampleMap::GetOrCreateSampleCountStorage( // full or corrupt. Instead, allocate the counter from the heap. This // sample will not be persistent, will not be shared, and will leak... // but it's better than crashing. - count_pointer = new std::atomic(0); + count_pointer = new std::atomic(0); sample_counts_[value] = count_pointer; return count_pointer; } @@ -225,12 +218,12 @@ std::atomic* PersistentSampleMap::GetOrCreateSampleCountStorage( // Thread-safety within a process where multiple threads use the same // histogram object is delegated to the controlling histogram object which, // for sparse histograms, is a lock object. - count_pointer = ImportSamples(/*until_value=*/value); + count_pointer = ImportSamples(value); DCHECK(count_pointer); return count_pointer; } -PersistentSampleMapRecords* PersistentSampleMap::GetRecords() { +PersistentSampleMapRecords* PersistentSampleMap::GetRecords() const { // The |records_| pointer is lazily fetched from the |allocator_| only on // first use. Sometimes duplicate histograms are created by race conditions // and if both were to grab the records object, there would be a conflict. @@ -242,8 +235,8 @@ PersistentSampleMapRecords* PersistentSampleMap::GetRecords() { return records_.get(); } -std::atomic* PersistentSampleMap::ImportSamples( - std::optional until_value) { +std::atomic* PersistentSampleMap::ImportSamples( + std::optional until_value) const { std::vector refs; PersistentSampleMapRecords* records = GetRecords(); while (!(refs = records->GetNextRecords(until_value)).empty()) { @@ -251,7 +244,7 @@ std::atomic* PersistentSampleMap::ImportSamples( // map. Iterate through them all and store them internally. Note that if // |until_value| was found, it will be the last element in |refs|. for (auto ref : refs) { - SampleRecord* record = records->GetAsObject(ref); + SampleRecord* const record = records->GetAsObject(ref); if (!record) { continue; } @@ -259,10 +252,8 @@ std::atomic* PersistentSampleMap::ImportSamples( DCHECK_EQ(id(), record->id); // Check if the record's value is already known. - if (!Contains(sample_counts_, record->value)) { - // No: Add it to map of known values. - sample_counts_[record->value] = &record->count; - } else { + const auto ret = sample_counts_.insert({record->value, &record->count}); + if (!ret.second) { // Yes: Ignore it; it's a duplicate caused by a race condition -- see // code & comment in GetOrCreateSampleCountStorage() for details. // Check that nothing ever operated on the duplicate record. diff --git a/naiveproxy/src/base/metrics/persistent_sample_map.h b/naiveproxy/src/base/metrics/persistent_sample_map.h index 8f955c2582..04010b91aa 100644 --- a/naiveproxy/src/base/metrics/persistent_sample_map.h +++ b/naiveproxy/src/base/metrics/persistent_sample_map.h @@ -17,21 +17,22 @@ #include #include "base/base_export.h" -#include "base/compiler_specific.h" #include "base/memory/raw_ptr.h" #include "base/metrics/histogram_base.h" #include "base/metrics/histogram_samples.h" +#include "base/metrics/persistent_histogram_allocator.h" #include "base/metrics/persistent_memory_allocator.h" namespace base { -class PersistentHistogramAllocator; -class PersistentSampleMapRecords; - // The logic here is similar to that of SampleMap but with different data // structures. Changes here likely need to be duplicated there. class BASE_EXPORT PersistentSampleMap : public HistogramSamples { public: + using SampleToCountMap = + std::map, CtnExperimental>>; + // Constructs a persistent sample map using a PersistentHistogramAllocator // as the data source for persistent records. PersistentSampleMap(uint64_t id, @@ -44,10 +45,10 @@ class BASE_EXPORT PersistentSampleMap : public HistogramSamples { ~PersistentSampleMap() override; // HistogramSamples: - void Accumulate(HistogramBase::Sample value, - HistogramBase::Count count) override; - HistogramBase::Count GetCount(HistogramBase::Sample value) const override; - HistogramBase::Count TotalCount() const override; + void Accumulate(HistogramBase::Sample32 value, + HistogramBase::Count32 count) override; + HistogramBase::Count32 GetCount(HistogramBase::Sample32 value) const override; + HistogramBase::Count32 TotalCount() const override; std::unique_ptr Iterator() const override; std::unique_ptr ExtractingIterator() override; bool IsDefinitelyEmpty() const override; @@ -59,33 +60,33 @@ class BASE_EXPORT PersistentSampleMap : public HistogramSamples { static PersistentMemoryAllocator::Reference GetNextPersistentRecord( PersistentMemoryAllocator::Iterator& iterator, uint64_t* sample_map_id, - HistogramBase::Sample* value); + HistogramBase::Sample32* value); // Creates a new record in an |allocator| storing count information for a // specific sample |value| of a histogram with the given |sample_map_id|. static PersistentMemoryAllocator::Reference CreatePersistentRecord( PersistentMemoryAllocator* allocator, uint64_t sample_map_id, - HistogramBase::Sample value); + HistogramBase::Sample32 value); protected: - // Performs arithemetic. |op| is ADD or SUBTRACT. + // Performs arithmetic. |op| is ADD or SUBTRACT. bool AddSubtractImpl(SampleCountIterator* iter, Operator op) override; // Gets a pointer to a "count" corresponding to a given |value|. Returns NULL // if sample does not exist. - std::atomic* GetSampleCountStorage( - HistogramBase::Sample value); + std::atomic* GetSampleCountStorage( + HistogramBase::Sample32 value) const; // Gets a pointer to a "count" corresponding to a given |value|, creating - // the sample (initialized to zero) if it does not already exists. - std::atomic* GetOrCreateSampleCountStorage( - HistogramBase::Sample value); + // the sample (initialized to zero) if it does not already exist. + std::atomic* GetOrCreateSampleCountStorage( + HistogramBase::Sample32 value); private: // Gets the object that manages persistent records. This returns the // |records_| member after first initializing it if necessary. - PersistentSampleMapRecords* GetRecords(); + PersistentSampleMapRecords* GetRecords() const; // Imports samples from persistent memory by iterating over all sample records // found therein, adding them to the sample_counts_ map. If a count for the @@ -94,25 +95,23 @@ class BASE_EXPORT PersistentSampleMap : public HistogramSamples { // currently available samples have been loaded. Pass a nullopt for // |until_value| to force the importing of all available samples (null will // always be returned in this case). - std::atomic* ImportSamples( - std::optional until_value); + std::atomic* ImportSamples( + std::optional until_value = std::nullopt) const; // All created/loaded sample values and their associated counts. The storage // for the actual Count numbers is owned by the |records_| object and its // underlying allocator. - std::map, CtnExperimental>> - sample_counts_; + mutable SampleToCountMap sample_counts_; // The allocator that manages histograms inside persistent memory. This is // owned externally and is expected to live beyond the life of this object. - raw_ptr allocator_; + mutable raw_ptr allocator_; // The object that manages sample records inside persistent memory. The // underlying data used is owned by the |allocator_| object (above). This // value is lazily-initialized on first use via the GetRecords() accessor // method. - std::unique_ptr records_ = nullptr; + mutable std::unique_ptr records_ = nullptr; }; } // namespace base diff --git a/naiveproxy/src/base/metrics/sample_map.cc b/naiveproxy/src/base/metrics/sample_map.cc index f6969f7766..1f39f1a8e4 100644 --- a/naiveproxy/src/base/metrics/sample_map.cc +++ b/naiveproxy/src/base/metrics/sample_map.cc @@ -4,27 +4,26 @@ #include "base/metrics/sample_map.h" -#include +#include -#include "base/check.h" +#include + +#include "base/metrics/histogram_base.h" +#include "base/metrics/histogram_samples.h" #include "base/metrics/sample_map_iterator.h" -#include "base/numerics/safe_conversions.h" +#include "base/numerics/wrapping_math.h" namespace base { -typedef HistogramBase::Count Count; -typedef HistogramBase::Sample Sample; - -typedef std::map SampleToCountMap; - -SampleMap::SampleMap() : SampleMap(0) {} +using Count32 = HistogramBase::Count32; +using Sample32 = HistogramBase::Sample32; SampleMap::SampleMap(uint64_t id) : HistogramSamples(id, std::make_unique()) {} SampleMap::~SampleMap() = default; -void SampleMap::Accumulate(Sample value, Count count) { +void SampleMap::Accumulate(Sample32 value, Count32 count) { // We do not have to do the following atomically -- if the caller needs // thread safety, they should use a lock. And since this is in local memory, // if a lock is used, we know the value would not be concurrently modified @@ -34,16 +33,13 @@ void SampleMap::Accumulate(Sample value, Count count) { IncreaseSumAndCount(strict_cast(count) * value, count); } -Count SampleMap::GetCount(Sample value) const { - auto it = sample_counts_.find(value); - if (it == sample_counts_.end()) { - return 0; - } - return it->second; +Count32 SampleMap::GetCount(Sample32 value) const { + const auto it = sample_counts_.find(value); + return (it == sample_counts_.end()) ? 0 : it->second; } -Count SampleMap::TotalCount() const { - Count count = 0; +Count32 SampleMap::TotalCount() const { + Count32 count = 0; for (const auto& entry : sample_counts_) { count += entry.second; } @@ -70,12 +66,12 @@ bool SampleMap::IsDefinitelyEmpty() const { } bool SampleMap::AddSubtractImpl(SampleCountIterator* iter, Operator op) { - Sample min; + Sample32 min; int64_t max; - Count count; + Count32 count; for (; !iter->Done(); iter->Next()) { iter->Get(&min, &max, &count); - if (strict_cast(min) + 1 != max) { + if (int64_t{min} + 1 != max) { return false; // SparseHistogram only supports bucket with size 1. } @@ -87,7 +83,7 @@ bool SampleMap::AddSubtractImpl(SampleCountIterator* iter, Operator op) { // if a lock is used, we know the value would not be concurrently modified // by a different process (in contrast to PersistentSampleMap, where the // value in shared memory may be modified concurrently by a subprocess). - Count& sample_ref = sample_counts_[min]; + Count32& sample_ref = sample_counts_[min]; if (op == HistogramSamples::ADD) { sample_ref = base::WrappingAdd(sample_ref, count); } else { diff --git a/naiveproxy/src/base/metrics/sample_map.h b/naiveproxy/src/base/metrics/sample_map.h index e62e6a7258..1932588ad0 100644 --- a/naiveproxy/src/base/metrics/sample_map.h +++ b/naiveproxy/src/base/metrics/sample_map.h @@ -14,7 +14,6 @@ #include #include "base/base_export.h" -#include "base/compiler_specific.h" #include "base/metrics/histogram_base.h" #include "base/metrics/histogram_samples.h" @@ -24,8 +23,10 @@ namespace base { // data structures. Changes here likely need to be duplicated there. class BASE_EXPORT SampleMap : public HistogramSamples { public: - SampleMap(); - explicit SampleMap(uint64_t id); + using SampleToCountMap = + std::map; + + explicit SampleMap(uint64_t id = 0); SampleMap(const SampleMap&) = delete; SampleMap& operator=(const SampleMap&) = delete; @@ -33,20 +34,20 @@ class BASE_EXPORT SampleMap : public HistogramSamples { ~SampleMap() override; // HistogramSamples: - void Accumulate(HistogramBase::Sample value, - HistogramBase::Count count) override; - HistogramBase::Count GetCount(HistogramBase::Sample value) const override; - HistogramBase::Count TotalCount() const override; + void Accumulate(HistogramBase::Sample32 value, + HistogramBase::Count32 count) override; + HistogramBase::Count32 GetCount(HistogramBase::Sample32 value) const override; + HistogramBase::Count32 TotalCount() const override; std::unique_ptr Iterator() const override; std::unique_ptr ExtractingIterator() override; bool IsDefinitelyEmpty() const override; protected: - // Performs arithemetic. |op| is ADD or SUBTRACT. + // Performs arithmetic. |op| is ADD or SUBTRACT. bool AddSubtractImpl(SampleCountIterator* iter, Operator op) override; private: - std::map sample_counts_; + SampleToCountMap sample_counts_; }; } // namespace base diff --git a/naiveproxy/src/base/metrics/sample_map_iterator.h b/naiveproxy/src/base/metrics/sample_map_iterator.h index 1da0ea5415..3beac9a229 100644 --- a/naiveproxy/src/base/metrics/sample_map_iterator.h +++ b/naiveproxy/src/base/metrics/sample_map_iterator.h @@ -51,9 +51,9 @@ class SampleMapIterator : public SampleCountIterator { SkipEmptyBuckets(); } - void Get(HistogramBase::Sample* min, + void Get(HistogramBase::Sample32* min, int64_t* max, - HistogramBase::Count* count) override { + HistogramBase::Count32* count) override { DCHECK(!Done()); *min = iter_->first; *max = int64_t{iter_->first} + 1; @@ -84,7 +84,7 @@ class SampleMapIterator : public SampleCountIterator { } } - HistogramBase::Count Load() const { + HistogramBase::Count32 Load() const { if constexpr (kUseAtomicOps) { return iter_->second->load(std::memory_order_relaxed); } else { @@ -92,7 +92,7 @@ class SampleMapIterator : public SampleCountIterator { } } - HistogramBase::Count Exchange() const + HistogramBase::Count32 Exchange() const requires support_extraction { if constexpr (kUseAtomicOps) { diff --git a/naiveproxy/src/base/metrics/sample_vector.cc b/naiveproxy/src/base/metrics/sample_vector.cc index 04ec4c1328..07b6d3c18d 100644 --- a/naiveproxy/src/base/metrics/sample_vector.cc +++ b/naiveproxy/src/base/metrics/sample_vector.cc @@ -6,6 +6,7 @@ #include #include +#include #include "base/check_op.h" #include "base/compiler_specific.h" @@ -33,32 +34,52 @@ namespace base { -typedef HistogramBase::Count Count; -typedef HistogramBase::Sample Sample; +typedef HistogramBase::Count32 Count32; +typedef HistogramBase::Sample32 Sample32; namespace { // An iterator for sample vectors. -template -class IteratorTemplate : public SampleCountIterator { +template +class SampleVectorIterator : public SampleCountIterator { + private: + using T = std::conditional_t; + public: - IteratorTemplate(base::span counts, const BucketRanges* bucket_ranges) + SampleVectorIterator(base::span counts, const BucketRanges* bucket_ranges) : counts_(counts), bucket_ranges_(bucket_ranges) { SkipEmptyBuckets(); } - ~IteratorTemplate() override; + ~SampleVectorIterator() override { + if constexpr (support_extraction) { + // Ensure that the user has consumed all the samples in order to ensure no + // samples are lost. + DCHECK(Done()); + } + } // SampleCountIterator: bool Done() const override { return index_ >= counts_.size(); } void Next() override { DCHECK(!Done()); - index_++; + ++index_; SkipEmptyBuckets(); } - void Get(HistogramBase::Sample* min, + void Get(Sample32* min, int64_t* max, - HistogramBase::Count* count) override; + HistogramBase::Count32* count) override { + DCHECK(!Done()); + *min = bucket_ranges_->range(index_); + *max = strict_cast(bucket_ranges_->range(index_ + 1)); + if constexpr (support_extraction) { + *count = subtle::NoBarrier_AtomicExchange(&counts_[index_], 0); + } else { + *count = subtle::NoBarrier_Load(&counts_[index_]); + } + } // SampleVector uses predefined buckets, so iterator can return bucket index. bool GetBucketIndex(size_t* index) const override { @@ -79,7 +100,7 @@ class IteratorTemplate : public SampleCountIterator { if (subtle::NoBarrier_Load(&counts_[index_]) != 0) { return; } - index_++; + ++index_; } } @@ -88,43 +109,6 @@ class IteratorTemplate : public SampleCountIterator { size_t index_ = 0; }; -using SampleVectorIterator = IteratorTemplate; - -template <> -SampleVectorIterator::~IteratorTemplate() = default; - -// Get() for an iterator of a SampleVector. -template <> -void SampleVectorIterator::Get(HistogramBase::Sample* min, - int64_t* max, - HistogramBase::Count* count) { - DCHECK(!Done()); - *min = bucket_ranges_->range(index_); - *max = strict_cast(bucket_ranges_->range(index_ + 1)); - *count = subtle::NoBarrier_Load(&counts_[index_]); -} - -using ExtractingSampleVectorIterator = - IteratorTemplate; - -template <> -ExtractingSampleVectorIterator::~IteratorTemplate() { - // Ensure that the user has consumed all the samples in order to ensure no - // samples are lost. - DCHECK(Done()); -} - -// Get() for an extracting iterator of a SampleVector. -template <> -void ExtractingSampleVectorIterator::Get(HistogramBase::Sample* min, - int64_t* max, - HistogramBase::Count* count) { - DCHECK(!Done()); - *min = bucket_ranges_->range(index_); - *max = strict_cast(bucket_ranges_->range(index_ + 1)); - *count = subtle::NoBarrier_AtomicExchange(&counts_[index_], 0); -} - } // namespace SampleVectorBase::SampleVectorBase(uint64_t id, @@ -147,7 +131,7 @@ SampleVectorBase::SampleVectorBase(uint64_t id, SampleVectorBase::~SampleVectorBase() = default; -void SampleVectorBase::Accumulate(Sample value, Count count) { +void SampleVectorBase::Accumulate(Sample32 value, Count32 count) { const size_t bucket_index = GetBucketIndex(value); // Handle the single-sample case. @@ -171,12 +155,12 @@ void SampleVectorBase::Accumulate(Sample value, Count count) { } // Handle the multi-sample case. - Count new_bucket_count = + Count32 new_bucket_count = subtle::NoBarrier_AtomicIncrement(&counts_at(bucket_index), count); IncreaseSumAndCount(strict_cast(count) * value, count); // TODO(bcwhite) Remove after crbug.com/682680. - Count old_bucket_count = new_bucket_count - count; + Count32 old_bucket_count = new_bucket_count - count; bool record_negative_sample = (new_bucket_count >= 0) != (old_bucket_count >= 0) && count > 0; if (record_negative_sample) [[unlikely]] { @@ -184,11 +168,11 @@ void SampleVectorBase::Accumulate(Sample value, Count count) { } } -Count SampleVectorBase::GetCount(Sample value) const { +Count32 SampleVectorBase::GetCount(Sample32 value) const { return GetCountAtIndex(GetBucketIndex(value)); } -Count SampleVectorBase::TotalCount() const { +Count32 SampleVectorBase::TotalCount() const { // Handle the single-sample case. SingleSample sample = single_sample().Load(); if (sample.count != 0) { @@ -197,7 +181,7 @@ Count SampleVectorBase::TotalCount() const { // Handle the multi-sample case. if (counts().has_value() || MountExistingCountsStorage()) { - Count count = 0; + Count32 count = 0; // TODO(danakj): In C++23 we can skip the `counts_span` lvalue and iterate // over `counts().value()` directly without creating a dangling reference. span counts_span = counts().value(); @@ -211,7 +195,7 @@ Count SampleVectorBase::TotalCount() const { return 0; } -Count SampleVectorBase::GetCountAtIndex(size_t bucket_index) const { +Count32 SampleVectorBase::GetCountAtIndex(size_t bucket_index) const { DCHECK(bucket_index < counts_size()); // Handle the single-sample case. @@ -239,7 +223,7 @@ std::unique_ptr SampleVectorBase::Iterator() const { // to corruption). If a different sample is eventually emitted, we will // move from SingleSample to a counts storage, and that time, we will // discard this invalid sample (see MoveSingleSampleToCounts()). - return std::make_unique( + return std::make_unique>( base::span(), bucket_ranges_); } @@ -251,11 +235,12 @@ std::unique_ptr SampleVectorBase::Iterator() const { // Handle the multi-sample case. if (counts().has_value() || MountExistingCountsStorage()) { - return std::make_unique(*counts(), bucket_ranges_); + return std::make_unique>(*counts(), + bucket_ranges_); } // And the no-value case. - return std::make_unique( + return std::make_unique>( base::span(), bucket_ranges_); } @@ -268,7 +253,7 @@ std::unique_ptr SampleVectorBase::ExtractingIterator() { // Return an empty iterator if the specified bucket is invalid (e.g. due // to corruption). Note that we've already removed the sample from the // underlying data, so this invalid sample is discarded. - return std::make_unique( + return std::make_unique>( base::span(), bucket_ranges_); } @@ -289,12 +274,12 @@ std::unique_ptr SampleVectorBase::ExtractingIterator() { // Handle the multi-sample case. if (counts().has_value() || MountExistingCountsStorage()) { - return std::make_unique(*counts(), - bucket_ranges_); + return std::make_unique>(*counts(), + bucket_ranges_); } // And the no-value case. - return std::make_unique( + return std::make_unique>( base::span(), bucket_ranges_); } @@ -305,7 +290,7 @@ bool SampleVectorBase::AddSubtractImpl(SampleCountIterator* iter, return true; } - HistogramBase::Count count; + HistogramBase::Count32 count; size_t dest_index = GetDestinationBucketIndexAndCount(*iter, &count); if (dest_index == SIZE_MAX) { return false; @@ -355,8 +340,8 @@ bool SampleVectorBase::AddSubtractImpl(SampleCountIterator* iter, size_t SampleVectorBase::GetDestinationBucketIndexAndCount( SampleCountIterator& iter, - HistogramBase::Count* count) { - HistogramBase::Sample min; + HistogramBase::Count32* count) { + Sample32 min; int64_t max; iter.Get(&min, &max, count); @@ -386,7 +371,7 @@ size_t SampleVectorBase::GetDestinationBucketIndexAndCount( // Uses simple binary search or calculates the index directly if it's an "exact" // linear histogram. This is very general, but there are better approaches if we // knew that the buckets were linearly distributed. -size_t SampleVectorBase::GetBucketIndex(Sample value) const { +size_t SampleVectorBase::GetBucketIndex(Sample32 value) const { size_t bucket_count = bucket_ranges_->bucket_count(); CHECK_GE(value, bucket_ranges_->range(0)); CHECK_LT(value, bucket_ranges_->range(bucket_count)); @@ -394,8 +379,8 @@ size_t SampleVectorBase::GetBucketIndex(Sample value) const { // For "exact" linear histograms, e.g. bucket_count = maximum + 1, their // minimum is 1 and bucket sizes are 1. Thus, we don't need to binary search // the bucket index. The bucket index for bucket |value| is just the |value|. - Sample maximum = bucket_ranges_->range(bucket_count - 1); - if (maximum == static_cast(bucket_count - 1)) { + Sample32 maximum = bucket_ranges_->range(bucket_count - 1); + if (maximum == static_cast(bucket_count - 1)) { // |value| is in the underflow bucket. if (value < 1) { return 0; @@ -462,7 +447,7 @@ void SampleVectorBase::MountCountsStorageAndMoveSingleSample() { AutoLock lock(counts_lock.Get()); if (counts_data_.load(std::memory_order_relaxed) == nullptr) { // Create the actual counts storage while the above lock is acquired. - span counts = CreateCountsStorageWhileLocked(); + span counts = CreateCountsStorageWhileLocked(); // Point |counts()| to the newly created storage. This is done while // locked to prevent possible concurrent calls to CreateCountsStorage // but, between that call and here, other threads could notice the @@ -503,7 +488,7 @@ bool SampleVector::MountExistingCountsStorage() const { std::string SampleVector::GetAsciiHeader(std::string_view histogram_name, int32_t flags) const { - Count sample_count = TotalCount(); + Count32 sample_count = TotalCount(); std::string output; StrAppend(&output, {"Histogram: ", histogram_name, " recorded ", NumberToString(sample_count), " samples"}); @@ -520,7 +505,7 @@ std::string SampleVector::GetAsciiHeader(std::string_view histogram_name, } std::string SampleVector::GetAsciiBody() const { - Count sample_count = TotalCount(); + Count32 sample_count = TotalCount(); // Prepare to normalize graphical rendering of bucket contents. double max_size = 0; @@ -550,7 +535,7 @@ std::string SampleVector::GetAsciiBody() const { std::string output; // Output the actual histogram graph. for (uint32_t i = 0; i < bucket_count(); ++i) { - Count current = GetCountAtIndex(i); + Count32 current = GetCountAtIndex(i); remaining -= current; std::string range = GetSimpleAsciiBucketRange(bucket_ranges()->range(i)); output.append(range); @@ -564,7 +549,7 @@ std::string SampleVector::GetAsciiBody() const { output.append("... \n"); continue; // No reason to plot emptiness. } - Count current_size = round(current * scaling_factor); + Count32 current_size = round(current * scaling_factor); WriteAsciiBucketGraph(current_size, kLineLength, &output); WriteAsciiBucketContext(past, current, remaining, i, &output); output.append("\n"); @@ -575,9 +560,9 @@ std::string SampleVector::GetAsciiBody() const { } double SampleVector::GetPeakBucketSize() const { - Count max = 0; + Count32 max = 0; for (uint32_t i = 0; i < bucket_count(); ++i) { - Count current = GetCountAtIndex(i); + Count32 current = GetCountAtIndex(i); if (current > max) { max = current; } @@ -586,7 +571,7 @@ double SampleVector::GetPeakBucketSize() const { } void SampleVector::WriteAsciiBucketContext(int64_t past, - Count current, + Count32 current, int64_t remaining, uint32_t current_bucket_index, std::string* output) const { diff --git a/naiveproxy/src/base/metrics/sample_vector.h b/naiveproxy/src/base/metrics/sample_vector.h index c92c96502a..a15338e4d3 100644 --- a/naiveproxy/src/base/metrics/sample_vector.h +++ b/naiveproxy/src/base/metrics/sample_vector.h @@ -43,15 +43,15 @@ class BASE_EXPORT SampleVectorBase : public HistogramSamples { ~SampleVectorBase() override; // HistogramSamples: - void Accumulate(HistogramBase::Sample value, - HistogramBase::Count count) override; - HistogramBase::Count GetCount(HistogramBase::Sample value) const override; - HistogramBase::Count TotalCount() const override; + void Accumulate(HistogramBase::Sample32 value, + HistogramBase::Count32 count) override; + HistogramBase::Count32 GetCount(HistogramBase::Sample32 value) const override; + HistogramBase::Count32 TotalCount() const override; std::unique_ptr Iterator() const override; std::unique_ptr ExtractingIterator() override; // Get count of a specific bucket. - HistogramBase::Count GetCountAtIndex(size_t bucket_index) const; + HistogramBase::Count32 GetCountAtIndex(size_t bucket_index) const; // Access the bucket ranges held externally. const BucketRanges* bucket_ranges() const { return bucket_ranges_; } @@ -70,13 +70,13 @@ class BASE_EXPORT SampleVectorBase : public HistogramSamples { SampleCountIterator* iter, HistogramSamples::Operator op) override; // |op| is ADD or SUBTRACT. - virtual size_t GetBucketIndex(HistogramBase::Sample value) const; + virtual size_t GetBucketIndex(HistogramBase::Sample32 value) const; // Gets the destination bucket corresponding to `iter` and its `count` value. // Validates that the destination bucket matches the min/max from the iterator // and returns SIZE_MAX on a mismatch. size_t GetDestinationBucketIndexAndCount(SampleCountIterator& iter, - HistogramBase::Count* count); + HistogramBase::Count32* count); // Moves the single-sample value to a mounted "counts" array. void MoveSingleSampleToCounts(); @@ -94,7 +94,7 @@ class BASE_EXPORT SampleVectorBase : public HistogramSamples { // be the number of counts required by the histogram. Ownership of the // array remains with the called method but will never change. This must be // called while some sort of lock is held to prevent reentry. - virtual span CreateCountsStorageWhileLocked() = 0; + virtual span CreateCountsStorageWhileLocked() = 0; std::optional> counts() { HistogramBase::AtomicCount* data = @@ -184,12 +184,12 @@ class BASE_EXPORT SampleVector : public SampleVectorBase { // SampleVectorBase: bool MountExistingCountsStorage() const override; - span CreateCountsStorageWhileLocked() override; + span CreateCountsStorageWhileLocked() override; // Writes cumulative percentage information based on the number // of past, current, and remaining bucket samples. void WriteAsciiBucketContext(int64_t past, - HistogramBase::Count current, + HistogramBase::Count32 current, int64_t remaining, uint32_t current_bucket_index, std::string* output) const; @@ -220,7 +220,7 @@ class BASE_EXPORT PersistentSampleVector : public SampleVectorBase { private: // SampleVectorBase: bool MountExistingCountsStorage() const override; - span CreateCountsStorageWhileLocked() override; + span CreateCountsStorageWhileLocked() override; // Persistent storage for counts. DelayedPersistentAllocation persistent_counts_; diff --git a/naiveproxy/src/base/metrics/single_sample_metrics.cc b/naiveproxy/src/base/metrics/single_sample_metrics.cc index a2088648a4..28b60a6bbb 100644 --- a/naiveproxy/src/base/metrics/single_sample_metrics.cc +++ b/naiveproxy/src/base/metrics/single_sample_metrics.cc @@ -37,8 +37,8 @@ void SingleSampleMetricsFactory::DeleteFactoryForTesting() { std::unique_ptr DefaultSingleSampleMetricsFactory::CreateCustomCountsMetric( const std::string& histogram_name, - HistogramBase::Sample min, - HistogramBase::Sample max, + HistogramBase::Sample32 min, + HistogramBase::Sample32 max, uint32_t bucket_count) { return std::make_unique( histogram_name, min, max, bucket_count, @@ -47,8 +47,8 @@ DefaultSingleSampleMetricsFactory::CreateCustomCountsMetric( DefaultSingleSampleMetric::DefaultSingleSampleMetric( const std::string& histogram_name, - HistogramBase::Sample min, - HistogramBase::Sample max, + HistogramBase::Sample32 min, + HistogramBase::Sample32 max, uint32_t bucket_count, int32_t flags) : histogram_(Histogram::FactoryGet(histogram_name, @@ -71,7 +71,7 @@ DefaultSingleSampleMetric::~DefaultSingleSampleMetric() { histogram_->Add(sample_); } -void DefaultSingleSampleMetric::SetSample(HistogramBase::Sample sample) { +void DefaultSingleSampleMetric::SetSample(HistogramBase::Sample32 sample) { DCHECK_GE(sample, 0); sample_ = sample; } diff --git a/naiveproxy/src/base/metrics/single_sample_metrics.h b/naiveproxy/src/base/metrics/single_sample_metrics.h index 2ae29574d4..73e0f7c1e9 100644 --- a/naiveproxy/src/base/metrics/single_sample_metrics.h +++ b/naiveproxy/src/base/metrics/single_sample_metrics.h @@ -20,7 +20,7 @@ class BASE_EXPORT SingleSampleMetric { public: virtual ~SingleSampleMetric() = default; - virtual void SetSample(HistogramBase::Sample sample) = 0; + virtual void SetSample(HistogramBase::Sample32 sample) = 0; }; // Factory for creating single sample metrics. A single sample metric only @@ -53,8 +53,8 @@ class BASE_EXPORT SingleSampleMetricsFactory { // UMA_HISTOGRAM_CUSTOM_COUNTS() virtual std::unique_ptr CreateCustomCountsMetric( const std::string& histogram_name, - HistogramBase::Sample min, - HistogramBase::Sample max, + HistogramBase::Sample32 min, + HistogramBase::Sample32 max, uint32_t bucket_count) = 0; }; @@ -74,16 +74,16 @@ class BASE_EXPORT DefaultSingleSampleMetricsFactory // SingleSampleMetricsFactory: std::unique_ptr CreateCustomCountsMetric( const std::string& histogram_name, - HistogramBase::Sample min, - HistogramBase::Sample max, + HistogramBase::Sample32 min, + HistogramBase::Sample32 max, uint32_t bucket_count) override; }; class BASE_EXPORT DefaultSingleSampleMetric : public SingleSampleMetric { public: DefaultSingleSampleMetric(const std::string& histogram_name, - HistogramBase::Sample min, - HistogramBase::Sample max, + HistogramBase::Sample32 min, + HistogramBase::Sample32 max, uint32_t bucket_count, int32_t flags); @@ -94,14 +94,14 @@ class BASE_EXPORT DefaultSingleSampleMetric : public SingleSampleMetric { ~DefaultSingleSampleMetric() override; // SingleSampleMetric: - void SetSample(HistogramBase::Sample sample) override; + void SetSample(HistogramBase::Sample32 sample) override; private: const raw_ptr histogram_; // The last sample provided to SetSample(). We use -1 as a sentinel value to // indicate no sample has been set. - HistogramBase::Sample sample_ = -1; + HistogramBase::Sample32 sample_ = -1; }; } // namespace base diff --git a/naiveproxy/src/base/metrics/sparse_histogram.cc b/naiveproxy/src/base/metrics/sparse_histogram.cc index 0338596da7..b7f0d8024b 100644 --- a/naiveproxy/src/base/metrics/sparse_histogram.cc +++ b/naiveproxy/src/base/metrics/sparse_histogram.cc @@ -23,8 +23,7 @@ namespace base { -typedef HistogramBase::Count Count; -typedef HistogramBase::Sample Sample; +typedef HistogramBase::Count32 Count32; // static HistogramBase* SparseHistogram::FactoryGet(std::string_view name, @@ -80,7 +79,7 @@ HistogramBase* SparseHistogram::FactoryGet(std::string_view name, // Note: Theoretically the below line could be re-entrant if something has // gone very wrong, but crashing w/ an infinite recursion seems OK then. UmaHistogramSparse("Histogram.MismatchedConstructionArguments", - static_cast(HashMetricName(name))); + static_cast(HashMetricName(name))); DLOG(ERROR) << "Histogram " << name << " has a mismatched type"; return DummyHistogram::GetInstance(); } @@ -107,18 +106,18 @@ HistogramType SparseHistogram::GetHistogramType() const { } bool SparseHistogram::HasConstructionArguments( - Sample expected_minimum, - Sample expected_maximum, + Sample32 expected_minimum, + Sample32 expected_maximum, size_t expected_bucket_count) const { // SparseHistogram never has min/max/bucket_count limit. return false; } -void SparseHistogram::Add(Sample value) { +void SparseHistogram::Add(Sample32 value) { AddCount(value, 1); } -void SparseHistogram::AddCount(Sample value, int count) { +void SparseHistogram::AddCount(Sample32 value, int count) { if (count <= 0) { NOTREACHED(); } @@ -217,7 +216,7 @@ SparseHistogram::SparseHistogram(PersistentHistogramAllocator* allocator, // have no such initial allocation. Each sample has its own record // attached to a single PersistentSampleMap by a common 64-bit identifier. // Since a sparse histogram has two sample maps (active and logged), - // there must be two sets of sample records with diffent IDs. The + // there must be two sets of sample records with different IDs. The // "active" samples use, for convenience purposes, an ID matching // that of the histogram while the "logged" samples use that number // plus 1. diff --git a/naiveproxy/src/base/metrics/sparse_histogram.h b/naiveproxy/src/base/metrics/sparse_histogram.h index ccefc2539b..a01f15536d 100644 --- a/naiveproxy/src/base/metrics/sparse_histogram.h +++ b/naiveproxy/src/base/metrics/sparse_histogram.h @@ -47,11 +47,11 @@ class BASE_EXPORT SparseHistogram : public HistogramBase { // HistogramBase: uint64_t name_hash() const override; HistogramType GetHistogramType() const override; - bool HasConstructionArguments(Sample expected_minimum, - Sample expected_maximum, + bool HasConstructionArguments(Sample32 expected_minimum, + Sample32 expected_maximum, size_t expected_bucket_count) const override; - void Add(Sample value) override; - void AddCount(Sample value, int count) override; + void Add(Sample32 value) override; + void AddCount(Sample32 value, int count) override; bool AddSamples(const HistogramSamples& samples) override; bool AddSamplesFromPickle(base::PickleIterator* iter) override; std::unique_ptr SnapshotSamples() const override; diff --git a/naiveproxy/src/base/metrics/statistics_recorder.cc b/naiveproxy/src/base/metrics/statistics_recorder.cc index 078e7b210d..5c3d3e9510 100644 --- a/naiveproxy/src/base/metrics/statistics_recorder.cc +++ b/naiveproxy/src/base/metrics/statistics_recorder.cc @@ -2,8 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "base/metrics/statistics_recorder.h" +#include #include #include "base/at_exit.h" @@ -18,7 +24,6 @@ #include "base/metrics/metrics_hashes.h" #include "base/metrics/persistent_histogram_allocator.h" #include "base/metrics/record_histogram_checker.h" -#include "base/ranges/algorithm.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "base/values.h" @@ -65,7 +70,7 @@ StatisticsRecorder::ScopedHistogramSampleObserver:: void StatisticsRecorder::ScopedHistogramSampleObserver::RunCallback( const char* histogram_name, uint64_t name_hash, - HistogramBase::Sample sample) { + HistogramBase::Sample32 sample) { callback_.Run(histogram_name, name_hash, sample); } @@ -382,7 +387,7 @@ void StatisticsRecorder::FindAndRunHistogramCallbacks( base::PassKey, const char* histogram_name, uint64_t name_hash, - HistogramBase::Sample sample) { + HistogramBase::Sample32 sample) { DCHECK_EQ(name_hash, HashMetricName(histogram_name)); const AutoLock auto_lock(GetLock()); @@ -518,7 +523,7 @@ StatisticsRecorder::Histograms StatisticsRecorder::GetHistograms( // static StatisticsRecorder::Histograms StatisticsRecorder::Sort(Histograms histograms) { - ranges::sort(histograms, &HistogramNameLesser); + std::ranges::sort(histograms, &HistogramNameLesser); return histograms; } @@ -537,17 +542,14 @@ StatisticsRecorder::Histograms StatisticsRecorder::WithName( query_string = lowercase_query.c_str(); } - histograms.erase( - ranges::remove_if( - histograms, - [query_string, case_sensitive](const HistogramBase* const h) { - return !strstr( - case_sensitive - ? h->histogram_name() - : base::ToLowerASCII(h->histogram_name()).c_str(), - query_string); - }), - histograms.end()); + auto removed = std::ranges::remove_if( + histograms, [query_string, case_sensitive](const HistogramBase* const h) { + return !strstr(case_sensitive + ? h->histogram_name() + : base::ToLowerASCII(h->histogram_name()).c_str(), + query_string); + }); + histograms.erase(removed.begin(), removed.end()); return histograms; } diff --git a/naiveproxy/src/base/metrics/statistics_recorder.h b/naiveproxy/src/base/metrics/statistics_recorder.h index b45c8443df..69bfba1853 100644 --- a/naiveproxy/src/base/metrics/statistics_recorder.h +++ b/naiveproxy/src/base/metrics/statistics_recorder.h @@ -76,7 +76,7 @@ class BASE_EXPORT StatisticsRecorder { using OnSampleCallback = base::RepeatingCallback; + HistogramBase::Sample32)>; // An observer that gets notified whenever a new sample is recorded for a // particular histogram. Clients only need to construct it with the histogram @@ -99,7 +99,7 @@ class BASE_EXPORT StatisticsRecorder { // Runs the callback. void RunCallback(const char* histogram_name, uint64_t name_hash, - HistogramBase::Sample sample); + HistogramBase::Sample32 sample); // The name of the histogram to observe. const std::string histogram_name_; @@ -218,7 +218,7 @@ class BASE_EXPORT StatisticsRecorder { static void FindAndRunHistogramCallbacks(base::PassKey, const char* histogram_name, uint64_t name_hash, - HistogramBase::Sample sample); + HistogramBase::Sample32 sample); // Returns the number of known histograms. // @@ -280,7 +280,7 @@ class BASE_EXPORT StatisticsRecorder { using GlobalSampleCallback = void (*)(const char* /*=histogram_name*/, uint64_t /*=name_hash*/, - HistogramBase::Sample); + HistogramBase::Sample32); // Installs a global callback which will be called for every added // histogram sample. The given callback is a raw function pointer in order // to be accessed lock-free and can be called on any thread. diff --git a/naiveproxy/src/base/metrics/user_metrics.cc b/naiveproxy/src/base/metrics/user_metrics.cc index f48d978993..0732582711 100644 --- a/naiveproxy/src/base/metrics/user_metrics.cc +++ b/naiveproxy/src/base/metrics/user_metrics.cc @@ -6,12 +6,12 @@ #include +#include #include #include "base/functional/bind.h" #include "base/lazy_instance.h" #include "base/location.h" -#include "base/ranges/algorithm.h" #include "base/threading/thread_checker.h" #include "base/time/time.h" #include "base/trace_event/base_tracing.h" @@ -69,7 +69,7 @@ void RemoveActionCallback(const ActionCallback& callback) { DCHECK(g_task_runner.Get()); DCHECK(g_task_runner.Get()->BelongsToCurrentThread()); std::vector* callbacks = g_callbacks.Pointer(); - const auto i = ranges::find(*callbacks, callback); + const auto i = std::ranges::find(*callbacks, callback); if (i != callbacks->end()) { callbacks->erase(i); } diff --git a/naiveproxy/src/base/native_library.h b/naiveproxy/src/base/native_library.h index 40c7bd98ae..5f6f835cc9 100644 --- a/naiveproxy/src/base/native_library.h +++ b/naiveproxy/src/base/native_library.h @@ -17,7 +17,7 @@ #include "build/build_config.h" #if BUILDFLAG(IS_WIN) -#include +#include "base/win/windows_types.h" #elif BUILDFLAG(IS_APPLE) #import #endif // OS_* diff --git a/naiveproxy/src/base/nix/mime_util_xdg.cc b/naiveproxy/src/base/nix/mime_util_xdg.cc index 2f77bedc0d..4abd08fd45 100644 --- a/naiveproxy/src/base/nix/mime_util_xdg.cc +++ b/naiveproxy/src/base/nix/mime_util_xdg.cc @@ -4,6 +4,7 @@ #include "base/nix/mime_util_xdg.h" +#include #include #include @@ -16,7 +17,6 @@ #include "base/nix/xdg_util.h" #include "base/no_destructor.h" #include "base/numerics/byte_conversions.h" -#include "base/ranges/algorithm.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversion_utils.h" #include "build/build_config.h" @@ -262,7 +262,7 @@ std::string GetFileMimeType(const FilePath& filepath) { Time now = Time::Now(); if (last_check + Seconds(5) < now) { - if (ranges::any_of(*xdg_mime_files, [](const FileInfo& file_info) { + if (std::ranges::any_of(*xdg_mime_files, [](const FileInfo& file_info) { File::Info info; return !GetFileInfo(file_info.path, &info) || info.last_modified != file_info.last_modified; diff --git a/naiveproxy/src/base/nix/xdg_util.cc b/naiveproxy/src/base/nix/xdg_util.cc index 80762707e2..ffddfd1a50 100644 --- a/naiveproxy/src/base/nix/xdg_util.cc +++ b/naiveproxy/src/base/nix/xdg_util.cc @@ -281,6 +281,10 @@ void ExtractXdgActivationTokenFromCmdLine(base::CommandLine& cmd_line) { } } +void SetActivationToken(std::string token) { + GetXdgActivationToken() = std::move(token); +} + std::optional TakeXdgActivationToken() { auto token = GetXdgActivationToken(); GetXdgActivationToken().reset(); @@ -311,6 +315,14 @@ void CreateLaunchOptionsWithXdgActivation( base::BindOnce(create_token_cb, std::move(callback))); } +void CreateXdgActivationToken(XdgActivationTokenCallback callback) { + if (!GetXdgActivationTokenCreator()) { + std::move(callback).Run({}); + return; + } + GetXdgActivationTokenCreator().Run(std::move(callback)); +} + std::string XdgDesktopPortalRequestPath(const std::string& sender, const std::string& token) { // Since version 0.9 of xdg-desktop-portal, the handle will be of the form diff --git a/naiveproxy/src/base/nix/xdg_util.h b/naiveproxy/src/base/nix/xdg_util.h index 53595383c3..66afb80bf2 100644 --- a/naiveproxy/src/base/nix/xdg_util.h +++ b/naiveproxy/src/base/nix/xdg_util.h @@ -135,6 +135,10 @@ BASE_EXPORT std::optional ExtractXdgActivationTokenFromEnv( BASE_EXPORT void ExtractXdgActivationTokenFromCmdLine( base::CommandLine& cmd_line); +// Sets the global activation token not received from the command line or as +// an environment variable, e.g. from notification D-BUS API. +BASE_EXPORT void SetActivationToken(std::string token); + // Transfers ownership of the currently set global activation token if set. BASE_EXPORT std::optional TakeXdgActivationToken(); @@ -147,6 +151,10 @@ BASE_EXPORT void SetXdgActivationTokenCreator( BASE_EXPORT void CreateLaunchOptionsWithXdgActivation( XdgActivationLaunchOptionsCallback callback); +// Tries to create an xdg-activation token and invokes the `callback` with the +// token if available, or an empty string. +BASE_EXPORT void CreateXdgActivationToken(XdgActivationTokenCallback callback); + // Returns a request path as specified in v0.9 of xdg-desktop-portal: // https://flatpak.github.io/xdg-desktop-portal/docs/doc-org.freedesktop.portal.Request.html BASE_EXPORT diff --git a/naiveproxy/src/base/numerics/basic_ops_impl.h b/naiveproxy/src/base/numerics/basic_ops_impl.h index 857c7e2a89..19d06432f1 100644 --- a/naiveproxy/src/base/numerics/basic_ops_impl.h +++ b/naiveproxy/src/base/numerics/basic_ops_impl.h @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #ifndef BASE_NUMERICS_BASIC_OPS_IMPL_H_ #define BASE_NUMERICS_BASIC_OPS_IMPL_H_ diff --git a/naiveproxy/src/base/numerics/clamped_math.h b/naiveproxy/src/base/numerics/clamped_math.h index 66e2e31583..b6fc0c62e4 100644 --- a/naiveproxy/src/base/numerics/clamped_math.h +++ b/naiveproxy/src/base/numerics/clamped_math.h @@ -152,6 +152,7 @@ class ClampedNumeric { } template + requires std::is_arithmetic_v> constexpr operator Dst() const { // NOLINT(google-explicit-constructor) return saturated_cast>(value_); } diff --git a/naiveproxy/src/base/numerics/safe_conversions.h b/naiveproxy/src/base/numerics/safe_conversions.h index 11042ddad2..7d57ca2ac8 100644 --- a/naiveproxy/src/base/numerics/safe_conversions.h +++ b/naiveproxy/src/base/numerics/safe_conversions.h @@ -288,6 +288,9 @@ class StrictNumeric { return static_cast>(value_); } + // Unary negation does not require any conversions. + constexpr bool operator!() const { return !value_; } + private: template requires std::is_arithmetic_v diff --git a/naiveproxy/src/base/observer_list.h b/naiveproxy/src/base/observer_list.h index 36bb484acd..73476630a8 100644 --- a/naiveproxy/src/base/observer_list.h +++ b/naiveproxy/src/base/observer_list.h @@ -19,10 +19,8 @@ #include "base/check.h" #include "base/check_op.h" #include "base/dcheck_is_on.h" -#include "base/debug/dump_without_crashing.h" #include "base/notreached.h" #include "base/observer_list_internal.h" -#include "base/ranges/algorithm.h" #include "base/sequence_checker.h" #include "build/build_config.h" @@ -326,7 +324,7 @@ class ObserverList { // not in this list. void RemoveObserver(const ObserverType* obs) { DCHECK(obs); - const auto it = ranges::find_if( + const auto it = std::ranges::find_if( observers_, [obs](const auto& o) { return o.IsEqual(obs); }); if (it == observers_.end()) { return; @@ -350,7 +348,7 @@ class ObserverList { if (obs == nullptr) { return false; } - return ranges::find_if(observers_, [obs](const auto& o) { + return std::ranges::find_if(observers_, [obs](const auto& o) { return o.IsEqual(obs); }) != observers_.end(); } diff --git a/naiveproxy/src/base/observer_list_internal.cc b/naiveproxy/src/base/observer_list_internal.cc index 40b8520532..73fcd89019 100644 --- a/naiveproxy/src/base/observer_list_internal.cc +++ b/naiveproxy/src/base/observer_list_internal.cc @@ -4,8 +4,7 @@ #include "base/observer_list_internal.h" -namespace base { -namespace internal { +namespace base::internal { CheckedObserverAdapter::CheckedObserverAdapter(const CheckedObserver* observer) : weak_ptr_(observer->factory_.GetWeakPtr()) {} @@ -16,5 +15,4 @@ CheckedObserverAdapter& CheckedObserverAdapter::operator=( CheckedObserverAdapter&& other) = default; CheckedObserverAdapter::~CheckedObserverAdapter() = default; -} // namespace internal -} // namespace base +} // namespace base::internal diff --git a/naiveproxy/src/base/observer_list_threadsafe.cc b/naiveproxy/src/base/observer_list_threadsafe.cc index 8a15c5bcf9..6e22a60acc 100644 --- a/naiveproxy/src/base/observer_list_threadsafe.cc +++ b/naiveproxy/src/base/observer_list_threadsafe.cc @@ -6,8 +6,7 @@ #include "base/compiler_specific.h" -namespace base { -namespace internal { +namespace base::internal { constinit thread_local const ObserverListThreadSafeBase::NotificationDataBase* current_notification = nullptr; @@ -25,5 +24,4 @@ ObserverListThreadSafeBase::GetCurrentNotification() { return current_notification; } -} // namespace internal -} // namespace base +} // namespace base::internal diff --git a/naiveproxy/src/base/path_service.cc b/naiveproxy/src/base/path_service.cc index b294f2499c..43d4401d67 100644 --- a/naiveproxy/src/base/path_service.cc +++ b/naiveproxy/src/base/path_service.cc @@ -140,9 +140,9 @@ struct PathData { PathMap cache; // Cache mappings from path key to path value. PathMap overrides; // Track path overrides. raw_ptr providers; // Linked list of path service providers. - bool cache_disabled; // Don't use cache if true; + bool cache_disabled = false; // Don't use cache if true; - PathData() : cache_disabled(false) { + PathData() { #if BUILDFLAG(IS_WIN) providers = &base_provider_win; #elif BUILDFLAG(IS_MAC) diff --git a/naiveproxy/src/base/pickle.cc b/naiveproxy/src/base/pickle.cc index c30ad73d91..3bb0d909ce 100644 --- a/naiveproxy/src/base/pickle.cc +++ b/naiveproxy/src/base/pickle.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "base/pickle.h" #include diff --git a/naiveproxy/src/base/posix/can_lower_nice_to.cc b/naiveproxy/src/base/posix/can_lower_nice_to.cc index 123ee3a408..d9117138b4 100644 --- a/naiveproxy/src/base/posix/can_lower_nice_to.cc +++ b/naiveproxy/src/base/posix/can_lower_nice_to.cc @@ -19,8 +19,7 @@ #define RLIMIT_NICE 20 #endif -namespace base { -namespace internal { +namespace base::internal { bool CanLowerNiceTo(int nice_value) { // On a POSIX system, the nice value of a thread can be lowered 1. by the root @@ -58,5 +57,4 @@ bool CanLowerNiceTo(int nice_value) { return nice_value >= lowest_nice_allowed; } -} // namespace internal -} // namespace base +} // namespace base::internal diff --git a/naiveproxy/src/base/posix/global_descriptors.cc b/naiveproxy/src/base/posix/global_descriptors.cc index b96f44e2cb..dfe51ff9ac 100644 --- a/naiveproxy/src/base/posix/global_descriptors.cc +++ b/naiveproxy/src/base/posix/global_descriptors.cc @@ -76,7 +76,7 @@ void GlobalDescriptors::Set(Key key, } } - descriptors_.push_back(Descriptor(key, fd, region)); + descriptors_.emplace_back(key, fd, region); } base::MemoryMappedFile::Region GlobalDescriptors::GetRegion(Key key) const { diff --git a/naiveproxy/src/base/posix/unix_domain_socket.cc b/naiveproxy/src/base/posix/unix_domain_socket.cc index 23a8fc441c..b597aca4ac 100644 --- a/naiveproxy/src/base/posix/unix_domain_socket.cc +++ b/naiveproxy/src/base/posix/unix_domain_socket.cc @@ -189,7 +189,7 @@ ssize_t UnixDomainSocket::RecvMsgWithFlags(int fd, if (wire_fds) { for (size_t i = 0; i < wire_fds_len; ++i) { - fds->push_back(ScopedFD(wire_fds[i])); // TODO(mdempsky): emplace_back + fds->emplace_back(wire_fds[i]); } } diff --git a/naiveproxy/src/base/power_monitor/battery_level_provider.cc b/naiveproxy/src/base/power_monitor/battery_level_provider.cc index afd51747de..7ec3ce6bd4 100644 --- a/naiveproxy/src/base/power_monitor/battery_level_provider.cc +++ b/naiveproxy/src/base/power_monitor/battery_level_provider.cc @@ -4,8 +4,9 @@ #include "base/power_monitor/battery_level_provider.h" +#include + #include "base/power_monitor/power_monitor_buildflags.h" -#include "base/ranges/algorithm.h" namespace base { @@ -29,7 +30,7 @@ BatteryLevelProvider::BatteryState BatteryLevelProvider::MakeBatteryState( state.battery_count = static_cast(battery_details.size()); state.is_external_power_connected = battery_details.size() == 0 || - base::ranges::any_of(battery_details, [](const BatteryDetails& details) { + std::ranges::any_of(battery_details, [](const BatteryDetails& details) { return details.is_external_power_connected; }); diff --git a/naiveproxy/src/base/power_monitor/battery_state_sampler.cc b/naiveproxy/src/base/power_monitor/battery_state_sampler.cc index f3c6d300c1..e6f918a4bb 100644 --- a/naiveproxy/src/base/power_monitor/battery_state_sampler.cc +++ b/naiveproxy/src/base/power_monitor/battery_state_sampler.cc @@ -98,6 +98,11 @@ bool BatteryStateSampler::HasTestingInstance() { return g_test_instance_installed; } +base::TimeDelta BatteryStateSampler::GetSampleInterval() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + return sampling_event_source_->GetSampleInterval(); +} + #if !BUILDFLAG(IS_MAC) // static std::unique_ptr diff --git a/naiveproxy/src/base/power_monitor/battery_state_sampler.h b/naiveproxy/src/base/power_monitor/battery_state_sampler.h index 5359c63b23..c1e6fc7d67 100644 --- a/naiveproxy/src/base/power_monitor/battery_state_sampler.h +++ b/naiveproxy/src/base/power_monitor/battery_state_sampler.h @@ -67,6 +67,12 @@ class BASE_EXPORT BatteryStateSampler { // Returns true if a sampler has been created using `CreateInstanceForTesting` static bool HasTestingInstance(); + // Returns the expected time between each sample. The actual time can vary + // slighly, but a large discrepancy to this value indicates that the sample + // is not to be trusted. For example, the machine might have gone to sleep, + // skewing the data. + base::TimeDelta GetSampleInterval(); + private: // Returns a platform specific SamplingEventSource. static std::unique_ptr CreateSamplingEventSource(); diff --git a/naiveproxy/src/base/power_monitor/iopm_power_source_sampling_event_source.cc b/naiveproxy/src/base/power_monitor/iopm_power_source_sampling_event_source.cc index 27c6cf28b8..0577679467 100644 --- a/naiveproxy/src/base/power_monitor/iopm_power_source_sampling_event_source.cc +++ b/naiveproxy/src/base/power_monitor/iopm_power_source_sampling_event_source.cc @@ -9,6 +9,7 @@ #include "base/check.h" #include "base/logging.h" +#include "base/time/time.h" namespace base { @@ -54,6 +55,10 @@ bool IOPMPowerSourceSamplingEventSource::Start(SamplingEventCallback callback) { return true; } +TimeDelta IOPMPowerSourceSamplingEventSource::GetSampleInterval() { + return Minutes(1); +} + // static void IOPMPowerSourceSamplingEventSource::OnNotification( void* context, diff --git a/naiveproxy/src/base/power_monitor/iopm_power_source_sampling_event_source.h b/naiveproxy/src/base/power_monitor/iopm_power_source_sampling_event_source.h index 691d9b5bbd..70cff5bfcb 100644 --- a/naiveproxy/src/base/power_monitor/iopm_power_source_sampling_event_source.h +++ b/naiveproxy/src/base/power_monitor/iopm_power_source_sampling_event_source.h @@ -24,6 +24,7 @@ class BASE_EXPORT IOPMPowerSourceSamplingEventSource // SamplingEventSource: bool Start(SamplingEventCallback callback) override; + TimeDelta GetSampleInterval() override; private: static void OnNotification(void* context, diff --git a/naiveproxy/src/base/power_monitor/sampling_event_source.h b/naiveproxy/src/base/power_monitor/sampling_event_source.h index 8cee81c58a..94992d8bc7 100644 --- a/naiveproxy/src/base/power_monitor/sampling_event_source.h +++ b/naiveproxy/src/base/power_monitor/sampling_event_source.h @@ -7,6 +7,7 @@ #include "base/base_export.h" #include "base/functional/callback_forward.h" +#include "base/time/time.h" namespace base { @@ -20,6 +21,9 @@ class BASE_EXPORT SamplingEventSource { // Starts generating sampling events. Returns whether the operation succeeded. // |callback| is invoked for every sampling event. virtual bool Start(SamplingEventCallback callback) = 0; + + // Returns the expected time between each call to the SamplingEventCallback. + virtual base::TimeDelta GetSampleInterval() = 0; }; } // namespace base diff --git a/naiveproxy/src/base/power_monitor/timer_sampling_event_source.cc b/naiveproxy/src/base/power_monitor/timer_sampling_event_source.cc index afe511177d..7603835dfd 100644 --- a/naiveproxy/src/base/power_monitor/timer_sampling_event_source.cc +++ b/naiveproxy/src/base/power_monitor/timer_sampling_event_source.cc @@ -19,4 +19,8 @@ bool TimerSamplingEventSource::Start(SamplingEventCallback callback) { return true; } +TimeDelta TimerSamplingEventSource::GetSampleInterval() { + return interval_; +} + } // namespace base diff --git a/naiveproxy/src/base/power_monitor/timer_sampling_event_source.h b/naiveproxy/src/base/power_monitor/timer_sampling_event_source.h index d315c10379..55657b58d0 100644 --- a/naiveproxy/src/base/power_monitor/timer_sampling_event_source.h +++ b/naiveproxy/src/base/power_monitor/timer_sampling_event_source.h @@ -22,6 +22,7 @@ class BASE_EXPORT TimerSamplingEventSource : public SamplingEventSource { // SamplingEventSource: bool Start(SamplingEventCallback callback) override; + TimeDelta GetSampleInterval() override; private: const TimeDelta interval_; diff --git a/naiveproxy/src/base/process/current_process.cc b/naiveproxy/src/base/process/current_process.cc index 072ffc02e1..88bdcb2d05 100644 --- a/naiveproxy/src/base/process/current_process.cc +++ b/naiveproxy/src/base/process/current_process.cc @@ -190,9 +190,6 @@ void CurrentProcess::SetProcessNameAndType(const std::string& process_name, process_type_.store(static_cast(process_type), std::memory_order_relaxed); } -#if BUILDFLAG(ENABLE_BASE_TRACING) - trace_event::TraceLog::GetInstance()->OnSetProcessName(process_name); -#endif } } // namespace base diff --git a/naiveproxy/src/base/process/environment_internal.cc b/naiveproxy/src/base/process/environment_internal.cc index f5db2e0235..0d9dd241ec 100644 --- a/naiveproxy/src/base/process/environment_internal.cc +++ b/naiveproxy/src/base/process/environment_internal.cc @@ -23,8 +23,7 @@ #include "base/check_op.h" #endif -namespace base { -namespace internal { +namespace base::internal { namespace { @@ -143,5 +142,4 @@ NativeEnvironmentString AlterEnvironment(const wchar_t* env, #endif // BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA) -} // namespace internal -} // namespace base +} // namespace base::internal diff --git a/naiveproxy/src/base/process/internal_linux.h b/naiveproxy/src/base/process/internal_linux.h index 1c02a3ad6e..493722298b 100644 --- a/naiveproxy/src/base/process/internal_linux.h +++ b/naiveproxy/src/base/process/internal_linux.h @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + // This file contains internal routines that are called by other files in // base/process/. diff --git a/naiveproxy/src/base/process/launch_posix.cc b/naiveproxy/src/base/process/launch_posix.cc index e1b931401c..bc2944968b 100644 --- a/naiveproxy/src/base/process/launch_posix.cc +++ b/naiveproxy/src/base/process/launch_posix.cc @@ -165,7 +165,7 @@ long sys_rt_sigaction(int sig, // The motivation for going through all of them is that sa_restorer can leak // from parents and help defeat ASLR on buggy kernels. We reset it to null. // See crbug.com/177956. -void ResetChildSignalHandlersToDefaults(void) { +void ResetChildSignalHandlersToDefaults() { for (int signum = 1;; ++signum) { struct kernel_sigaction act = {nullptr}; long sigaction_get_ret = sys_rt_sigaction(signum, nullptr, &act); @@ -475,8 +475,8 @@ Process LaunchProcess(const std::vector& argv, for (size_t i = 0; i < options.fds_to_remap.size(); ++i) { const FileHandleMappingVector::value_type& value = options.fds_to_remap[i]; - fd_shuffle1.push_back(InjectionArc(value.first, value.second, false)); - fd_shuffle2.push_back(InjectionArc(value.first, value.second, false)); + fd_shuffle1.emplace_back(value.first, value.second, false); + fd_shuffle2.emplace_back(value.first, value.second, false); } if (!options.environment.empty() || options.clear_environment) { @@ -618,10 +618,10 @@ static bool GetAppOutputInternal(const std::vector& argv, _exit(127); } - fd_shuffle1.push_back(InjectionArc(pipe_fd[1], STDOUT_FILENO, true)); - fd_shuffle1.push_back(InjectionArc(include_stderr ? pipe_fd[1] : dev_null, - STDERR_FILENO, true)); - fd_shuffle1.push_back(InjectionArc(dev_null, STDIN_FILENO, true)); + fd_shuffle1.emplace_back(pipe_fd[1], STDOUT_FILENO, true); + fd_shuffle1.emplace_back(include_stderr ? pipe_fd[1] : dev_null, + STDERR_FILENO, true); + fd_shuffle1.emplace_back(dev_null, STDIN_FILENO, true); // Adding another element here? Remeber to increase the argument to // reserve(), above. diff --git a/naiveproxy/src/base/process/memory.cc b/naiveproxy/src/base/process/memory.cc index 81ce8fcddd..0a4a8a0f7b 100644 --- a/naiveproxy/src/base/process/memory.cc +++ b/naiveproxy/src/base/process/memory.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "base/process/memory.h" #include diff --git a/naiveproxy/src/base/process/process_info.h b/naiveproxy/src/base/process/process_info.h index 8371c1494d..c7f24f3778 100644 --- a/naiveproxy/src/base/process/process_info.h +++ b/naiveproxy/src/base/process/process_info.h @@ -39,13 +39,10 @@ BASE_EXPORT bool IsCurrentProcessInAppContainer(); #endif // BUILDFLAG(IS_WIN) #if BUILDFLAG(IS_MAC) -// Returns whether the current process is responsible for itself. See -// https://bugs.chromium.org/p/chromium/issues/detail?id=945969 and +// Checks if the responsible process has Bluetooth metadata in its Info.plist +// file. See https://bugs.chromium.org/p/chromium/issues/detail?id=945969 and // https://bugs.chromium.org/p/chromium/issues/detail?id=996993. -// -// On versions of macOS that do not have the concept, this will always return -// true. -BASE_EXPORT bool IsProcessSelfResponsible(); +BASE_EXPORT bool DoesResponsibleProcessHaveBluetoothMetadata(); #endif } // namespace base diff --git a/naiveproxy/src/base/process/process_info_mac.cc b/naiveproxy/src/base/process/process_info_mac.cc deleted file mode 100644 index 94a028be3c..0000000000 --- a/naiveproxy/src/base/process/process_info_mac.cc +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2022 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "base/process/process_info.h" - -#include -#include -#include - -extern "C" { -pid_t responsibility_get_pid_responsible_for_pid(pid_t); -} - -namespace base { - -bool IsProcessSelfResponsible() { - const pid_t pid = getpid(); - return responsibility_get_pid_responsible_for_pid(pid) == pid; -} - -} // namespace base diff --git a/naiveproxy/src/base/process/process_info_mac.mm b/naiveproxy/src/base/process/process_info_mac.mm new file mode 100644 index 0000000000..e12c1d0781 --- /dev/null +++ b/naiveproxy/src/base/process/process_info_mac.mm @@ -0,0 +1,51 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/process/process_info.h" + +#import +#include + +extern "C" { +pid_t responsibility_get_pid_responsible_for_pid(pid_t); +} + +namespace { + +bool AppContainsBluetoothUsageDescription(NSRunningApplication* app) { + NSURL* bundle_url = app.bundleURL; + if (!bundle_url) { + return false; + } + + NSBundle* bundle = [NSBundle bundleWithURL:bundle_url]; + id bluetooth_entry = + [bundle objectForInfoDictionaryKey:@"NSBluetoothAlwaysUsageDescription"]; + return bluetooth_entry != nil; +} + +} // namespace + +namespace base { + +bool DoesResponsibleProcessHaveBluetoothMetadata() { + const pid_t pid = getpid(); + const pid_t responsible_pid = responsibility_get_pid_responsible_for_pid(pid); + // Returns true directly if this is a self-responsible app(e.g. Chrome opens + // from Finder or Dock). This is an optimization to avoid the blocking-path + // work in the common case. Because Chrome itself declares Bluetooth metadata + // in Info.plist. + if (responsible_pid == pid) { + return true; + } + + NSRunningApplication* app = [NSRunningApplication + runningApplicationWithProcessIdentifier:responsible_pid]; + if (app) { + return AppContainsBluetoothUsageDescription(app); + } + return false; +} + +} // namespace base diff --git a/naiveproxy/src/base/profiler/OWNERS b/naiveproxy/src/base/profiler/OWNERS index 3bd54bf0d8..ab903ae188 100644 --- a/naiveproxy/src/base/profiler/OWNERS +++ b/naiveproxy/src/base/profiler/OWNERS @@ -1,2 +1,4 @@ kartarsingh@google.com wittman@chromium.org +thiabaud@google.com +spvw@google.com diff --git a/naiveproxy/src/base/profiler/chrome_unwinder_android_32.cc b/naiveproxy/src/base/profiler/chrome_unwinder_android_32.cc index f5116b602f..b651dccb5f 100644 --- a/naiveproxy/src/base/profiler/chrome_unwinder_android_32.cc +++ b/naiveproxy/src/base/profiler/chrome_unwinder_android_32.cc @@ -16,6 +16,7 @@ #include "base/notreached.h" #include "base/numerics/checked_math.h" #include "base/profiler/chrome_unwind_info_android_32.h" +#include "base/profiler/register_context_registers.h" namespace base { namespace { diff --git a/naiveproxy/src/base/profiler/frame_pointer_unwinder.cc b/naiveproxy/src/base/profiler/frame_pointer_unwinder.cc index 08853da44d..f8e783d502 100644 --- a/naiveproxy/src/base/profiler/frame_pointer_unwinder.cc +++ b/naiveproxy/src/base/profiler/frame_pointer_unwinder.cc @@ -14,6 +14,7 @@ #include "base/notreached.h" #include "base/numerics/clamped_math.h" #include "base/profiler/module_cache.h" +#include "base/profiler/register_context_registers.h" #include "build/build_config.h" #if BUILDFLAG(IS_APPLE) diff --git a/naiveproxy/src/base/profiler/module_cache.cc b/naiveproxy/src/base/profiler/module_cache.cc index 0bb40b8997..46f0f19eb6 100644 --- a/naiveproxy/src/base/profiler/module_cache.cc +++ b/naiveproxy/src/base/profiler/module_cache.cc @@ -4,12 +4,12 @@ #include "base/profiler/module_cache.h" +#include #include #include #include #include "base/check_op.h" -#include "base/ranges/algorithm.h" #include "base/strings/strcat.h" namespace base { @@ -110,22 +110,20 @@ void ModuleCache::UpdateNonNativeModules( // // stable_partition is O(m*log(r)) where m is the number of current modules // and r is the number of modules to remove. insert and erase are both O(r). - auto first_module_defunct_modules = ranges::stable_partition( + auto defunct_modules_subrange = std::ranges::stable_partition( non_native_modules_, [&defunct_modules_set](const std::unique_ptr& module) { return defunct_modules_set.find(module.get()) == defunct_modules_set.end(); }); // All modules requested to be removed should have been found. - DCHECK_EQ( - static_cast(defunct_modules.size()), - std::distance(first_module_defunct_modules, non_native_modules_.end())); + DCHECK_EQ(defunct_modules.size(), defunct_modules_subrange.size()); inactive_non_native_modules_.insert( inactive_non_native_modules_.end(), - std::make_move_iterator(first_module_defunct_modules), - std::make_move_iterator(non_native_modules_.end())); - non_native_modules_.erase(first_module_defunct_modules, - non_native_modules_.end()); + std::make_move_iterator(defunct_modules_subrange.begin()), + std::make_move_iterator(defunct_modules_subrange.end())); + non_native_modules_.erase(defunct_modules_subrange.begin(), + defunct_modules_subrange.end()); // Insert the modules to be added. This operation is O((m + a) + a*log(a)) // where m is the number of current modules and a is the number of modules to diff --git a/naiveproxy/src/base/profiler/native_unwinder_win.cc b/naiveproxy/src/base/profiler/native_unwinder_win.cc index cc2dd68196..0626b813a0 100644 --- a/naiveproxy/src/base/profiler/native_unwinder_win.cc +++ b/naiveproxy/src/base/profiler/native_unwinder_win.cc @@ -4,10 +4,11 @@ #include "base/profiler/native_unwinder_win.h" -#include +#include #include "base/check_op.h" #include "base/notreached.h" +#include "base/profiler/register_context_registers.h" #include "base/profiler/win32_stack_frame_unwinder.h" #include "build/build_config.h" diff --git a/naiveproxy/src/base/profiler/periodic_sampling_scheduler.h b/naiveproxy/src/base/profiler/periodic_sampling_scheduler.h index 24884900d2..6e0dd9a35b 100644 --- a/naiveproxy/src/base/profiler/periodic_sampling_scheduler.h +++ b/naiveproxy/src/base/profiler/periodic_sampling_scheduler.h @@ -30,7 +30,8 @@ class BASE_EXPORT PeriodicSamplingScheduler { virtual ~PeriodicSamplingScheduler(); // Returns the amount of time between now and the next collection. - TimeDelta GetTimeToNextCollection(); + // Virtual to provide dependency injection for test use. + virtual TimeDelta GetTimeToNextCollection(); protected: // Virtual to provide seams for test use. diff --git a/naiveproxy/src/base/profiler/register_context.h b/naiveproxy/src/base/profiler/register_context.h index e034bd00e8..db247d6e0b 100644 --- a/naiveproxy/src/base/profiler/register_context.h +++ b/naiveproxy/src/base/profiler/register_context.h @@ -2,240 +2,53 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifdef UNSAFE_BUFFERS_BUILD -// TODO(crbug.com/40284755): Remove this and spanify to fix the errors. -#pragma allow_unsafe_buffers -#endif - // This file provides the RegisterContext cross-platform typedef that represents -// the native register context for the platform, plus functions that provide -// access to key registers in the context. +// the native register context for the platform. #ifndef BASE_PROFILER_REGISTER_CONTEXT_H_ #define BASE_PROFILER_REGISTER_CONTEXT_H_ -#include - #include "build/build_config.h" #if BUILDFLAG(IS_WIN) -#include -#elif BUILDFLAG(IS_APPLE) -#include +typedef struct _CONTEXT CONTEXT; #elif BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) #include +#elif BUILDFLAG(IS_APPLE) && \ + (defined(ARCH_CPU_X86_64) || defined(ARCH_CPU_ARM64)) +#include +#else +#include #endif namespace base { -// Helper function to account for the fact that platform-specific register state -// types may be of the same size as uintptr_t, but not of the same type or -// signedness -- e.g. unsigned int vs. unsigned long on 32-bit Windows, unsigned -// long vs. unsigned long long on Mac, long long vs. unsigned long long on -// Linux. -template -uintptr_t& AsUintPtr(T* value) { - static_assert(sizeof(T) == sizeof(uintptr_t), - "register state type must be of equivalent size to uintptr_t"); - return *reinterpret_cast(value); -} - #if BUILDFLAG(IS_WIN) using RegisterContext = ::CONTEXT; -inline uintptr_t& RegisterContextStackPointer(::CONTEXT* context) { -#if defined(ARCH_CPU_X86_64) - return context->Rsp; -#elif defined(ARCH_CPU_ARM64) - return context->Sp; -#else - return AsUintPtr(&context->Esp); -#endif -} - -inline uintptr_t& RegisterContextFramePointer(::CONTEXT* context) { -#if defined(ARCH_CPU_X86_64) - return context->Rbp; -#elif defined(ARCH_CPU_ARM64) - return context->Fp; -#else - return AsUintPtr(&context->Ebp); -#endif -} - -inline uintptr_t& RegisterContextInstructionPointer(::CONTEXT* context) { -#if defined(ARCH_CPU_X86_64) - return context->Rip; -#elif defined(ARCH_CPU_ARM64) - return context->Pc; -#else - return AsUintPtr(&context->Eip); -#endif -} - -#elif BUILDFLAG(IS_MAC) || BUILDFLAG(IS_IOS) - -#if defined(ARCH_CPU_X86_64) -using RegisterContext = x86_thread_state64_t; - -inline uintptr_t& RegisterContextStackPointer(x86_thread_state64_t* context) { - return AsUintPtr(&context->__rsp); -} - -inline uintptr_t& RegisterContextFramePointer(x86_thread_state64_t* context) { - return AsUintPtr(&context->__rbp); -} - -inline uintptr_t& RegisterContextInstructionPointer( - x86_thread_state64_t* context) { - return AsUintPtr(&context->__rip); -} - -#elif defined(ARCH_CPU_ARM64) // defined(ARCH_CPU_X86_64) -using RegisterContext = arm_thread_state64_t; - -// TODO(thakis): Have getter/setter functions instead of returning a ref to -// prepare for arm64e. See __DARWIN_OPAQUE_ARM_THREAD_STATE6 in -// mach/arm/_structs.h -inline uintptr_t& RegisterContextStackPointer(arm_thread_state64_t* context) { - return AsUintPtr(&context->__sp); -} - -inline uintptr_t& RegisterContextFramePointer(arm_thread_state64_t* context) { - return AsUintPtr(&context->__fp); -} - -inline uintptr_t& RegisterContextInstructionPointer( - arm_thread_state64_t* context) { - return AsUintPtr(&context->__pc); -} - -#else // defined(ARCH_CPU_ARM64) - -// Placeholders for other cpus. -struct RegisterContext { - uintptr_t stack_pointer; - uintptr_t frame_pointer; - uintptr_t instruction_pointer; -}; - -inline uintptr_t& RegisterContextStackPointer(RegisterContext* context) { - return context->stack_pointer; -} - -inline uintptr_t& RegisterContextFramePointer(RegisterContext* context) { - return context->frame_pointer; -} - -inline uintptr_t& RegisterContextInstructionPointer(RegisterContext* context) { - return context->instruction_pointer; -} - -#endif - #elif BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) using RegisterContext = mcontext_t; -#if defined(ARCH_CPU_ARM_FAMILY) && defined(ARCH_CPU_32_BITS) +#elif BUILDFLAG(IS_APPLE) && defined(ARCH_CPU_X86_64) -inline uintptr_t& RegisterContextStackPointer(mcontext_t* context) { - return AsUintPtr(&context->arm_sp); -} +using RegisterContext = x86_thread_state64_t; -inline uintptr_t& RegisterContextFramePointer(mcontext_t* context) { - return AsUintPtr(&context->arm_fp); -} +#elif BUILDFLAG(IS_APPLE) && defined(ARCH_CPU_ARM64) -inline uintptr_t& RegisterContextInstructionPointer(mcontext_t* context) { - return AsUintPtr(&context->arm_pc); -} +using RegisterContext = arm_thread_state64_t; -#elif defined(ARCH_CPU_ARM_FAMILY) && defined(ARCH_CPU_64_BITS) +#else -inline uintptr_t& RegisterContextStackPointer(mcontext_t* context) { - return AsUintPtr(&context->sp); -} - -inline uintptr_t& RegisterContextFramePointer(mcontext_t* context) { - // r29 is the FP register on 64-bit ARM per the Procedure Call Standard, - // section 5.1.1. - return AsUintPtr(&context->regs[29]); -} - -inline uintptr_t& RegisterContextInstructionPointer(mcontext_t* context) { - return AsUintPtr(&context->pc); -} - -#elif defined(ARCH_CPU_X86_FAMILY) && defined(ARCH_CPU_32_BITS) - -inline uintptr_t& RegisterContextStackPointer(mcontext_t* context) { - return AsUintPtr(&context->gregs[REG_ESP]); -} - -inline uintptr_t& RegisterContextFramePointer(mcontext_t* context) { - return AsUintPtr(&context->gregs[REG_EBP]); -} - -inline uintptr_t& RegisterContextInstructionPointer(mcontext_t* context) { - return AsUintPtr(&context->gregs[REG_EIP]); -} - -#elif defined(ARCH_CPU_X86_FAMILY) && defined(ARCH_CPU_64_BITS) - -inline uintptr_t& RegisterContextStackPointer(mcontext_t* context) { - return AsUintPtr(&context->gregs[REG_RSP]); -} - -inline uintptr_t& RegisterContextFramePointer(mcontext_t* context) { - return AsUintPtr(&context->gregs[REG_RBP]); -} - -inline uintptr_t& RegisterContextInstructionPointer(mcontext_t* context) { - return AsUintPtr(&context->gregs[REG_RIP]); -} - -#else // defined(ARCH_CPU_ARM_FAMILY) && defined(ARCH_CPU_32_BITS) - -// Placeholders for other POSIX platforms that just return the first -// three register slots in the context. -inline uintptr_t& RegisterContextStackPointer(mcontext_t* context) { - return *reinterpret_cast(context); -} - -inline uintptr_t& RegisterContextFramePointer(mcontext_t* context) { - return *(reinterpret_cast(context) + 1); -} - -inline uintptr_t& RegisterContextInstructionPointer(mcontext_t* context) { - return *(reinterpret_cast(context) + 2); -} - -#endif // defined(ARCH_CPU_ARM_FAMILY) && defined(ARCH_CPU_32_BITS) - -#else // BUILDFLAG(IS_WIN) - -// Placeholders for other platforms. +// Placeholders for other cases. struct RegisterContext { uintptr_t stack_pointer; uintptr_t frame_pointer; uintptr_t instruction_pointer; }; -inline uintptr_t& RegisterContextStackPointer(RegisterContext* context) { - return context->stack_pointer; -} - -inline uintptr_t& RegisterContextFramePointer(RegisterContext* context) { - return context->frame_pointer; -} - -inline uintptr_t& RegisterContextInstructionPointer(RegisterContext* context) { - return context->instruction_pointer; -} - -#endif // BUILDFLAG(IS_WIN) +#endif } // namespace base diff --git a/naiveproxy/src/base/profiler/register_context_registers.h b/naiveproxy/src/base/profiler/register_context_registers.h new file mode 100644 index 0000000000..2f10163b03 --- /dev/null +++ b/naiveproxy/src/base/profiler/register_context_registers.h @@ -0,0 +1,176 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/40284755): Remove this and spanify to fix the errors. +#pragma allow_unsafe_buffers +#endif + +// This file provides functions that provide access to key registers in the +// native register context. + +#ifndef BASE_PROFILER_REGISTER_CONTEXT_REGISTERS_H_ +#define BASE_PROFILER_REGISTER_CONTEXT_REGISTERS_H_ + +#include + +#include "build/build_config.h" + +#if BUILDFLAG(IS_WIN) +#include +#elif BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) +#include +#elif BUILDFLAG(IS_APPLE) +#include +#else +#include "base/profiler/register_context.h" +#endif + +namespace base { + +// Helper function to account for the fact that platform-specific register state +// types may be of the same size as uintptr_t, but not of the same type or +// signedness -- e.g. unsigned int vs. unsigned long on 32-bit Windows, unsigned +// long vs. unsigned long long on Mac, long long vs. unsigned long long on +// Linux. +template +uintptr_t& AsUintPtr(T* value) { + static_assert(sizeof(T) == sizeof(uintptr_t), + "register state type must be of equivalent size to uintptr_t"); + return *reinterpret_cast(value); +} + +#if BUILDFLAG(IS_WIN) + +inline uintptr_t& RegisterContextStackPointer(::CONTEXT* context) { +#if defined(ARCH_CPU_X86_64) + return context->Rsp; +#elif defined(ARCH_CPU_ARM64) + return context->Sp; +#else + return AsUintPtr(&context->Esp); +#endif +} + +inline uintptr_t& RegisterContextFramePointer(::CONTEXT* context) { +#if defined(ARCH_CPU_X86_64) + return context->Rbp; +#elif defined(ARCH_CPU_ARM64) + return context->Fp; +#else + return AsUintPtr(&context->Ebp); +#endif +} + +inline uintptr_t& RegisterContextInstructionPointer(::CONTEXT* context) { +#if defined(ARCH_CPU_X86_64) + return context->Rip; +#elif defined(ARCH_CPU_ARM64) + return context->Pc; +#else + return AsUintPtr(&context->Eip); +#endif +} + +#elif BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) + +inline uintptr_t& RegisterContextStackPointer(mcontext_t* context) { +#if defined(ARCH_CPU_ARM_FAMILY) && defined(ARCH_CPU_32_BITS) + return AsUintPtr(&context->arm_sp); +#elif defined(ARCH_CPU_ARM_FAMILY) && defined(ARCH_CPU_64_BITS) + return AsUintPtr(&context->sp); +#elif defined(ARCH_CPU_X86_FAMILY) && defined(ARCH_CPU_32_BITS) + return AsUintPtr(&context->gregs[REG_ESP]); +#elif defined(ARCH_CPU_X86_FAMILY) && defined(ARCH_CPU_64_BITS) + return AsUintPtr(&context->gregs[REG_RSP]); +#else + // The implementations here and below are placeholders for other POSIX + // platforms that just return the first three register slots in the context. + return *reinterpret_cast(context); +#endif +} + +inline uintptr_t& RegisterContextFramePointer(mcontext_t* context) { +#if defined(ARCH_CPU_ARM_FAMILY) && defined(ARCH_CPU_32_BITS) + return AsUintPtr(&context->arm_fp); +#elif defined(ARCH_CPU_ARM_FAMILY) && defined(ARCH_CPU_64_BITS) + // r29 is the FP register on 64-bit ARM per the Procedure Call Standard, + // section 5.1.1. + return AsUintPtr(&context->regs[29]); +#elif defined(ARCH_CPU_X86_FAMILY) && defined(ARCH_CPU_32_BITS) + return AsUintPtr(&context->gregs[REG_EBP]); +#elif defined(ARCH_CPU_X86_FAMILY) && defined(ARCH_CPU_64_BITS) + return AsUintPtr(&context->gregs[REG_RBP]); +#else + return *(reinterpret_cast(context) + 1); +#endif +} + +inline uintptr_t& RegisterContextInstructionPointer(mcontext_t* context) { +#if defined(ARCH_CPU_ARM_FAMILY) && defined(ARCH_CPU_32_BITS) + return AsUintPtr(&context->arm_pc); +#elif defined(ARCH_CPU_ARM_FAMILY) && defined(ARCH_CPU_64_BITS) + return AsUintPtr(&context->pc); +#elif defined(ARCH_CPU_X86_FAMILY) && defined(ARCH_CPU_32_BITS) + return AsUintPtr(&context->gregs[REG_EIP]); +#elif defined(ARCH_CPU_X86_FAMILY) && defined(ARCH_CPU_64_BITS) + return AsUintPtr(&context->gregs[REG_RIP]); +#else + return *(reinterpret_cast(context) + 2); +#endif +} + +#elif BUILDFLAG(IS_APPLE) && defined(ARCH_CPU_X86_64) + +inline uintptr_t& RegisterContextStackPointer(x86_thread_state64_t* context) { + return AsUintPtr(&context->__rsp); +} + +inline uintptr_t& RegisterContextFramePointer(x86_thread_state64_t* context) { + return AsUintPtr(&context->__rbp); +} + +inline uintptr_t& RegisterContextInstructionPointer( + x86_thread_state64_t* context) { + return AsUintPtr(&context->__rip); +} + +#elif BUILDFLAG(IS_APPLE) && defined(ARCH_CPU_ARM64) + +// TODO(thakis): Have getter/setter functions instead of returning a ref to +// prepare for arm64e. See __DARWIN_OPAQUE_ARM_THREAD_STATE6 in +// mach/arm/_structs.h +inline uintptr_t& RegisterContextStackPointer(arm_thread_state64_t* context) { + return AsUintPtr(&context->__sp); +} + +inline uintptr_t& RegisterContextFramePointer(arm_thread_state64_t* context) { + return AsUintPtr(&context->__fp); +} + +inline uintptr_t& RegisterContextInstructionPointer( + arm_thread_state64_t* context) { + return AsUintPtr(&context->__pc); +} + +#else + +// Placeholders for other cases. +inline uintptr_t& RegisterContextStackPointer(RegisterContext* context) { + return context->stack_pointer; +} + +inline uintptr_t& RegisterContextFramePointer(RegisterContext* context) { + return context->frame_pointer; +} + +inline uintptr_t& RegisterContextInstructionPointer(RegisterContext* context) { + return context->instruction_pointer; +} + +#endif + +} // namespace base + +#endif // BASE_PROFILER_REGISTER_CONTEXT_REGISTERS_H_ diff --git a/naiveproxy/src/base/profiler/sample_metadata.cc b/naiveproxy/src/base/profiler/sample_metadata.cc index 6bc81e9f10..581d44482e 100644 --- a/naiveproxy/src/base/profiler/sample_metadata.cc +++ b/naiveproxy/src/base/profiler/sample_metadata.cc @@ -105,7 +105,7 @@ void ApplyMetadataToPastSamples(TimeTicks period_start, } void AddProfileMetadataImpl(uint64_t name_hash, - int64_t key, + std::optional key, int64_t value, std::optional thread_id) { StackSamplingProfiler::AddProfileMetadata(name_hash, key, value, thread_id); @@ -119,6 +119,13 @@ void AddProfileMetadata(std::string_view name, GetPlatformThreadIdForScope(scope)); } +void AddProfileMetadataForThread(std::string_view name, + int64_t value, + PlatformThreadId other_thread) { + return AddProfileMetadataImpl(HashMetricName(name), std::nullopt, value, + other_thread); +} + MetadataRecorder* GetSampleMetadataRecorder() { static NoDestructor instance; return instance.get(); diff --git a/naiveproxy/src/base/profiler/sample_metadata.h b/naiveproxy/src/base/profiler/sample_metadata.h index a4b233d70f..4af45683d0 100644 --- a/naiveproxy/src/base/profiler/sample_metadata.h +++ b/naiveproxy/src/base/profiler/sample_metadata.h @@ -174,6 +174,15 @@ BASE_EXPORT void AddProfileMetadata(std::string_view name, int64_t value, SampleMetadataScope scope); +// Adds metadata as metadata global to the sampling profile for another thread +// other than calling thread. Has the effect of applying the metadata to all +// samples in the profile, even ones collected earlier in time. This is probably +// not what you want for most use cases; prefer using SampleMetadata / +// ScopedSampleMetadata / ApplyMetadataToPastSamples instead. +BASE_EXPORT void AddProfileMetadataForThread(std::string_view name, + int64_t value, + PlatformThreadId other_thread); + // Returns the process-global metadata recorder instance used for tracking // sampling profiler metadata. // diff --git a/naiveproxy/src/base/profiler/stack_copier_signal.cc b/naiveproxy/src/base/profiler/stack_copier_signal.cc index 132b74b8ce..46009f7d3c 100644 --- a/naiveproxy/src/base/profiler/stack_copier_signal.cc +++ b/naiveproxy/src/base/profiler/stack_copier_signal.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "base/profiler/stack_copier_signal.h" #include @@ -20,6 +25,7 @@ #include "base/memory/raw_ptr_exclusion.h" #include "base/notreached.h" #include "base/profiler/register_context.h" +#include "base/profiler/register_context_registers.h" #include "base/profiler/stack_buffer.h" #include "base/profiler/suspendable_thread_delegate.h" #include "base/time/time_override.h" @@ -97,7 +103,8 @@ class AsyncSafeWaitableEvent { // destructor. class ScopedEventSignaller { public: - ScopedEventSignaller(AsyncSafeWaitableEvent* event) : event_(event) {} + explicit ScopedEventSignaller(AsyncSafeWaitableEvent* event) + : event_(event) {} ~ScopedEventSignaller() { event_->Signal(); } private: @@ -182,7 +189,7 @@ void CopyStackSignalHandler(int n, siginfo_t* siginfo, void* sigcontext) { // Sets the global handler params for the signal handler function. class ScopedSetSignalHandlerParams { public: - ScopedSetSignalHandlerParams(HandlerParams* params) { + explicit ScopedSetSignalHandlerParams(HandlerParams* params) { g_handler_params.store(params, std::memory_order_release); } diff --git a/naiveproxy/src/base/profiler/stack_copier_suspend.cc b/naiveproxy/src/base/profiler/stack_copier_suspend.cc index 5d85a610c4..a96fccc06a 100644 --- a/naiveproxy/src/base/profiler/stack_copier_suspend.cc +++ b/naiveproxy/src/base/profiler/stack_copier_suspend.cc @@ -4,6 +4,7 @@ #include "base/profiler/stack_copier_suspend.h" +#include "base/profiler/register_context_registers.h" #include "base/profiler/stack_buffer.h" #include "base/profiler/suspendable_thread_delegate.h" diff --git a/naiveproxy/src/base/profiler/stack_sampler.cc b/naiveproxy/src/base/profiler/stack_sampler.cc index e86c930ac0..122fadf08b 100644 --- a/naiveproxy/src/base/profiler/stack_sampler.cc +++ b/naiveproxy/src/base/profiler/stack_sampler.cc @@ -4,6 +4,7 @@ #include "base/profiler/stack_sampler.h" +#include #include #include @@ -15,12 +16,12 @@ #include "base/numerics/safe_conversions.h" #include "base/profiler/metadata_recorder.h" #include "base/profiler/profile_builder.h" +#include "base/profiler/register_context_registers.h" #include "base/profiler/sample_metadata.h" #include "base/profiler/stack_buffer.h" #include "base/profiler/stack_copier.h" #include "base/profiler/suspendable_thread_delegate.h" #include "base/profiler/unwinder.h" -#include "base/ranges/algorithm.h" #include "base/task/thread_pool.h" #if PA_BUILDFLAG(USE_PARTITION_ALLOC) @@ -350,8 +351,8 @@ std::vector StackSampler::WalkStack( do { // Choose an authoritative unwinder for the current module. Use the first // unwinder that thinks it can unwind from the current frame. - auto unwinder = - ranges::find_if(unwinders, [&stack](const UnwinderCapture& unwinder) { + auto unwinder = std::ranges::find_if( + unwinders, [&stack](const UnwinderCapture& unwinder) { return GetUnwinder(unwinder)->CanUnwindFrom(stack.back()); }); if (unwinder == unwinders.end()) { diff --git a/naiveproxy/src/base/profiler/stack_sampling_profiler.cc b/naiveproxy/src/base/profiler/stack_sampling_profiler.cc index 86df83eac8..46e74e618b 100644 --- a/naiveproxy/src/base/profiler/stack_sampling_profiler.cc +++ b/naiveproxy/src/base/profiler/stack_sampling_profiler.cc @@ -33,6 +33,8 @@ #include "build/build_config.h" #if BUILDFLAG(IS_WIN) +#include + #include "base/win/static_constants.h" #endif @@ -980,7 +982,7 @@ void StackSamplingProfiler::ApplyMetadataToPastSamples( // static void StackSamplingProfiler::AddProfileMetadata( uint64_t name_hash, - int64_t key, + std::optional key, int64_t value, std::optional thread_id) { SamplingThread::GetInstance()->AddProfileMetadata(name_hash, key, value, diff --git a/naiveproxy/src/base/profiler/stack_sampling_profiler.h b/naiveproxy/src/base/profiler/stack_sampling_profiler.h index a90d715a90..19f78adf35 100644 --- a/naiveproxy/src/base/profiler/stack_sampling_profiler.h +++ b/naiveproxy/src/base/profiler/stack_sampling_profiler.h @@ -182,7 +182,7 @@ class BASE_EXPORT StackSamplingProfiler { int64_t value, std::optional thread_id); friend void AddProfileMetadataImpl(uint64_t name_hash, - int64_t key, + std::optional key, int64_t value, std::optional thread_id); @@ -198,7 +198,7 @@ class BASE_EXPORT StackSamplingProfiler { // Adds metadata as metadata global to the sampling profile. static void AddProfileMetadata(uint64_t name_hash, - int64_t key, + std::optional key, int64_t value, std::optional thread_id); diff --git a/naiveproxy/src/base/profiler/stack_sampling_profiler_test_util.cc b/naiveproxy/src/base/profiler/stack_sampling_profiler_test_util.cc index 159d5b783b..b87505b8c6 100644 --- a/naiveproxy/src/base/profiler/stack_sampling_profiler_test_util.cc +++ b/naiveproxy/src/base/profiler/stack_sampling_profiler_test_util.cc @@ -17,6 +17,7 @@ #include "base/location.h" #include "base/memory/raw_ptr.h" #include "base/path_service.h" +#include "base/profiler/frame_pointer_unwinder.h" #include "base/profiler/native_unwinder_android_map_delegate.h" #include "base/profiler/native_unwinder_android_memory_regions_map.h" #include "base/profiler/profiler_buildflags.h" @@ -28,13 +29,16 @@ #include "build/build_config.h" #include "testing/gtest/include/gtest/gtest.h" -#if BUILDFLAG(IS_ANDROID) && BUILDFLAG(ENABLE_ARM_CFI_TABLE) +#if BUILDFLAG(IS_ANDROID) && \ + (BUILDFLAG(ENABLE_ARM_CFI_TABLE) || defined(ARCH_CPU_ARM64)) +#include "base/no_destructor.h" +#include "base/profiler/native_unwinder_android.h" +#if BUILDFLAG(ENABLE_ARM_CFI_TABLE) #include "base/android/apk_assets.h" #include "base/android/library_loader/anchor_functions.h" #include "base/files/memory_mapped_file.h" -#include "base/no_destructor.h" #include "base/profiler/chrome_unwinder_android_32.h" -#include "base/profiler/native_unwinder_android.h" +#endif #endif #if !BUILDFLAG(IS_ANDROID) @@ -108,7 +112,8 @@ void OtherLibraryCallback(void* arg) { [[maybe_unused]] volatile int i = 0; } -#if BUILDFLAG(IS_ANDROID) && BUILDFLAG(ENABLE_ARM_CFI_TABLE) +#if BUILDFLAG(IS_ANDROID) && \ + (BUILDFLAG(ENABLE_ARM_CFI_TABLE) || defined(ARCH_CPU_ARM64)) class NativeUnwinderAndroidMapDelegateForTesting : public NativeUnwinderAndroidMapDelegate { public: @@ -141,6 +146,7 @@ std::unique_ptr CreateNativeUnwinderAndroidForTesting( exclude_module_with_base_address, GetMapDelegateForTesting()); } +#if BUILDFLAG(ENABLE_ARM_CFI_TABLE) std::unique_ptr CreateChromeUnwinderAndroid32ForTesting( uintptr_t chrome_module_base_address) { static constexpr char kCfiFileName[] = "assets/unwind_cfi_32_v2"; @@ -177,7 +183,9 @@ std::unique_ptr CreateChromeUnwinderAndroid32ForTesting( chrome_module_base_address, /* text_section_start_address= */ base::android::kStartOfText); } -#endif // #if BUILDFLAG(IS_ANDROID) && BUILDFLAG(ENABLE_ARM_CFI_TABLE) +#endif // BUILDFLAG(ENABLE_ARM_CFI_TABLE) +#endif // BUILDFLAG(IS_ANDROID) && (BUILDFLAG(ENABLE_ARM_CFI_TABLE) || + // defined(ARCH_CPU_ARM64)) } // namespace @@ -471,6 +479,22 @@ StackSamplingProfiler::UnwindersFactory CreateCoreUnwindersFactoryForTesting( return unwinders; }, std::move(unwinders)); +#elif BUILDFLAG(IS_ANDROID) && defined(ARCH_CPU_ARM64) + std::vector> unwinders; + unwinders.push_back(CreateNativeUnwinderAndroidForTesting( + reinterpret_cast(&__executable_start))); + unwinders.push_back(std::make_unique( + base::BindRepeating([](const base::Frame& current_frame) { + return current_frame.module && + current_frame.module->GetBaseAddress() == + reinterpret_cast(&__executable_start); + }), + /*is_system_unwinder=*/false)); + return BindOnce( + [](std::vector> unwinders) { + return unwinders; + }, + std::move(unwinders)); #elif BUILDFLAG(IS_ANDROID) return StackSamplingProfiler::UnwindersFactory(); #else diff --git a/naiveproxy/src/base/profiler/stack_unwind_data.cc b/naiveproxy/src/base/profiler/stack_unwind_data.cc index a05f982404..f84ea48993 100644 --- a/naiveproxy/src/base/profiler/stack_unwind_data.cc +++ b/naiveproxy/src/base/profiler/stack_unwind_data.cc @@ -4,6 +4,7 @@ #include "base/profiler/stack_unwind_data.h" +#include #include #include @@ -20,7 +21,6 @@ #include "base/profiler/stack_copier.h" #include "base/profiler/suspendable_thread_delegate.h" #include "base/profiler/unwinder.h" -#include "base/ranges/algorithm.h" namespace base { diff --git a/naiveproxy/src/base/profiler/suspendable_thread_delegate_mac.cc b/naiveproxy/src/base/profiler/suspendable_thread_delegate_mac.cc index 473d33ea05..d4e3791737 100644 --- a/naiveproxy/src/base/profiler/suspendable_thread_delegate_mac.cc +++ b/naiveproxy/src/base/profiler/suspendable_thread_delegate_mac.cc @@ -18,6 +18,7 @@ #include "base/apple/mach_logging.h" #include "base/check.h" #include "base/profiler/profile_builder.h" +#include "base/profiler/register_context_registers.h" #include "build/build_config.h" // IMPORTANT NOTE: Some functions within this implementation are invoked while diff --git a/naiveproxy/src/base/profiler/thread_group_profiler.cc b/naiveproxy/src/base/profiler/thread_group_profiler.cc new file mode 100644 index 0000000000..9d2978fcdb --- /dev/null +++ b/naiveproxy/src/base/profiler/thread_group_profiler.cc @@ -0,0 +1,416 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/profiler/thread_group_profiler.h" + +#include + +#include "base/check.h" +#include "base/functional/bind.h" +#include "base/memory/ptr_util.h" +#include "base/numerics/safe_conversions.h" +#include "base/profiler/periodic_sampling_scheduler.h" +#include "base/profiler/sample_metadata.h" +#include "base/profiler/sampling_profiler_thread_token.h" +#include "base/profiler/stack_sampling_profiler.h" +#include "base/profiler/thread_group_profiler_client.h" +#include "base/synchronization/waitable_event.h" +#include "base/task/bind_post_task.h" +#include "base/task/sequenced_task_runner.h" +// Required solely to avoid complaints on incomplete type for +// Unretained(worker_thread) invocations. This code otherwise treats +// WorkerThread pointers as opaque. +#include "base/task/thread_pool/worker_thread.h" +#include "base/time/time.h" + +// Periodic sampling collection is done in CollectProfilesTask(). The function +// is scheduled based on PeriodicSamplingScheduler timing and will start +// profiling all active worker threads. +// +// During a sampling session, new worker threads and worker threads that become +// active (being signalled for work while idle) will call OnWorkerThreadActive +// so profiling can be started for them. If at any point the worker thread is +// shutdown (this should only happen in test as we only sample active threads +// and the thread reclaim time after idle is longer than sampling duration), the +// profiler for that thread is stopped and worker thread blocked until profiler +// is destroyed. This should guarantee a uniform sampling for all worker thread +// executions as all the work happening inside a sampling session is collected +// regardless of which thread the work is scheduled. +// +// Thread group shutdown happens after task runner shutdown so no more sampling +// can be scheduled. All existing profilers will be cleared on the main thread +// during shutdown and a profiler shutdown event will signal. Note that after +// ThreadGroup shutdown is started worker threads may still execute +// CONTINUE_ON_SHUTDOWN tasks and these tasks will never be sampled. This is +// acceptable as these profiles are unlikely to be uploaded anyway. + +// ThreadGroupProfiler will only be destructed in test through +// ThreadGroupImpl::JoinForTesting. This also happens after task runner shutdown +// so same logic applies as normal shutdown. In prod the thread pool (which +// holds thread group) is always leaked during shutdown. + +namespace base { +namespace { +// Pointer to the embedder-specific client implementation. +// |g_thread_group_profiler_client| is intentionally leaked on shutdown. +ThreadGroupProfilerClient* g_thread_group_profiler_client = nullptr; + +// Run continuous profiling 2% of the time. +constexpr double kFractionOfExecutionTimeToSample = 0.02; + +constexpr char kProfilerMetadataThreadGroupType[] = "ThreadGroupType"; + +// Keep sampling new worker thread until last second of sampling duration. +// This is intended as an performance optimization, i.e. it's not worth it to do +// the whole StackSamplingProfiler set up just to get less than 10 samples. And +// since this treats all threads equally it does not affect the unbiased nature +// of sampling. +const TimeDelta kMinRemainingTimeForNewThreadSampling = Seconds(1); +} // namespace + +// static +void ThreadGroupProfiler::SetClient( + std::unique_ptr client) { + // Generally, the client should only be set once, at process startup. However, + // some test infrastructure causes initialization to happen more than once. + delete g_thread_group_profiler_client; + g_thread_group_profiler_client = client.release(); +} + +// static +bool ThreadGroupProfiler::IsProfilingEnabled() { + // TODO(crbug.com/40226611): Remove GetClient() check once client is set on + // all embedders. This is to temporarily support testing with mock client when + // real clients aren't set on embedders. + return GetClient() && GetClient()->IsProfilerEnabledForCurrentProcess(); +} + +ThreadGroupProfiler::ThreadGroupProfiler( + scoped_refptr task_runner, + int64_t thread_group_type, + std::unique_ptr periodic_sampling_scheduler, + ProfilerFactory profiler_factory) + : thread_group_type_(thread_group_type), + periodic_sampling_scheduler_(std::move(periodic_sampling_scheduler)), + task_runner_(std::move(task_runner)), + stack_sampling_profiler_factory_(std::move(profiler_factory)) { + DETACH_FROM_SEQUENCE(task_runner_sequence_checker_); + if (!periodic_sampling_scheduler_) { + periodic_sampling_scheduler_ = std::make_unique( + GetClient()->GetSamplingParams().sampling_interval * + GetClient()->GetSamplingParams().samples_per_profile, + kFractionOfExecutionTimeToSample, TimeTicks::Now()); + } + task_runner_->PostTask( + FROM_HERE, BindOnce(&ThreadGroupProfiler::StartTask, Unretained(this))); +} + +ThreadGroupProfiler::~ThreadGroupProfiler() { + // Shutdown has been run before destruction. + CHECK(!active_collection_); +} + +void ThreadGroupProfiler::Shutdown() { + // Must be destroyed from the same sequence as constructor. + DCHECK_CALLED_ON_VALID_SEQUENCE(construction_sequence_checker_); + // CHECK that the task runner has actually been shutdown. + CHECK(!task_runner_->PostTask(FROM_HERE, DoNothing())); + + TS_UNCHECKED_READ(active_collection_).reset(); + thread_group_profiler_shutdown_.Signal(); +} + +void ThreadGroupProfiler::OnWorkerThreadStarted( + internal::WorkerThread* worker_thread) { + task_runner_->PostTask( + FROM_HERE, BindOnce(&ThreadGroupProfiler::OnWorkerThreadStartedTask, + Unretained(this), Unretained(worker_thread), + GetSamplingProfilerCurrentThreadToken())); +} + +void ThreadGroupProfiler::OnWorkerThreadActive( + internal::WorkerThread* worker_thread) { + task_runner_->PostTask( + FROM_HERE, BindOnce(&ThreadGroupProfiler::OnWorkerThreadActiveTask, + Unretained(this), Unretained(worker_thread))); +} + +void ThreadGroupProfiler::OnWorkerThreadIdle( + internal::WorkerThread* worker_thread) { + task_runner_->PostTask(FROM_HERE, + BindOnce(&ThreadGroupProfiler::OnWorkerThreadIdleTask, + Unretained(this), Unretained(worker_thread))); +} + +void ThreadGroupProfiler::OnWorkerThreadExiting( + internal::WorkerThread* worker_thread) { + WaitableEvent profiling_has_stopped; + task_runner_->PostTask( + FROM_HERE, BindOnce(&ThreadGroupProfiler::OnWorkerThreadExitingTask, + Unretained(this), Unretained(worker_thread), + Unretained(&profiling_has_stopped))); + base::WaitableEvent* event_array[] = {&profiling_has_stopped, + &thread_group_profiler_shutdown_}; + // During shutdown profiling_has_stopped may not get a chance to signal as + // task runner is stopped, profiler_shutdown event will signal instead + // indicating that clean up has finished and worker thread may safely exit. + WaitableEvent::WaitMany(event_array, std::size(event_array)); +} + +// Production implementation that wraps an actual StackSamplingProfiler. +class ThreadGroupProfiler::ProfilerImpl : public ThreadGroupProfiler::Profiler { + public: + ProfilerImpl(SamplingProfilerThreadToken thread_token, + const StackSamplingProfiler::SamplingParams& params, + std::unique_ptr profile_builder, + StackSamplingProfiler::UnwindersFactory unwinder_factory) + : sampling_profiler_{thread_token, params, std::move(profile_builder), + std::move(unwinder_factory)} {} + ~ProfilerImpl() override = default; + + // Profiler: + void Start() override { sampling_profiler_.Start(); } + + private: + StackSamplingProfiler sampling_profiler_; +}; + +ThreadGroupProfiler::ActiveCollection::ActiveCollection( + const flat_map& + worker_thread_context_set, + int64_t thread_group_type, + const TimeDelta& sampling_duration, + SequencedTaskRunner* task_runner, + ProfilerFactory factory, + OnceClosure collection_complete_callback) + : thread_group_type_(thread_group_type), + task_runner_(task_runner), + stack_sampling_profiler_factory_(factory), + collection_complete_callback_(std::move(collection_complete_callback)), + sampling_duration_(sampling_duration), + collection_end_time_(TimeTicks::Now() + sampling_duration), + empty_collection_closure_{ + BindOnce(&ActiveCollection::OnEmptyCollectionCompleted, + Unretained(this))} { + decltype(profilers_)::container_type new_profilers; + for (auto& [worker_thread, context] : worker_thread_context_set) { + // Only create profilers for active threads. + if (!context.is_idle) { + std::unique_ptr profiler = CreateSamplingProfilerForThread( + worker_thread, context.token, GetClient()->GetSamplingParams()); + profiler->Start(); + AddProfileMetadataForThread(kProfilerMetadataThreadGroupType, + thread_group_type_, context.token.id); + new_profilers.emplace_back(worker_thread, std::move(profiler)); + } + } + // More efficient to construct flat_map from containers then adding each + // profiler in a loop. + profilers_ = flat_map(std::move(new_profilers)); + if (profilers_.empty()) { + // Queue a delayed empty collection callback to run after the sampling + // duration if there are no active threads to sample. + task_runner_->PostDelayedTask( + FROM_HERE, empty_collection_closure_.callback(), sampling_duration_); + } else { + empty_collection_closure_.Cancel(); + } +} + +void ThreadGroupProfiler::ActiveCollection::MaybeAddWorkerThread( + internal::WorkerThread* worker_thread, + const SamplingProfilerThreadToken& token) { + // Skip if the remaining time of current sampling session is less than the + // threshold. + if ((collection_end_time_ - TimeTicks::Now()) < + kMinRemainingTimeForNewThreadSampling) { + return; + } + // Skip if there's already a profiler for this thread. A worker thread can + // flip between idle and active anytime during the collection but profiler + // should only be created for it the first time it becomes active. + if (profilers_.find(worker_thread) != profilers_.end()) { + return; + } + StackSamplingProfiler::SamplingParams sampling_params = + GetClient()->GetSamplingParams(); + // Calculate remaining samples until end of collection period. + sampling_params.samples_per_profile = + ClampFloor((collection_end_time_ - TimeTicks::Now()) / + sampling_params.sampling_interval); + std::unique_ptr profiler = + CreateSamplingProfilerForThread(worker_thread, token, sampling_params); + profiler->Start(); + AddProfileMetadataForThread(kProfilerMetadataThreadGroupType, + thread_group_type_, token.id); + profilers_.emplace(worker_thread, std::move(profiler)); + // Cancel empty callback since there is a profiler running now. + empty_collection_closure_.Cancel(); +} + +void ThreadGroupProfiler::ActiveCollection::RemoveWorkerThread( + internal::WorkerThread* worker_thread) { + // If there's a profiler associated, remove it. Will block until profiler + // destructor finishes but it should be a rare case (during shutdown or + // ThreadGroup::JoinForTesting) as we only sample active threads; they should + // not get reclaimed during sampling session. + const bool was_present = profilers_.erase(worker_thread) == 1; + if (!was_present || !profilers_.empty()) { + return; + } + // Queue a delayed empty collection callback to run after the sampling + // duration if there are no active threads to sample. + empty_collection_closure_.Reset(BindOnce( + &ActiveCollection::OnEmptyCollectionCompleted, Unretained(this))); + task_runner_->PostDelayedTask(FROM_HERE, empty_collection_closure_.callback(), + collection_end_time_ - TimeTicks::Now()); +} + +std::unique_ptr +ThreadGroupProfiler::ActiveCollection::CreateSamplingProfilerForThread( + internal::WorkerThread* worker_thread, + const SamplingProfilerThreadToken& token, + const StackSamplingProfiler::SamplingParams& sampling_params) { + ThreadGroupProfilerClient* client = ThreadGroupProfiler::GetClient(); + return stack_sampling_profiler_factory_.Run( + token, sampling_params, + client->CreateProfileBuilder(BindPostTask( + task_runner_, + BindOnce(&ActiveCollection::OnProfilerCollectionCompleted, + Unretained(this), Unretained(worker_thread)))), + client->GetUnwindersFactory()); +} + +void ThreadGroupProfiler::ActiveCollection::OnProfilerCollectionCompleted( + internal::WorkerThread* worker_thread) { + DCHECK(!profilers_.empty()); + profilers_.erase(worker_thread); + // Notify the collection is complete when there's no outstanding profilers. + if (profilers_.empty()) { + std::move(collection_complete_callback_).Run(); + } +} + +void ThreadGroupProfiler::ActiveCollection::OnEmptyCollectionCompleted() { + DCHECK(profilers_.empty()); + std::move(collection_complete_callback_).Run(); +} + +ThreadGroupProfiler::ActiveCollection::~ActiveCollection() = default; + +// static +ThreadGroupProfilerClient* ThreadGroupProfiler::GetClient() { + // TODO(crbug.com/40226611): Add check once client is set on all embedders. + // CHECK(g_thread_group_profiler_client); + return g_thread_group_profiler_client; +} + +// static +ThreadGroupProfiler::ProfilerFactory +ThreadGroupProfiler::GetDefaultProfilerFactory() { + return BindRepeating( + [](SamplingProfilerThreadToken thread_token, + const StackSamplingProfiler::SamplingParams& params, + std::unique_ptr profile_builder, + StackSamplingProfiler::UnwindersFactory unwinder_factory) + -> std::unique_ptr { + return std::make_unique(thread_token, params, + std::move(profile_builder), + std::move(unwinder_factory)); + }); +} + +// static +TimeDelta ThreadGroupProfiler::GetSamplingDuration() { + StackSamplingProfiler::SamplingParams params = + GetClient()->GetSamplingParams(); + return params.sampling_interval * params.samples_per_profile; +} + +void ThreadGroupProfiler::ThreadGroupProfiler::StartTask() { + DCHECK_CALLED_ON_VALID_SEQUENCE(task_runner_sequence_checker_); + task_runner_->PostDelayedTask( + FROM_HERE, + base::BindOnce(&ThreadGroupProfiler::CollectProfilesTask, + Unretained(this)), + periodic_sampling_scheduler_->GetTimeToNextCollection()); +} + +void ThreadGroupProfiler::OnWorkerThreadStartedTask( + internal::WorkerThread* worker_thread, + SamplingProfilerThreadToken token) { + DCHECK_CALLED_ON_VALID_SEQUENCE(task_runner_sequence_checker_); + const bool inserted = + worker_thread_context_set_ + .emplace(worker_thread, WorkerThreadContext{token, + /*is_idle=*/true}) + .second; + // Worker thread should not be present before this call. + DCHECK(inserted); +} + +// A worker thread starts out on the idle set when it's created. On its +// ThreadMain it will call Delegate::GetWork() and when it does obtain a task +// source it will be removed from idle set and becomes active. +// OnWorkerThreadActive() will be called at that point. When it exhausted the +// task source, it will be placed on idle set and nullptr returned from +// GetWork()/ProcessSwappedTask(). The worker thread will then enter a +// TimedWait until it's either wake up or reaches its reclaim time. +void ThreadGroupProfiler::OnWorkerThreadActiveTask( + internal::WorkerThread* worker_thread) { + DCHECK_CALLED_ON_VALID_SEQUENCE(task_runner_sequence_checker_); + auto it = worker_thread_context_set_.find(worker_thread); + // Profiler token should already be set since OnWorkerThreadActive will + // be called strictly after worker thread creation. + DCHECK(it != worker_thread_context_set_.end()); + // Mark worker thread as active. + it->second.is_idle = false; + if (active_collection_) { + active_collection_->MaybeAddWorkerThread(worker_thread, it->second.token); + } +} + +void ThreadGroupProfiler::OnWorkerThreadIdleTask( + internal::WorkerThread* worker_thread) { + DCHECK_CALLED_ON_VALID_SEQUENCE(task_runner_sequence_checker_); + auto it = worker_thread_context_set_.find(worker_thread); + DCHECK(it != worker_thread_context_set_.end()); + // Mark worker thread as idle. + it->second.is_idle = true; +} + +void ThreadGroupProfiler::OnWorkerThreadExitingTask( + internal::WorkerThread* worker_thread, + WaitableEvent* profiling_has_stopped) { + DCHECK_CALLED_ON_VALID_SEQUENCE(task_runner_sequence_checker_); + if (active_collection_) { + active_collection_->RemoveWorkerThread(worker_thread); + } + worker_thread_context_set_.erase(worker_thread); + profiling_has_stopped->Signal(); +} + +void ThreadGroupProfiler::CollectProfilesTask() { + DCHECK_CALLED_ON_VALID_SEQUENCE(task_runner_sequence_checker_); + DCHECK(!active_collection_); + active_collection_.emplace( + worker_thread_context_set_, thread_group_type_, GetSamplingDuration(), + task_runner_.get(), stack_sampling_profiler_factory_, + BindOnce(&ThreadGroupProfiler::EndActiveCollectionTask, + Unretained(this))); +} + +void ThreadGroupProfiler::EndActiveCollectionTask() { + DCHECK_CALLED_ON_VALID_SEQUENCE(task_runner_sequence_checker_); + DCHECK(active_collection_); + active_collection_.reset(); + // Schedule the next collection. + task_runner_->PostDelayedTask( + FROM_HERE, + base::BindOnce(&ThreadGroupProfiler::CollectProfilesTask, + Unretained(this)), + periodic_sampling_scheduler_->GetTimeToNextCollection()); +} + +} // namespace base diff --git a/naiveproxy/src/base/profiler/thread_group_profiler.h b/naiveproxy/src/base/profiler/thread_group_profiler.h new file mode 100644 index 0000000000..326df871b8 --- /dev/null +++ b/naiveproxy/src/base/profiler/thread_group_profiler.h @@ -0,0 +1,257 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef BASE_PROFILER_THREAD_GROUP_PROFILER_H_ +#define BASE_PROFILER_THREAD_GROUP_PROFILER_H_ + +#include + +#include "base/cancelable_callback.h" +#include "base/containers/flat_map.h" +#include "base/functional/callback.h" +#include "base/memory/scoped_refptr.h" +#include "base/profiler/periodic_sampling_scheduler.h" +#include "base/profiler/sampling_profiler_thread_token.h" +#include "base/profiler/stack_sampling_profiler.h" +#include "base/task/sequenced_task_runner.h" +#include "base/threading/thread_checker.h" +#include "base/time/time.h" + +namespace base { +namespace internal { +class WorkerThread; +} // namespace internal + +class ThreadGroupProfilerClient; + +// ThreadGroupProfiler manages sampling of active worker threads and +// schedules periodic sampling. +// This class will be accessed on +// - Main thread: Construction, shutdown and destruction. +// - Worker thread: Invokes the OnWorkerThread* functions to inform the class +// of their lifetime events. +// - Sequenced task runner: Internal operations of this class are scheduled on +// the task runner. +// Once created, ThreadGroupProfiler will periodically profile active worker +// threads by creating a StackSamplingProfiler for each thread. At the beginning +// of a session, all active worker threads are sampled. During the session, if a +// worker thread becomes active (via OnWorkerThreadActive) it will be sampled +// for the remainder of this session. Once the sampling starts for a thread it +// will continue until either the thread is exiting (via OnWorkerThreadExit) or +// the profile is completed. When a profile completes the associated +// StackSamplingProfiler is destroyed. Worker threads being sampled will be +// blocked on exit until the profiling is stopped. +// +// When shutting down, the class requires that the provided SequencedTaskRunner +// is shutdown prior to invoking Shutdown(). +class BASE_EXPORT ThreadGroupProfiler { + public: + // Interface for profiling stack samples from a specific thread. + // This provides an abstraction over StackSamplingProfiler to enable testing + // of ThreadGroupProfiler without depending on actual profiler implementation. + class Profiler { + public: + virtual ~Profiler() = default; + virtual void Start() = 0; + + protected: + Profiler() = default; + }; + + // Sets the instance of ThreadProfilerClient to provide embedder-specific + // implementation logic. This instance must be set early, before + // CreateThreadGroupProfiler() and IsProfilingEnabled() are called. + static void SetClient(std::unique_ptr client); + + // Must be called after SetClient(). + static bool IsProfilingEnabled(); + + using ProfilerFactory = RepeatingCallback( + SamplingProfilerThreadToken thread_token, + const StackSamplingProfiler::SamplingParams& params, + std::unique_ptr profile_builder, + StackSamplingProfiler::UnwindersFactory unwinder_factory)>; + + using GetTimeToNextCollectionCallback = RepeatingCallback; + + // ThreadGroupProfiler constructor. |task_runner| will be used to schedule the + // profile collection. |thread_group_type| will used to tag the metadata for + // all samples collected in this profiler. |profiler_factory| is a repeating + // callback that will be used to make Profiler, intended to be used for + // dependency injection for testing. |time_to_next_collection_callback| is a + // repeating callback that will be used to get the next collection time, + // intended to be used for dependency injection for testing. + explicit ThreadGroupProfiler( + scoped_refptr task_runner, + int64_t thread_group_type, + std::unique_ptr periodic_sampling_scheduler = + nullptr, + ProfilerFactory profiler_factory = GetDefaultProfilerFactory()); + ThreadGroupProfiler(const ThreadGroupProfiler&) = delete; + ThreadGroupProfiler& operator=(const ThreadGroupProfiler&) = delete; + + ~ThreadGroupProfiler(); + + // Shuts down ThreadGroupProfiler instance and stops all current profiling. + // This should only be called after task runner is stopped as it expects + // exclusive access on this instance. No more sampling will happen and worker + // threads are freed to exit after shutdown finishes. + void Shutdown(); + + // Register new worker thread on starting. Must be called on worker + // thread. + void OnWorkerThreadStarted(internal::WorkerThread* worker_thread); + + // Starts profilng on worker that has become active during a sampling + // session. Must be called on worker thread. + void OnWorkerThreadActive(internal::WorkerThread* worker_thread); + + // Must be called on worker thread when it becomes idle, i.e. no more work is + // scheduled to run on this thread. + void OnWorkerThreadIdle(internal::WorkerThread* worker_thread); + + // Clean up on worker thread exiting. Must be called on worker thread. + void OnWorkerThreadExiting(internal::WorkerThread* worker_thread); + + private: + struct WorkerThreadContext { + SamplingProfilerThreadToken token; + bool is_idle; + }; + class ProfilerImpl; + + // Represents an active sample collection phase and is responsible for + // creating profilers for active threads both at the beginning as well as + // during the sampling duration. + class ActiveCollection { + public: + explicit ActiveCollection( + const flat_map& + worker_thread_context_set, + int64_t thread_group_type, + const TimeDelta& sampling_duration, + SequencedTaskRunner* task_runner, + ProfilerFactory stack_sampling_profiler_factory, + OnceClosure collection_completed_callback); + ~ActiveCollection(); + ActiveCollection(const ActiveCollection&) = delete; + ActiveCollection& operator=(const ActiveCollection&) = delete; + + // Maybe create a new profiler for worker_thread depending on how close + // the collection is to being complete. + void MaybeAddWorkerThread(internal::WorkerThread* worker_thread, + const SamplingProfilerThreadToken& token); + + // Destroy the profiler for worker_thread if it exists. + void RemoveWorkerThread(internal::WorkerThread* worker_thread); + + private: + // Helper function for creating the StackSamplingProfiler. + std::unique_ptr CreateSamplingProfilerForThread( + internal::WorkerThread* worker_thread, + const SamplingProfilerThreadToken& token, + const StackSamplingProfiler::SamplingParams& sampling_params); + + // Remove completed profiler from collection. If this is the last profiler, + // invokes the collection completed callback. + void OnProfilerCollectionCompleted(internal::WorkerThread* worker_thread); + // Invokes collection completed callback to end an empty collection. + void OnEmptyCollectionCompleted(); + + const int64_t thread_group_type_; + + // A map that stores the active `StackSamplingProfiler` instances + // for each worker thread. + flat_map> profilers_; + + scoped_refptr task_runner_; + + ProfilerFactory stack_sampling_profiler_factory_; + + // Callback to notify on collection complete. After this callback is run + // there's no guarantee that the instance is still alive. + OnceClosure collection_complete_callback_; + + const TimeDelta sampling_duration_; + + // Tracks the end time (an estimate calculated at start of sampling by + // adding the sampling duration) of the current sampling session. + const TimeTicks collection_end_time_; + + // Used to trigger collection completed when the collection is empty at the + // end of a session. This callback is only alive when there are no profilers + // in this collection and is cancelled immediately when there are active + // profilers. + CancelableOnceClosure empty_collection_closure_; + }; + + // Retrieve the ThreadProfilerClient instance provided via SetClient(). + static ThreadGroupProfilerClient* GetClient(); + + static ProfilerFactory GetDefaultProfilerFactory(); + + static GetTimeToNextCollectionCallback + GetDefaultTimeToNextCollectionCallback(); + + static TimeDelta GetSamplingDuration(); + + // All the private functions below are executed on the task runner to + // ensure proper synchronization. This is enforced through + // DCHECK_CALLED_ON_VALID_SEQUENCE(task_runner_sequence_checker_) for + // functions that are called as PostTask task and + // VALID_CONTEXT_REQUIRED(task_runner_sequence_checker_) for functions that + // are called directly. + + void StartTask(); + + void OnWorkerThreadStartedTask(internal::WorkerThread* worker_thread, + SamplingProfilerThreadToken token); + void OnWorkerThreadActiveTask(internal::WorkerThread* worker_thread); + void OnWorkerThreadIdleTask(internal::WorkerThread* worker_thread); + void OnWorkerThreadExitingTask(internal::WorkerThread* worker_thread, + WaitableEvent* profiling_has_stopped); + + // Starts the thread group profiler collection. This will create stack + // sampling profilers for all active worker threads in the thread group, + // monitor new active worker threads (these include both new worker threads + // that are spawned and idle worker threads becoming active) during sampling + // duration and schedules the next sampling session. + void CollectProfilesTask(); + + void EndActiveCollectionTask(); + + // A map that stores the worker threads, their corresponding profiler + // token and their idle states. + flat_map + worker_thread_context_set_ + GUARDED_BY_CONTEXT(task_runner_sequence_checker_); + + // This has no value if not in an active collection phase. + std::optional active_collection_ + GUARDED_BY_CONTEXT(task_runner_sequence_checker_); + + // Value to use as metadata for specifying which type of thread group is being + // profiled. + const int64_t thread_group_type_; + + // Used to block worker threads from exiting during ThreadGroupProfiler + // shutdown. + WaitableEvent thread_group_profiler_shutdown_{ + base::WaitableEvent::ResetPolicy::MANUAL, + base::WaitableEvent::InitialState::NOT_SIGNALED}; + + std::unique_ptr periodic_sampling_scheduler_ + GUARDED_BY_CONTEXT(task_runner_sequence_checker_); + + scoped_refptr task_runner_; + + ProfilerFactory stack_sampling_profiler_factory_; + + SEQUENCE_CHECKER(task_runner_sequence_checker_); + SEQUENCE_CHECKER(construction_sequence_checker_); +}; + +} // namespace base + +#endif // BASE_PROFILER_THREAD_GROUP_PROFILER_H_ diff --git a/naiveproxy/src/base/rand_util.cc b/naiveproxy/src/base/rand_util.cc index 83eb3b9e1a..59ff5df660 100644 --- a/naiveproxy/src/base/rand_util.cc +++ b/naiveproxy/src/base/rand_util.cc @@ -13,6 +13,7 @@ #include #include "base/check_op.h" +#include "base/containers/span.h" #include "base/time/time.h" namespace base { @@ -55,6 +56,12 @@ float RandFloat() { return BitsToOpenEndedUnitIntervalF(base::RandUint64()); } +bool RandBool() { + uint8_t number; + RandBytes(span_from_ref(number)); + return number & 1; +} + TimeDelta RandTimeDelta(TimeDelta start, TimeDelta limit) { // We must have a finite, non-empty, non-reversed interval. CHECK_LT(start, limit); @@ -132,7 +139,7 @@ void InsecureRandomGenerator::ReseedForTesting(uint64_t seed) { b_ = seed; } -uint64_t InsecureRandomGenerator::RandUint64() { +uint64_t InsecureRandomGenerator::RandUint64() const { // Using XorShift128+, which is simple and widely used. See // https://en.wikipedia.org/wiki/Xorshift#xorshift+ for details. uint64_t t = a_; @@ -147,7 +154,7 @@ uint64_t InsecureRandomGenerator::RandUint64() { return t + s; } -uint32_t InsecureRandomGenerator::RandUint32() { +uint32_t InsecureRandomGenerator::RandUint32() const { // The generator usually returns an uint64_t, truncate it. // // It is noted in this paper (https://arxiv.org/abs/1810.05313) that the @@ -156,7 +163,7 @@ uint32_t InsecureRandomGenerator::RandUint32() { return this->RandUint64() >> 32; } -double InsecureRandomGenerator::RandDouble() { +double InsecureRandomGenerator::RandDouble() const { uint64_t x = RandUint64(); // From https://vigna.di.unimi.it/xorshift/. // 53 bits of mantissa, hence the "hexadecimal exponent" 1p-53. @@ -164,7 +171,7 @@ double InsecureRandomGenerator::RandDouble() { } MetricsSubSampler::MetricsSubSampler() = default; -bool MetricsSubSampler::ShouldSample(double probability) { +bool MetricsSubSampler::ShouldSample(double probability) const { if (g_subsampling_always_sample.load(std::memory_order_relaxed)) { return true; } diff --git a/naiveproxy/src/base/rand_util.h b/naiveproxy/src/base/rand_util.h index b198a7198a..716222897d 100644 --- a/naiveproxy/src/base/rand_util.h +++ b/naiveproxy/src/base/rand_util.h @@ -9,13 +9,19 @@ #include #include +#include +#include #include +#include #include #include "base/base_export.h" #include "base/compiler_specific.h" #include "base/containers/span.h" #include "base/gtest_prod_util.h" +#include "base/numerics/clamped_math.h" +#include "base/numerics/safe_conversions.h" +#include "base/time/time.h" #include "build/build_config.h" #if !BUILDFLAG(IS_NACL) @@ -28,8 +34,6 @@ class MemoryHolder; namespace base { -class TimeDelta; - namespace internal { #if !BUILDFLAG(IS_NACL) @@ -60,6 +64,9 @@ BASE_EXPORT double RandDouble(); // Returns a random float in range [0, 1). Thread-safe. BASE_EXPORT float RandFloat(); +// Returns a random bool. Thread-safe. +BASE_EXPORT bool RandBool(); + // Returns a random duration in [`start`, `limit`). Thread-safe. // // REQUIRES: `start` < `limit` @@ -70,6 +77,67 @@ BASE_EXPORT TimeDelta RandTimeDelta(TimeDelta start, TimeDelta limit); // REQUIRES: `limit.is_positive()` BASE_EXPORT TimeDelta RandTimeDeltaUpTo(TimeDelta limit); +// Adjusts `value` up or down by a random amount up to `percentage`%, e.g. to +// add noise/jitter. Thread-safe. +// +// More precisely, implements something equivalent to the following pseudocode: +// (1) Computes `max_adjustment = value * percentage / 100` as a double +// (2) If `T` is integral, rounds `max_adjustment`, clamped to what is +// effectively a 65-bit signed value +// (3) Computes `result` as a random value in the range of +// [`value - max_adjustment`, `value + max_adjustment`) +// (4) Checks that the `result` is in the valid range of `T` and returns it +// +// REQUIRES: inputs are finite, `percentage` >= 0 +template + requires std::floating_point +T RandomizeByPercentage(T value, double percentage) { + CHECK(!std::isinf(value)); + CHECK(!std::isnan(value)); + CHECK(!std::isinf(percentage)); + CHECK_GE(percentage, 0); + return checked_cast(value + + value * (RandDouble() - 0.5) * 2 * percentage / 100); +} +template + requires std::integral +T RandomizeByPercentage(T value, double percentage) { + CHECK(!std::isinf(percentage)); + CHECK_GE(percentage, 0); + // If `T` is signed and `percentage` is sufficiently large, the maximum + // adjustment may not fit in a `T`. The clamped value described in pseudocode + // step (2) above will always fit in a `uint64_t`, so do math in `uint64_t`s. + const uint64_t abs_value = SafeUnsignedAbs(value); + const uint64_t max_abs_adjustment = + ClampRound(abs_value * percentage / 100); + if (!max_abs_adjustment) { + return value; + } + uint64_t abs_adjustment = RandGenerator(max_abs_adjustment); + + CheckedNumeric checked_value(value); + // Random sign bit for the adjustment. + if (RandBool()) { + // Subtract adjustment. + // + // Be careful to "translate" the adjustment to the other side of `value` (by + // doing the subtraction from `max_abs_adjustment` here) instead of + // "mirroring" it (as would happen if this were omitted). This avoids bias + // and preserves the desired half-closed interval property of the result + // range. + abs_adjustment = max_abs_adjustment - abs_adjustment; + checked_value -= abs_adjustment; + } else { + checked_value += abs_adjustment; + } + return checked_value.ValueOrDie(); +} +inline TimeDelta RandomizeByPercentage(TimeDelta value, double percentage) { + CHECK(!value.is_inf()); + return Microseconds( + RandomizeByPercentage(value.InMicroseconds(), percentage)); +} + // Given input |bits|, convert with maximum precision to a double in // the range [0, 1). Thread-safe. BASE_EXPORT double BitsToOpenEndedUnitInterval(uint64_t bits); @@ -151,8 +219,9 @@ class MetricsSubSampler; // // WARNING: This is not the generator you are looking for. This has significant // caveats: -// - It is non-cryptographic, so easy to miuse -// - It is neither fork() nor clone()-safe. +// - It is non-cryptographic, so easy to misuse +// - It is neither fork() nor clone()-safe because both RNG's after the +// fork/clone will have the same state and produce the same number stream. // - Synchronization is up to the client. // // Always prefer base::Rand*() above, unless you have a use case where its @@ -178,15 +247,16 @@ class BASE_EXPORT InsecureRandomGenerator { // Never use outside testing, not enough entropy. void ReseedForTesting(uint64_t seed); - uint32_t RandUint32(); - uint64_t RandUint64(); + uint32_t RandUint32() const; + uint64_t RandUint64() const; // In [0, 1). - double RandDouble(); + double RandDouble() const; private: InsecureRandomGenerator(); - // State. - uint64_t a_ = 0, b_ = 0; + // State. These are mutable to allow Rand* functions to be declared as const. + // This, in turn, enables use of `MetricsSubSampler` in const contexts. + mutable uint64_t a_ = 0, b_ = 0; // Before adding a new friend class, make sure that the overhead of // base::Rand*() is too high, using something more representative than a @@ -206,10 +276,17 @@ class BASE_EXPORT InsecureRandomGenerator { FRIEND_TEST_ALL_PREFIXES(RandUtilPerfTest, InsecureRandomRandUint64); }; +// Fast class to randomly sub-sample metrics that are logged in high frequency +// code. +// +// WARNING: This uses InsecureRandomGenerator so all the caveats there apply. +// In particular if a MetricsSubSampler object exists when fork()/clone() is +// called, calls to ShouldSample() on both sides of the fork will return the +// same values, possibly introducing metric bias. class BASE_EXPORT MetricsSubSampler { public: MetricsSubSampler(); - bool ShouldSample(double probability); + bool ShouldSample(double probability) const; // Make any call to ShouldSample for any instance of MetricsSubSampler // return true for testing. Cannot be used in conjunction with diff --git a/naiveproxy/src/base/rand_util_posix.cc b/naiveproxy/src/base/rand_util_posix.cc index a73e098308..dc030af9a4 100644 --- a/naiveproxy/src/base/rand_util_posix.cc +++ b/naiveproxy/src/base/rand_util_posix.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "base/rand_util.h" #include diff --git a/naiveproxy/src/base/ranges/OWNERS b/naiveproxy/src/base/ranges/OWNERS deleted file mode 100644 index bf426d601e..0000000000 --- a/naiveproxy/src/base/ranges/OWNERS +++ /dev/null @@ -1 +0,0 @@ -pkasting@chromium.org diff --git a/naiveproxy/src/base/ranges/README.md b/naiveproxy/src/base/ranges/README.md deleted file mode 100644 index c9a72c4dd6..0000000000 --- a/naiveproxy/src/base/ranges/README.md +++ /dev/null @@ -1,144 +0,0 @@ -# `base::ranges` - -This directory aims to implement a C++14 version of the new `std::ranges` -algorithms that were introduced in C++20. These implementations are added to the -`::base::ranges` namespace, and callers can access them by including -[`base/ranges/algorithm.h`](https://source.chromium.org/chromium/chromium/src/+/main:base/ranges/algorithm.h). - -## Similarities with C++20: - -### Automatically deducing `begin()` and `end()` -As probably one of the most important changes for readability and usability, all -algorithms in `base::ranges` have overloads for ranges of elements, which allow -callers to no longer specify `begin()` and `end()` iterators themselves. - -Before: -```c++ -bool HasEvens(const std::vector& vec) { - return std::any_of(vec.begin(), vec.end(), [](int i) { return i % 2 == 0; }); -} -``` - -After: -```c++ -bool HasEvens(const std::vector& vec) { - return base::ranges::any_of(vec, [](int i) { return i % 2 == 0; }); -} -``` - -Furthermore, these overloads also support binding to temporaries, so that -applying algorithms to return values is easier: - -```c++ -std::vector GetNums(); -``` - -Before: - -```c++ -bool HasEvens() { - std::vector nums = GetNums(); - return std::any_of(nums.begin(), nums.end(), - [](int i) { return i % 2 == 0; }); -} -``` - -After: -```c++ -bool HasEvens() { - return base::ranges::any_of(GetNums(), [](int i) { return i % 2 == 0; }); -} -``` - -### Support for Projections -In addition to supporting automatically deducing the `begin()` and `end()` -iterator for ranges, the `base::ranges::` algorithms also support projections, -that can be applied to arguments prior to passing it to supplied transformations -or predicates. This is especially useful when ordering a collection of classes -by a specific data member of the class. Example: - -Before: -```cpp -std::sort(suggestions->begin(), suggestions->end(), - [](const autofill::Suggestion& a, const autofill::Suggestion& b) { - return a.match < b.match; - }); -``` - -After: -```cpp -base::ranges::sort(*suggestions, /*comp=*/{}, &autofill::Suggestion::match); -``` - -Anything that is callable can be used as a projection. This includes -`FunctionObjects` like function pointers or functors, but also pointers to -member function and pointers to data members, as shown above. When not specified -a projection defaults to `base::ranges::identity`, which simply perfectly -forwards its argument. - -Projections are supported in both range and iterator-pair overloads of the -`base::ranges::` algorithms, for example `base::ranges::all_of` has the -following signatures: - -```cpp -template -bool all_of(InputIterator first, InputIterator last, Pred pred, Proj proj = {}); - -template -bool all_of(Range&& range, Pred pred, Proj proj = {}); -``` - -## Differences from C++20: -To simplify the implementation of the `base::ranges::` algorithms, they dispatch -to the `std::` algorithms found in C++14. This leads to the following list of -differences from C++20. Since most of these differences are differences in the -library and not in the language, they could be addressed in the future by adding -corresponding implementations. - -### Lack of Constraints -Due to the lack of support for concepts in the language, the algorithms in -`base::ranges` do not have the constraints that are present on the algorithms in -`std::ranges`. Instead, they support any type, much like C++14's `std::` -algorithms. In the future this might be addressed by adding corresponding -constraints via SFINAE, should the need arise. - -### Lack of Range Primitives -Due to C++14's lack of `std::ranges` concepts like sentinels and other range -primitives, algorithms taking a `[first, last)` pair rather than a complete -range, do not support different types for `first` and `last`. Since they rely on -C++14's implementation, the type must be the same. This could be addressed in -the future by implementing support for sentinel types ourselves. - -### Lack of `constexpr` -The `base::ranges` algorithms can only be used in a `constexpr` context when -they call underlying `std::` algorithms that are themselves `constexpr`. Before -C++20, only `std::min`, `std::max` and `std::minmax` are annotated -appropriately, so code like `constexpr bool foo = base::ranges::any_of(...);` -will fail because the compiler will not find a `constexpr std::any_of`. This -could be addressed by either upgrading Chromium's STL to C++20, or implementing -`constexpr` versions of some of these algorithms ourselves. - -### Lack of post C++14 algorithms -Since most algorithms in `base::ranges` dispatch to their C++14 equivalent, some -`std::` algorithms that are not present in C++14 have no implementation in -`base::ranges`. This list of algorithms includes the following: - -- [`std::sample`](https://en.cppreference.com/w/cpp/algorithm/sample) (added in C++17) - -### Return Types -Some of the algorithms in `std::ranges::` have different return types than their -equivalent in `std::`. For example, while `std::for_each` returns the passed-in -`Function`, `std::ranges::for_each` returns a `std::ranges::for_each_result`, -consisting of the `last` iterator and the function. - -In the cases where the return type differs, `base::ranges::` algorithms will -continue to return the old return type. - -### No blocking of ADL -The algorithms defined in `std::ranges` are not found by ADL, and inhibit ADL -when found by [unqualified name lookup][1]. This is done to be able to enforce -the constraints specified by those algorithms and commonly implemented by using -function objects instead of regular functions. Since we don't support -constrained algorithms yet, we don't implement the blocking of ADL either. - -[1]: https://wg21.link/algorithms.requirements#2 diff --git a/naiveproxy/src/base/ranges/algorithm.h b/naiveproxy/src/base/ranges/algorithm.h deleted file mode 100644 index 9c97d483a6..0000000000 --- a/naiveproxy/src/base/ranges/algorithm.h +++ /dev/null @@ -1,5116 +0,0 @@ -// Copyright 2020 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifdef UNSAFE_BUFFERS_BUILD -// TODO(crbug.com/40284755): Remove this and spanify to fix the errors. -#pragma allow_unsafe_buffers -#endif - -#ifndef BASE_RANGES_ALGORITHM_H_ -#define BASE_RANGES_ALGORITHM_H_ - -#include -#include -#include -#include -#include -#include -#include - -#include "base/check.h" -#include "base/compiler_specific.h" -#include "base/memory/raw_ptr_exclusion.h" -#include "base/ranges/functional.h" -#include "base/ranges/ranges.h" - -namespace base { - -namespace internal { - -// Returns a transformed version of the unary predicate `pred` applying `proj` -// to its argument before invoking `pred` on it. -// Ensures that the return type of `invoke(pred, ...)` is convertible to bool. -template -constexpr auto ProjectedUnaryPredicate(Pred& pred, Proj& proj) noexcept { - return [&pred, &proj](auto&& arg) -> bool { - return std::invoke(pred, - std::invoke(proj, std::forward(arg))); - }; -} - -// Helper concept that is true if the binary predicate can be invoked on the -// result of projecting T and projecting U. See `BinaryPredicateProjector` for -// additional background. -template -concept BinaryPredicateProjectorIsInvokable = requires(BinaryPred& predicate, - ProjT& project_t, - ProjU& project_u, - T&& t, - U&& u) { - { - std::invoke(predicate, std::invoke(project_t, std::forward(t)), - std::invoke(project_u, std::forward(u))) - } -> std::same_as; -}; - -// Returns a transformed version of the binary predicate `pred` applying `proj1` -// and `proj2` to its arguments before invoking `pred` on them. -// -// Provides an opt-in to considers all four permutations of projections and -// argument types. This is sometimes necessary to allow usage with legacy -// non-ranges std:: algorithms that don't support projections. -// -// These permutations are assigned different priorities to break ambiguities in -// case several permutations are possible, e.g. when Proj1 and Proj2 are the -// same type. -// -// Note that even when opting in to using all permutations of projections, -// calling code should still ensure that the canonical mapping of {Proj1, Proj2} -// to {LHS, RHS} compiles for all members of the range. This can be done by -// adding the following constraint: -// -// typename = -// std::indirect_result_t, Proj1>, -// std::projected, Proj2>> -// -// Ensures that the return type of `invoke(pred, ...)` is convertible to bool. -template -class BinaryPredicateProjector { - public: - constexpr BinaryPredicateProjector(Pred& pred, Proj1& proj1, Proj2& proj2) - : pred_(pred), proj1_(proj1), proj2_(proj2) {} - - private: - template - constexpr auto GetProjs() const { - if constexpr (BinaryPredicateProjectorIsInvokable) { - return std::pair(proj1_, proj2_); - } else if constexpr (kPermute && - BinaryPredicateProjectorIsInvokable) { - return std::pair(proj2_, proj1_); - } else if constexpr (kPermute && - BinaryPredicateProjectorIsInvokable) { - return std::pair(proj1_, proj1_); - } else if constexpr (kPermute && - BinaryPredicateProjectorIsInvokable) { - return std::pair(proj2_, proj2_); - } - } - - public: - template - constexpr bool operator()(T&& lhs, U&& rhs) const { - auto projs = GetProjs(); - return std::invoke(pred_, std::invoke(projs.first, std::forward(lhs)), - std::invoke(projs.second, std::forward(rhs))); - } - - private: - // RAW_PTR_EXCLUSION: Binary size increase (~120K on Android). - RAW_PTR_EXCLUSION Pred& pred_; - RAW_PTR_EXCLUSION Proj1& proj1_; - RAW_PTR_EXCLUSION Proj2& proj2_; -}; - -// Small wrappers around BinaryPredicateProjector to make the calling side more -// readable. -template -constexpr auto ProjectedBinaryPredicate(Pred& pred, - Proj1& proj1, - Proj2& proj2) noexcept { - return BinaryPredicateProjector(pred, proj1, proj2); -} - -template -constexpr auto PermutedProjectedBinaryPredicate(Pred& pred, - Proj1& proj1, - Proj2& proj2) noexcept { - return BinaryPredicateProjector(pred, proj1, proj2); -} - -// This alias is used below to restrict iterator based APIs to types for which -// `iterator_category` and the pre-increment and post-increment operators are -// defined. This is required in situations where otherwise an undesired overload -// would be chosen, e.g. copy_if. In spirit this is similar to C++20's -// std::input_or_output_iterator, a concept that each iterator should satisfy. -template ()), - typename = decltype(std::declval()++)> -using iterator_category_t = - typename std::iterator_traits::iterator_category; - -// This alias is used below to restrict range based APIs to types for which -// `iterator_category_t` is defined for the underlying iterator. This is -// required in situations where otherwise an undesired overload would be chosen, -// e.g. transform. In spirit this is similar to C++20's std::ranges::range, a -// concept that each range should satisfy. -template -using range_category_t = iterator_category_t>; - -} // namespace internal - -namespace ranges { - -// [alg.nonmodifying] Non-modifying sequence operations -// Reference: https://wg21.link/alg.nonmodifying - -// [alg.all.of] All of -// Reference: https://wg21.link/alg.all.of - -// Let `E(i)` be `invoke(pred, invoke(proj, *i))`. -// -// Returns: `false` if `E(i)` is `false` for some iterator `i` in the range -// `[first, last)`, and `true` otherwise. -// -// Complexity: At most `last - first` applications of the predicate and any -// projection. -// -// Reference: https://wg21.link/alg.all.of#:~:text=ranges::all_of(I -template > -constexpr bool all_of(InputIterator first, - InputIterator last, - Pred pred, - Proj proj = {}) { - for (; first != last; ++first) { - if (!std::invoke(pred, std::invoke(proj, *first))) { - return false; - } - } - - return true; -} - -// Let `E(i)` be `invoke(pred, invoke(proj, *i))`. -// -// Returns: `false` if `E(i)` is `false` for some iterator `i` in `range`, and -// `true` otherwise. -// -// Complexity: At most `size(range)` applications of the predicate and any -// projection. -// -// Reference: https://wg21.link/alg.all.of#:~:text=ranges::all_of(R -template > -constexpr bool all_of(Range&& range, Pred pred, Proj proj = {}) { - return ranges::all_of(std::ranges::begin(range), std::ranges::end(range), - std::move(pred), std::move(proj)); -} - -// [alg.any.of] Any of -// Reference: https://wg21.link/alg.any.of - -// Let `E(i)` be `invoke(pred, invoke(proj, *i))`. -// -// Returns: `true` if `E(i)` is `true` for some iterator `i` in the range -// `[first, last)`, and `false` otherwise. -// -// Complexity: At most `last - first` applications of the predicate and any -// projection. -// -// Reference: https://wg21.link/alg.any.of#:~:text=ranges::any_of(I -template > -constexpr bool any_of(InputIterator first, - InputIterator last, - Pred pred, - Proj proj = {}) { - for (; first != last; ++first) { - if (std::invoke(pred, std::invoke(proj, *first))) { - return true; - } - } - - return false; -} - -// Let `E(i)` be `invoke(pred, invoke(proj, *i))`. -// -// Returns: `true` if `E(i)` is `true` for some iterator `i` in `range`, and -// `false` otherwise. -// -// Complexity: At most `size(range)` applications of the predicate and any -// projection. -// -// Reference: https://wg21.link/alg.any.of#:~:text=ranges::any_of(R -template > -constexpr bool any_of(Range&& range, Pred pred, Proj proj = {}) { - return ranges::any_of(std::ranges::begin(range), std::ranges::end(range), - std::move(pred), std::move(proj)); -} - -// [alg.none.of] None of -// Reference: https://wg21.link/alg.none.of - -// Let `E(i)` be `invoke(pred, invoke(proj, *i))`. -// -// Returns: `false` if `E(i)` is `true` for some iterator `i` in the range -// `[first, last)`, and `true` otherwise. -// -// Complexity: At most `last - first` applications of the predicate and any -// projection. -// -// Reference: https://wg21.link/alg.none.of#:~:text=ranges::none_of(I -template > -constexpr bool none_of(InputIterator first, - InputIterator last, - Pred pred, - Proj proj = {}) { - for (; first != last; ++first) { - if (std::invoke(pred, std::invoke(proj, *first))) { - return false; - } - } - - return true; -} - -// Let `E(i)` be `invoke(pred, invoke(proj, *i))`. -// -// Returns: `false` if `E(i)` is `true` for some iterator `i` in `range`, and -// `true` otherwise. -// -// Complexity: At most `size(range)` applications of the predicate and any -// projection. -// -// Reference: https://wg21.link/alg.none.of#:~:text=ranges::none_of(R -template > -constexpr bool none_of(Range&& range, Pred pred, Proj proj = {}) { - return ranges::none_of(std::ranges::begin(range), std::ranges::end(range), - std::move(pred), std::move(proj)); -} - -// [alg.foreach] For each -// Reference: https://wg21.link/alg.foreach - -// Reference: https://wg21.link/algorithm.syn#:~:text=for_each_result -template -using for_each_result = std::ranges::in_fun_result; - -// Effects: Calls `invoke(f, invoke(proj, *i))` for every iterator `i` in the -// range `[first, last)`, starting from `first` and proceeding to `last - 1`. -// -// Returns: `{last, std::move(f)}`. -// -// Complexity: Applies `f` and `proj` exactly `last - first` times. -// -// Remarks: If `f` returns a result, the result is ignored. -// -// Reference: https://wg21.link/alg.foreach#:~:text=ranges::for_each(I -template > -constexpr auto for_each(InputIterator first, - InputIterator last, - Fun f, - Proj proj = {}) { - for (; first != last; ++first) { - std::invoke(f, std::invoke(proj, *first)); - } - return for_each_result{first, std::move(f)}; -} - -// Effects: Calls `invoke(f, invoke(proj, *i))` for every iterator `i` in the -// range `range`, starting from `begin(range)` and proceeding to `end(range) - -// 1`. -// -// Returns: `{last, std::move(f)}`. -// -// Complexity: Applies `f` and `proj` exactly `size(range)` times. -// -// Remarks: If `f` returns a result, the result is ignored. -// -// Reference: https://wg21.link/alg.foreach#:~:text=ranges::for_each(R -template > -constexpr auto for_each(Range&& range, Fun f, Proj proj = {}) { - return ranges::for_each(std::ranges::begin(range), std::ranges::end(range), - std::move(f), std::move(proj)); -} - -// Reference: https://wg21.link/algorithm.syn#:~:text=for_each_n_result -template -using for_each_n_result = std::ranges::in_fun_result; - -// Preconditions: `n >= 0` is `true`. -// -// Effects: Calls `invoke(f, invoke(proj, *i))` for every iterator `i` in the -// range `[first, first + n)` in order. -// -// Returns: `{first + n, std::move(f)}`. -// -// Remarks: If `f` returns a result, the result is ignored. -// -// Reference: https://wg21.link/alg.foreach#:~:text=ranges::for_each_n -template > -constexpr auto for_each_n(InputIterator first, Size n, Fun f, Proj proj = {}) { - while (n > 0) { - std::invoke(f, std::invoke(proj, *first)); - ++first; - --n; - } - - return for_each_n_result{first, std::move(f)}; -} - -// [alg.find] Find -// Reference: https://wg21.link/alg.find - -// Let `E(i)` be `bool(invoke(proj, *i) == value)`. -// -// Returns: The first iterator `i` in the range `[first, last)` for which `E(i)` -// is `true`. Returns `last` if no such iterator is found. -// -// Complexity: At most `last - first` applications of the corresponding -// predicate and any projection. -// -// Reference: https://wg21.link/alg.find#:~:text=ranges::find(I -template > -constexpr auto find(InputIterator first, - InputIterator last, - const T& value, - Proj proj = {}) { - for (; first != last; ++first) { - if (std::invoke(proj, *first) == value) { - break; - } - } - - return first; -} - -// Let `E(i)` be `bool(invoke(proj, *i) == value)`. -// -// Returns: The first iterator `i` in `range` for which `E(i)` is `true`. -// Returns `end(range)` if no such iterator is found. -// -// Complexity: At most `size(range)` applications of the corresponding predicate -// and any projection. -// -// Reference: https://wg21.link/alg.find#:~:text=ranges::find(R -template > -constexpr auto find(Range&& range, const T& value, Proj proj = {}) { - return ranges::find(std::ranges::begin(range), std::ranges::end(range), value, - std::move(proj)); -} - -// Let `E(i)` be `bool(invoke(pred, invoke(proj, *i)))`. -// -// Returns: The first iterator `i` in the range `[first, last)` for which `E(i)` -// is `true`. Returns `last` if no such iterator is found. -// -// Complexity: At most `last - first` applications of the corresponding -// predicate and any projection. -// -// Reference: https://wg21.link/alg.find#:~:text=ranges::find_if(I -template > -constexpr auto find_if(InputIterator first, - InputIterator last, - Pred pred, - Proj proj = {}) { - return std::find_if(first, last, - internal::ProjectedUnaryPredicate(pred, proj)); -} - -// Let `E(i)` be `bool(invoke(pred, invoke(proj, *i)))`. -// -// Returns: The first iterator `i` in `range` for which `E(i)` is `true`. -// Returns `end(range)` if no such iterator is found. -// -// Complexity: At most `size(range)` applications of the corresponding predicate -// and any projection. -// -// Reference: https://wg21.link/alg.find#:~:text=ranges::find_if(R -template > -constexpr auto find_if(Range&& range, Pred pred, Proj proj = {}) { - return ranges::find_if(std::ranges::begin(range), std::ranges::end(range), - std::move(pred), std::move(proj)); -} - -// Let `E(i)` be `bool(!invoke(pred, invoke(proj, *i)))`. -// -// Returns: The first iterator `i` in the range `[first, last)` for which `E(i)` -// is `true`. Returns `last` if no such iterator is found. -// -// Complexity: At most `last - first` applications of the corresponding -// predicate and any projection. -// -// Reference: https://wg21.link/alg.find#:~:text=ranges::find_if_not(I -template > -constexpr auto find_if_not(InputIterator first, - InputIterator last, - Pred pred, - Proj proj = {}) { - return std::find_if_not(first, last, - internal::ProjectedUnaryPredicate(pred, proj)); -} - -// Let `E(i)` be `bool(!invoke(pred, invoke(proj, *i)))`. -// -// Returns: The first iterator `i` in `range` for which `E(i)` is `true`. -// Returns `end(range)` if no such iterator is found. -// -// Complexity: At most `size(range)` applications of the corresponding predicate -// and any projection. -// -// Reference: https://wg21.link/alg.find#:~:text=ranges::find_if_not(R -template > -constexpr auto find_if_not(Range&& range, Pred pred, Proj proj = {}) { - return ranges::find_if_not(std::ranges::begin(range), std::ranges::end(range), - std::move(pred), std::move(proj)); -} - -// [alg.find.end] Find end -// Reference: https://wg21.link/alg.find.end - -// Let: -// - `E(i,n)` be `invoke(pred, invoke(proj1, *(i + n)), -// invoke(proj2, *(first2 + n)))` -// -// - `i` be `last1` if `[first2, last2)` is empty, or if -// `(last2 - first2) > (last1 - first1)` is `true`, or if there is no iterator -// in the range `[first1, last1 - (last2 - first2))` such that for every -// non-negative integer `n < (last2 - first2)`, `E(i,n)` is `true`. Otherwise -// `i` is the last such iterator in `[first1, last1 - (last2 - first2))`. -// -// Returns: `i` -// Note: std::ranges::find_end(I1 first1,...) returns a range, rather than an -// iterator. For simplicitly we match std::find_end's return type instead. -// -// Complexity: -// At most `(last2 - first2) * (last1 - first1 - (last2 - first2) + 1)` -// applications of the corresponding predicate and any projections. -// -// Reference: https://wg21.link/alg.find.end#:~:text=ranges::find_end(I1 -template < - typename ForwardIterator1, - typename ForwardIterator2, - typename Pred = ranges::equal_to, - typename Proj1 = std::identity, - typename Proj2 = std::identity, - typename = internal::iterator_category_t, - typename = internal::iterator_category_t, - typename = std::indirect_result_t, - std::projected>> -constexpr auto find_end(ForwardIterator1 first1, - ForwardIterator1 last1, - ForwardIterator2 first2, - ForwardIterator2 last2, - Pred pred = {}, - Proj1 proj1 = {}, - Proj2 proj2 = {}) { - return std::find_end(first1, last1, first2, last2, - internal::ProjectedBinaryPredicate(pred, proj1, proj2)); -} - -// Let: -// - `E(i,n)` be `invoke(pred, invoke(proj1, *(i + n)), -// invoke(proj2, *(first2 + n)))` -// -// - `i` be `end(range1)` if `range2` is empty, or if -// `size(range2) > size(range1)` is `true`, or if there is no iterator in the -// range `[begin(range1), end(range1) - size(range2))` such that for every -// non-negative integer `n < size(range2)`, `E(i,n)` is `true`. Otherwise `i` -// is the last such iterator in `[begin(range1), end(range1) - size(range2))`. -// -// Returns: `i` -// Note: std::ranges::find_end(R1&& r1,...) returns a range, rather than an -// iterator. For simplicitly we match std::find_end's return type instead. -// -// Complexity: At most `size(range2) * (size(range1) - size(range2) + 1)` -// applications of the corresponding predicate and any projections. -// -// Reference: https://wg21.link/alg.find.end#:~:text=ranges::find_end(R1 -template , - typename = internal::range_category_t, - typename = - std::indirect_result_t, Proj1>, - std::projected, Proj2>>> -constexpr auto find_end(Range1&& range1, - Range2&& range2, - Pred pred = {}, - Proj1 proj1 = {}, - Proj2 proj2 = {}) { - return ranges::find_end(std::ranges::begin(range1), std::ranges::end(range1), - std::ranges::begin(range2), std::ranges::end(range2), - std::move(pred), std::move(proj1), std::move(proj2)); -} - -// [alg.find.first.of] Find first -// Reference: https://wg21.link/alg.find.first.of - -// Let `E(i,j)` be `bool(invoke(pred, invoke(proj1, *i), invoke(proj2, *j)))`. -// -// Effects: Finds an element that matches one of a set of values. -// -// Returns: The first iterator `i` in the range `[first1, last1)` such that for -// some iterator `j` in the range `[first2, last2)` `E(i,j)` holds. Returns -// `last1` if `[first2, last2)` is empty or if no such iterator is found. -// -// Complexity: At most `(last1 - first1) * (last2 - first2)` applications of the -// corresponding predicate and any projections. -// -// Reference: -// https://wg21.link/alg.find.first.of#:~:text=ranges::find_first_of(I1 -template < - typename ForwardIterator1, - typename ForwardIterator2, - typename Pred = ranges::equal_to, - typename Proj1 = std::identity, - typename Proj2 = std::identity, - typename = internal::iterator_category_t, - typename = internal::iterator_category_t, - typename = std::indirect_result_t, - std::projected>> -constexpr auto find_first_of(ForwardIterator1 first1, - ForwardIterator1 last1, - ForwardIterator2 first2, - ForwardIterator2 last2, - Pred pred = {}, - Proj1 proj1 = {}, - Proj2 proj2 = {}) { - return std::find_first_of( - first1, last1, first2, last2, - internal::ProjectedBinaryPredicate(pred, proj1, proj2)); -} - -// Let `E(i,j)` be `bool(invoke(pred, invoke(proj1, *i), invoke(proj2, *j)))`. -// -// Effects: Finds an element that matches one of a set of values. -// -// Returns: The first iterator `i` in `range1` such that for some iterator `j` -// in `range2` `E(i,j)` holds. Returns `end(range1)` if `range2` is empty or if -// no such iterator is found. -// -// Complexity: At most `size(range1) * size(range2)` applications of the -// corresponding predicate and any projections. -// -// Reference: -// https://wg21.link/alg.find.first.of#:~:text=ranges::find_first_of(R1 -template , - typename = internal::range_category_t, - typename = - std::indirect_result_t, Proj1>, - std::projected, Proj2>>> -constexpr auto find_first_of(Range1&& range1, - Range2&& range2, - Pred pred = {}, - Proj1 proj1 = {}, - Proj2 proj2 = {}) { - return ranges::find_first_of( - std::ranges::begin(range1), std::ranges::end(range1), - std::ranges::begin(range2), std::ranges::end(range2), std::move(pred), - std::move(proj1), std::move(proj2)); -} - -// [alg.adjacent.find] Adjacent find -// Reference: https://wg21.link/alg.adjacent.find - -// Let `E(i)` be `bool(invoke(pred, invoke(proj, *i), invoke(proj, *(i + 1))))`. -// -// Returns: The first iterator `i` such that both `i` and `i + 1` are in the -// range `[first, last)` for which `E(i)` holds. Returns `last` if no such -// iterator is found. -// -// Complexity: Exactly `min((i - first) + 1, (last - first) - 1)` applications -// of the corresponding predicate, where `i` is `adjacent_find`'s return value. -// -// Reference: -// https://wg21.link/alg.adjacent.find#:~:text=ranges::adjacent_find(I -template > -constexpr auto adjacent_find(ForwardIterator first, - ForwardIterator last, - Pred pred = {}, - Proj proj = {}) { - // Implementation inspired by cppreference.com: - // https://en.cppreference.com/w/cpp/algorithm/adjacent_find - // - // A reimplementation is required, because std::adjacent_find is not constexpr - // prior to C++20. Once we have C++20, we should switch to standard library - // implementation. - if (first == last) { - return last; - } - - for (ForwardIterator next = first; ++next != last; ++first) { - if (std::invoke(pred, std::invoke(proj, *first), - std::invoke(proj, *next))) { - return first; - } - } - - return last; -} - -// Let `E(i)` be `bool(invoke(pred, invoke(proj, *i), invoke(proj, *(i + 1))))`. -// -// Returns: The first iterator `i` such that both `i` and `i + 1` are in the -// range `range` for which `E(i)` holds. Returns `end(range)` if no such -// iterator is found. -// -// Complexity: Exactly `min((i - begin(range)) + 1, size(range) - 1)` -// applications of the corresponding predicate, where `i` is `adjacent_find`'s -// return value. -// -// Reference: -// https://wg21.link/alg.adjacent.find#:~:text=ranges::adjacent_find(R -template > -constexpr auto adjacent_find(Range&& range, Pred pred = {}, Proj proj = {}) { - return ranges::adjacent_find(std::ranges::begin(range), - std::ranges::end(range), std::move(pred), - std::move(proj)); -} - -// [alg.count] Count -// Reference: https://wg21.link/alg.count - -// Let `E(i)` be `invoke(proj, *i) == value`. -// -// Effects: Returns the number of iterators `i` in the range `[first, last)` for -// which `E(i)` holds. -// -// Complexity: Exactly `last - first` applications of the corresponding -// predicate and any projection. -// -// Reference: https://wg21.link/alg.count#:~:text=ranges::count(I -template > -constexpr auto count(InputIterator first, - InputIterator last, - const T& value, - Proj proj = {}) { - // Note: In order to be able to apply `proj` to each element in [first, last) - // we are dispatching to std::count_if instead of std::count. - return std::count_if(first, last, [&proj, &value](auto&& lhs) { - return std::invoke(proj, std::forward(lhs)) == value; - }); -} - -// Let `E(i)` be `invoke(proj, *i) == value`. -// -// Effects: Returns the number of iterators `i` in `range` for which `E(i)` -// holds. -// -// Complexity: Exactly `size(range)` applications of the corresponding predicate -// and any projection. -// -// Reference: https://wg21.link/alg.count#:~:text=ranges::count(R -template > -constexpr auto count(Range&& range, const T& value, Proj proj = {}) { - return ranges::count(std::ranges::begin(range), std::ranges::end(range), - value, std::move(proj)); -} - -// Let `E(i)` be `bool(invoke(pred, invoke(proj, *i)))`. -// -// Effects: Returns the number of iterators `i` in the range `[first, last)` for -// which `E(i)` holds. -// -// Complexity: Exactly `last - first` applications of the corresponding -// predicate and any projection. -// -// Reference: https://wg21.link/alg.count#:~:text=ranges::count_if(I -template > -constexpr auto count_if(InputIterator first, - InputIterator last, - Pred pred, - Proj proj = {}) { - return std::count_if(first, last, - internal::ProjectedUnaryPredicate(pred, proj)); -} - -// Let `E(i)` be `bool(invoke(pred, invoke(proj, *i)))`. -// -// Effects: Returns the number of iterators `i` in `range` for which `E(i)` -// holds. -// -// Complexity: Exactly `size(range)` applications of the corresponding predicate -// and any projection. -// -// Reference: https://wg21.link/alg.count#:~:text=ranges::count_if(R -template > -constexpr auto count_if(Range&& range, Pred pred, Proj proj = {}) { - return ranges::count_if(std::ranges::begin(range), std::ranges::end(range), - std::move(pred), std::move(proj)); -} - -// [mismatch] Mismatch -// Reference: https://wg21.link/mismatch - -// Let `E(n)` be `!invoke(pred, invoke(proj1, *(first1 + n)), -// invoke(proj2, *(first2 + n)))`. -// -// Let `N` be `min(last1 - first1, last2 - first2)`. -// -// Returns: `{ first1 + n, first2 + n }`, where `n` is the smallest integer in -// `[0, N)` such that `E(n)` holds, or `N` if no such integer exists. -// -// Complexity: At most `N` applications of the corresponding predicate and any -// projections. -// -// Reference: https://wg21.link/mismatch#:~:text=ranges::mismatch(I1 -template < - typename ForwardIterator1, - typename ForwardIterator2, - typename Pred = ranges::equal_to, - typename Proj1 = std::identity, - typename Proj2 = std::identity, - typename = internal::iterator_category_t, - typename = internal::iterator_category_t, - typename = std::indirect_result_t, - std::projected>> -constexpr auto mismatch(ForwardIterator1 first1, - ForwardIterator1 last1, - ForwardIterator2 first2, - ForwardIterator2 last2, - Pred pred = {}, - Proj1 proj1 = {}, - Proj2 proj2 = {}) { - return std::mismatch(first1, last1, first2, last2, - internal::ProjectedBinaryPredicate(pred, proj1, proj2)); -} - -// Let `E(n)` be `!invoke(pred, invoke(proj1, *(begin(range1) + n)), -// invoke(proj2, *(begin(range2) + n)))`. -// -// Let `N` be `min(size(range1), size(range2))`. -// -// Returns: `{ begin(range1) + n, begin(range2) + n }`, where `n` is the -// smallest integer in `[0, N)` such that `E(n)` holds, or `N` if no such -// integer exists. -// -// Complexity: At most `N` applications of the corresponding predicate and any -// projections. -// -// Reference: https://wg21.link/mismatch#:~:text=ranges::mismatch(R1 -template , - typename = internal::range_category_t, - typename = - std::indirect_result_t, Proj1>, - std::projected, Proj2>>> -constexpr auto mismatch(Range1&& range1, - Range2&& range2, - Pred pred = {}, - Proj1 proj1 = {}, - Proj2 proj2 = {}) { - return ranges::mismatch(std::ranges::begin(range1), std::ranges::end(range1), - std::ranges::begin(range2), std::ranges::end(range2), - std::move(pred), std::move(proj1), std::move(proj2)); -} - -// [alg.equal] Equal -// Reference: https://wg21.link/alg.equal - -// Let `E(i)` be -// `invoke(pred, invoke(proj1, *i), invoke(proj2, *(first2 + (i - first1))))`. -// -// Returns: If `last1 - first1 != last2 - first2`, return `false.` Otherwise -// return `true` if `E(i)` holds for every iterator `i` in the range `[first1, -// last1)`. Otherwise, returns `false`. -// -// Complexity: If the types of `first1`, `last1`, `first2`, and `last2` meet the -// `RandomAccessIterator` requirements and `last1 - first1 != last2 - first2`, -// then no applications of the corresponding predicate and each projection; -// otherwise, at most `min(last1 - first1, last2 - first2)` applications of the -// corresponding predicate and any projections. -// -// Reference: https://wg21.link/alg.equal#:~:text=ranges::equal(I1 -template < - typename ForwardIterator1, - typename ForwardIterator2, - typename Pred = ranges::equal_to, - typename Proj1 = std::identity, - typename Proj2 = std::identity, - typename = internal::iterator_category_t, - typename = internal::iterator_category_t, - typename = std::indirect_result_t, - std::projected>> -constexpr bool equal(ForwardIterator1 first1, - ForwardIterator1 last1, - ForwardIterator2 first2, - ForwardIterator2 last2, - Pred pred = {}, - Proj1 proj1 = {}, - Proj2 proj2 = {}) { - if (std::is_constant_evaluated()) { - for (; first1 != last1 && first2 != last2; ++first1, ++first2) { - if (!std::invoke(pred, std::invoke(proj1, *first1), - std::invoke(proj2, *first2))) { - return false; - } - } - - return first1 == last1 && first2 == last2; - } - - return std::equal(first1, last1, first2, last2, - internal::ProjectedBinaryPredicate(pred, proj1, proj2)); -} - -// Let `E(i)` be -// `invoke(pred, invoke(proj1, *i), -// invoke(proj2, *(begin(range2) + (i - begin(range1)))))`. -// -// Returns: If `size(range1) != size(range2)`, return `false.` Otherwise return -// `true` if `E(i)` holds for every iterator `i` in `range1`. Otherwise, returns -// `false`. -// -// Complexity: If the types of `begin(range1)`, `end(range1)`, `begin(range2)`, -// and `end(range2)` meet the `RandomAccessIterator` requirements and -// `size(range1) != size(range2)`, then no applications of the corresponding -// predicate and each projection; -// otherwise, at most `min(size(range1), size(range2))` applications of the -// corresponding predicate and any projections. -// -// Reference: https://wg21.link/alg.equal#:~:text=ranges::equal(R1 -template , - typename = internal::range_category_t, - typename = - std::indirect_result_t, Proj1>, - std::projected, Proj2>>> -constexpr bool equal(Range1&& range1, - Range2&& range2, - Pred pred = {}, - Proj1 proj1 = {}, - Proj2 proj2 = {}) { - return ranges::equal(std::ranges::begin(range1), std::ranges::end(range1), - std::ranges::begin(range2), std::ranges::end(range2), - std::move(pred), std::move(proj1), std::move(proj2)); -} - -// [alg.is.permutation] Is permutation -// Reference: https://wg21.link/alg.is.permutation - -// Returns: If `last1 - first1 != last2 - first2`, return `false`. Otherwise -// return `true` if there exists a permutation of the elements in the range -// `[first2, last2)`, bounded by `[pfirst, plast)`, such that -// `ranges::equal(first1, last1, pfirst, plast, pred, proj, proj)` returns -// `true`; otherwise, returns `false`. -// -// Complexity: No applications of the corresponding predicate if -// ForwardIterator1 and ForwardIterator2 meet the requirements of random access -// iterators and `last1 - first1 != last2 - first2`. Otherwise, exactly -// `last1 - first1` applications of the corresponding predicate and projections -// if `ranges::equal(first1, last1, first2, last2, pred, proj, proj)` would -// return true; -// otherwise, at worst `O(N^2)`, where `N` has the value `last1 - first1`. -// -// Reference: -// https://wg21.link/alg.is.permutation#:~:text=ranges::is_permutation(I1 -template < - typename ForwardIterator1, - typename ForwardIterator2, - typename Pred = ranges::equal_to, - typename Proj1 = std::identity, - typename Proj2 = std::identity, - typename = internal::iterator_category_t, - typename = internal::iterator_category_t, - typename = std::indirect_result_t, - std::projected>> -constexpr bool is_permutation(ForwardIterator1 first1, - ForwardIterator1 last1, - ForwardIterator2 first2, - ForwardIterator2 last2, - Pred pred = {}, - Proj1 proj1 = {}, - Proj2 proj2 = {}) { - // Needs to opt-in to all permutations, since std::is_permutation expects - // pred(proj1(lhs), proj1(rhs)) to compile. - return std::is_permutation( - first1, last1, first2, last2, - internal::PermutedProjectedBinaryPredicate(pred, proj1, proj2)); -} - -// Returns: If `size(range1) != size(range2)`, return `false`. Otherwise return -// `true` if there exists a permutation of the elements in `range2`, bounded by -// `[pbegin, pend)`, such that -// `ranges::equal(range1, [pbegin, pend), pred, proj, proj)` returns `true`; -// otherwise, returns `false`. -// -// Complexity: No applications of the corresponding predicate if Range1 and -// Range2 meet the requirements of random access ranges and -// `size(range1) != size(range2)`. Otherwise, exactly `size(range1)` -// applications of the corresponding predicate and projections if -// `ranges::equal(range1, range2, pred, proj, proj)` would return true; -// otherwise, at worst `O(N^2)`, where `N` has the value `size(range1)`. -// -// Reference: -// https://wg21.link/alg.is.permutation#:~:text=ranges::is_permutation(R1 -template , - typename = internal::range_category_t, - typename = - std::indirect_result_t, Proj1>, - std::projected, Proj2>>> -constexpr bool is_permutation(Range1&& range1, - Range2&& range2, - Pred pred = {}, - Proj1 proj1 = {}, - Proj2 proj2 = {}) { - return ranges::is_permutation( - std::ranges::begin(range1), std::ranges::end(range1), - std::ranges::begin(range2), std::ranges::end(range2), std::move(pred), - std::move(proj1), std::move(proj2)); -} - -// [alg.search] Search -// Reference: https://wg21.link/alg.search - -// Returns: `i`, where `i` is the first iterator in the range -// `[first1, last1 - (last2 - first2))` such that for every non-negative integer -// `n` less than `last2 - first2` the condition -// `bool(invoke(pred, invoke(proj1, *(i + n)), invoke(proj2, *(first2 + n))))` -// is `true`. -// Returns `last1` if no such iterator exists. -// Note: std::ranges::search(I1 first1,...) returns a range, rather than an -// iterator. For simplicitly we match std::search's return type instead. -// -// Complexity: At most `(last1 - first1) * (last2 - first2)` applications of the -// corresponding predicate and projections. -// -// Reference: https://wg21.link/alg.search#:~:text=ranges::search(I1 -template < - typename ForwardIterator1, - typename ForwardIterator2, - typename Pred = ranges::equal_to, - typename Proj1 = std::identity, - typename Proj2 = std::identity, - typename = internal::iterator_category_t, - typename = internal::iterator_category_t, - typename = std::indirect_result_t, - std::projected>> -constexpr auto search(ForwardIterator1 first1, - ForwardIterator1 last1, - ForwardIterator2 first2, - ForwardIterator2 last2, - Pred pred = {}, - Proj1 proj1 = {}, - Proj2 proj2 = {}) { - return std::search(first1, last1, first2, last2, - internal::ProjectedBinaryPredicate(pred, proj1, proj2)); -} - -// Returns: `i`, where `i` is the first iterator in the range -// `[begin(range1), end(range1) - size(range2))` such that for every -// non-negative integer `n` less than `size(range2)` the condition -// `bool(invoke(pred, invoke(proj1, *(i + n)), -// invoke(proj2, *(begin(range2) + n))))` is `true`. -// Returns `end(range1)` if no such iterator exists. -// Note: std::ranges::search(R1&& r1,...) returns a range, rather than an -// iterator. For simplicitly we match std::search's return type instead. -// -// Complexity: At most `size(range1) * size(range2)` applications of the -// corresponding predicate and projections. -// -// Reference: https://wg21.link/alg.search#:~:text=ranges::search(R1 -template , - typename = internal::range_category_t, - typename = - std::indirect_result_t, Proj1>, - std::projected, Proj2>>> -constexpr auto search(Range1&& range1, - Range2&& range2, - Pred pred = {}, - Proj1 proj1 = {}, - Proj2 proj2 = {}) { - return ranges::search(std::ranges::begin(range1), std::ranges::end(range1), - std::ranges::begin(range2), std::ranges::end(range2), - std::move(pred), std::move(proj1), std::move(proj2)); -} - -// Mandates: The type `Size` is convertible to an integral type. -// -// Returns: `i` where `i` is the first iterator in the range -// `[first, last - count)` such that for every non-negative integer `n` less -// than `count`, the following condition holds: -// `invoke(pred, invoke(proj, *(i + n)), value)`. -// Returns `last` if no such iterator is found. -// Note: std::ranges::search_n(I1 first1,...) returns a range, rather than an -// iterator. For simplicitly we match std::search_n's return type instead. -// -// Complexity: At most `last - first` applications of the corresponding -// predicate and projection. -// -// Reference: https://wg21.link/alg.search#:~:text=ranges::search_n(I -template > -constexpr auto search_n(ForwardIterator first, - ForwardIterator last, - Size count, - const T& value, - Pred pred = {}, - Proj proj = {}) { - // The second arg is guaranteed to be `value`, so we'll simply apply the - // std::identity projection. - std::identity value_proj; - return std::search_n( - first, last, count, value, - internal::ProjectedBinaryPredicate(pred, proj, value_proj)); -} - -// Mandates: The type `Size` is convertible to an integral type. -// -// Returns: `i` where `i` is the first iterator in the range -// `[begin(range), end(range) - count)` such that for every non-negative integer -// `n` less than `count`, the following condition holds: -// `invoke(pred, invoke(proj, *(i + n)), value)`. -// Returns `end(arnge)` if no such iterator is found. -// Note: std::ranges::search_n(R1&& r1,...) returns a range, rather than an -// iterator. For simplicitly we match std::search_n's return type instead. -// -// Complexity: At most `size(range)` applications of the corresponding predicate -// and projection. -// -// Reference: https://wg21.link/alg.search#:~:text=ranges::search_n(R -template > -constexpr auto search_n(Range&& range, - Size count, - const T& value, - Pred pred = {}, - Proj proj = {}) { - return ranges::search_n(std::ranges::begin(range), std::ranges::end(range), - count, value, std::move(pred), std::move(proj)); -} - -// [alg.modifying.operations] Mutating sequence operations -// Reference: https://wg21.link/alg.modifying.operations - -// [alg.copy] Copy -// Reference: https://wg21.link/alg.copy - -// Let N be `last - first`. -// -// Preconditions: `result` is not in the range `[first, last)`. -// -// Effects: Copies elements in the range `[first, last)` into the range -// `[result, result + N)` starting from `first` and proceeding to `last`. For -// each non-negative integer `n < N` , performs `*(result + n) = *(first + n)`. -// -// Returns: `result + N` -// -// Complexity: Exactly `N` assignments. -// -// Reference: https://wg21.link/alg.copy#:~:text=ranges::copy(I -template , - typename = internal::iterator_category_t> -constexpr auto copy(InputIterator first, - InputIterator last, - OutputIterator result) { - return std::copy(first, last, result); -} - -// Let N be `size(range)`. -// -// Preconditions: `result` is not in `range`. -// -// Effects: Copies elements in `range` into the range `[result, result + N)` -// starting from `begin(range)` and proceeding to `end(range)`. For each -// non-negative integer `n < N` , performs -// *(result + n) = *(begin(range) + n)`. -// -// Returns: `result + N` -// -// Complexity: Exactly `N` assignments. -// -// Reference: https://wg21.link/alg.copy#:~:text=ranges::copy(R -template , - typename = internal::iterator_category_t> -constexpr auto copy(Range&& range, OutputIterator result) { - return ranges::copy(std::ranges::begin(range), std::ranges::end(range), - result); -} - -// Let `N` be `max(0, n)`. -// -// Mandates: The type `Size` is convertible to an integral type. -// -// Effects: For each non-negative integer `i < N`, performs -// `*(result + i) = *(first + i)`. -// -// Returns: `result + N` -// -// Complexity: Exactly `N` assignments. -// -// Reference: https://wg21.link/alg.copy#:~:text=ranges::copy_n -template , - typename = internal::iterator_category_t> -constexpr auto copy_n(InputIterator first, Size n, OutputIterator result) { - return std::copy_n(first, n, result); -} - -// Let `E(i)` be `bool(invoke(pred, invoke(proj, *i)))`, and `N` be the number -// of iterators `i` in the range `[first, last)` for which the condition `E(i)` -// holds. -// -// Preconditions: The ranges `[first, last)` and -// `[result, result + (last - first))` do not overlap. -// -// Effects: Copies all of the elements referred to by the iterator `i` in the -// range `[first, last)` for which `E(i)` is true. -// -// Returns: `result + N` -// -// Complexity: Exactly `last - first` applications of the corresponding -// predicate and any projection. -// -// Remarks: Stable. -// -// Reference: https://wg21.link/alg.copy#:~:text=ranges::copy_if(I -template , - typename = internal::iterator_category_t> -constexpr auto copy_if(InputIterator first, - InputIterator last, - OutputIterator result, - Pred pred, - Proj proj = {}) { - return std::copy_if(first, last, result, - internal::ProjectedUnaryPredicate(pred, proj)); -} - -// Let `E(i)` be `bool(invoke(pred, invoke(proj, *i)))`, and `N` be the number -// of iterators `i` in `range` for which the condition `E(i)` holds. -// -// Preconditions: `range` and `[result, result + size(range))` do not overlap. -// -// Effects: Copies all of the elements referred to by the iterator `i` in -// `range` for which `E(i)` is true. -// -// Returns: `result + N` -// -// Complexity: Exactly `size(range)` applications of the corresponding predicate -// and any projection. -// -// Remarks: Stable. -// -// Reference: https://wg21.link/alg.copy#:~:text=ranges::copy_if(R -template , - typename = internal::iterator_category_t> -constexpr auto copy_if(Range&& range, - OutputIterator result, - Pred pred, - Proj proj = {}) { - return ranges::copy_if(std::ranges::begin(range), std::ranges::end(range), - result, std::move(pred), std::move(proj)); -} - -// Let `N` be `last - first`. -// -// Preconditions: `result` is not in the range `(first, last]`. -// -// Effects: Copies elements in the range `[first, last)` into the range -// `[result - N, result)` starting from `last - 1` and proceeding to `first`. -// For each positive integer `n ≤ N`, performs `*(result - n) = *(last - n)`. -// -// Returns: `result - N` -// -// Complexity: Exactly `N` assignments. -// -// Reference: https://wg21.link/alg.copy#:~:text=ranges::copy_backward(I1 -template , - typename = internal::iterator_category_t> -constexpr auto copy_backward(BidirectionalIterator1 first, - BidirectionalIterator1 last, - BidirectionalIterator2 result) { - return std::copy_backward(first, last, result); -} - -// Let `N` be `size(range)`. -// -// Preconditions: `result` is not in the range `(begin(range), end(range)]`. -// -// Effects: Copies elements in `range` into the range `[result - N, result)` -// starting from `end(range) - 1` and proceeding to `begin(range)`. For each -// positive integer `n ≤ N`, performs `*(result - n) = *(end(range) - n)`. -// -// Returns: `result - N` -// -// Complexity: Exactly `N` assignments. -// -// Reference: https://wg21.link/alg.copy#:~:text=ranges::copy_backward(R -template , - typename = internal::iterator_category_t> -constexpr auto copy_backward(Range&& range, BidirectionalIterator result) { - return ranges::copy_backward(std::ranges::begin(range), - std::ranges::end(range), result); -} - -// [alg.move] Move -// Reference: https://wg21.link/alg.move - -// Let `E(n)` be `std::move(*(first + n))`. -// -// Let `N` be `last - first`. -// -// Preconditions: `result` is not in the range `[first, last)`. -// -// Effects: Moves elements in the range `[first, last)` into the range `[result, -// result + N)` starting from `first` and proceeding to `last`. For each -// non-negative integer `n < N`, performs `*(result + n) = E(n)`. -// -// Returns: `result + N` -// -// Complexity: Exactly `N` assignments. -// -// Reference: https://wg21.link/alg.move#:~:text=ranges::move(I -template , - typename = internal::iterator_category_t> -constexpr auto move(InputIterator first, - InputIterator last, - OutputIterator result) { - return std::move(first, last, result); -} - -// Let `E(n)` be `std::move(*(begin(range) + n))`. -// -// Let `N` be `size(range)`. -// -// Preconditions: `result` is not in `range`. -// -// Effects: Moves elements in `range` into the range `[result, result + N)` -// starting from `begin(range)` and proceeding to `end(range)`. For each -// non-negative integer `n < N`, performs `*(result + n) = E(n)`. -// -// Returns: `result + N` -// -// Complexity: Exactly `N` assignments. -// -// Reference: https://wg21.link/alg.move#:~:text=ranges::move(R -template , - typename = internal::iterator_category_t> -constexpr auto move(Range&& range, OutputIterator result) { - return ranges::move(std::ranges::begin(range), std::ranges::end(range), - result); -} - -// Let `E(n)` be `std::move(*(last - n))`. -// -// Let `N` be `last - first`. -// -// Preconditions: `result` is not in the range `(first, last]`. -// -// Effects: Moves elements in the range `[first, last)` into the range -// `[result - N, result)` starting from `last - 1` and proceeding to `first`. -// For each positive integer `n ≤ N`, performs `*(result - n) = E(n)`. -// -// Returns: `result - N` -// -// Complexity: Exactly `N` assignments. -// -// Reference: https://wg21.link/alg.move#:~:text=ranges::move_backward(I1 -template , - typename = internal::iterator_category_t> -constexpr auto move_backward(BidirectionalIterator1 first, - BidirectionalIterator1 last, - BidirectionalIterator2 result) { - return std::move_backward(first, last, result); -} - -// Let `E(n)` be `std::move(*(end(range) - n))`. -// -// Let `N` be `size(range)`. -// -// Preconditions: `result` is not in the range `(begin(range), end(range)]`. -// -// Effects: Moves elements in `range` into the range `[result - N, result)` -// starting from `end(range) - 1` and proceeding to `begin(range)`. For each -// positive integer `n ≤ N`, performs `*(result - n) = E(n)`. -// -// Returns: `result - N` -// -// Complexity: Exactly `N` assignments. -// -// Reference: https://wg21.link/alg.move#:~:text=ranges::move_backward(R -template , - typename = internal::iterator_category_t> -constexpr auto move_backward(Range&& range, BidirectionalIterator result) { - return ranges::move_backward(std::ranges::begin(range), - std::ranges::end(range), result); -} - -// [alg.swap] Swap -// Reference: https://wg21.link/alg.swap - -// Let `M` be `min(last1 - first1, last2 - first2)`. -// -// Preconditions: The two ranges `[first1, last1)` and `[first2, last2)` do not -// overlap. `*(first1 + n)` is swappable with `*(first2 + n)`. -// -// Effects: For each non-negative integer `n < M` performs -// `swap(*(first1 + n), *(first2 + n))` -// -// Returns: `first2 + M` -// -// Complexity: Exactly `M` swaps. -// -// Reference: https://wg21.link/alg.swap#:~:text=ranges::swap_ranges(I1 -template , - typename = internal::iterator_category_t> -constexpr auto swap_ranges(ForwardIterator1 first1, - ForwardIterator1 last1, - ForwardIterator2 first2, - ForwardIterator2 last2) { - // std::swap_ranges does not have a `last2` overload. Thus we need to - // adjust `last1` to ensure to not read past `last2`. - last1 = std::next(first1, std::min(std::distance(first1, last1), - std::distance(first2, last2))); - return std::swap_ranges(first1, last1, first2); -} - -// Let `M` be `min(size(range1), size(range2))`. -// -// Preconditions: The two ranges `range1` and `range2` do not overlap. -// `*(begin(range1) + n)` is swappable with `*(begin(range2) + n)`. -// -// Effects: For each non-negative integer `n < M` performs -// `swap(*(begin(range1) + n), *(begin(range2) + n))` -// -// Returns: `begin(range2) + M` -// -// Complexity: Exactly `M` swaps. -// -// Reference: https://wg21.link/alg.swap#:~:text=ranges::swap_ranges(R1 -template , - typename = internal::range_category_t> -constexpr auto swap_ranges(Range1&& range1, Range2&& range2) { - return ranges::swap_ranges( - std::ranges::begin(range1), std::ranges::end(range1), - std::ranges::begin(range2), std::ranges::end(range2)); -} - -// [alg.transform] Transform -// Reference: https://wg21.link/alg.transform - -// Let `N` be `last1 - first1`, -// `E(i)` be `invoke(op, invoke(proj, *(first1 + (i - result))))`. -// -// Preconditions: `op` does not invalidate iterators or subranges, nor modify -// elements in the ranges `[first1, first1 + N]`, and `[result, result + N]`. -// -// Effects: Assigns through every iterator `i` in the range -// `[result, result + N)` a new corresponding value equal to `E(i)`. -// -// Returns: `result + N` -// -// Complexity: Exactly `N` applications of `op` and any projections. -// -// Remarks: result may be equal to `first1`. -// -// Reference: https://wg21.link/alg.transform#:~:text=ranges::transform(I -template < - typename InputIterator, - typename OutputIterator, - typename UnaryOperation, - typename Proj = std::identity, - typename = internal::iterator_category_t, - typename = internal::iterator_category_t, - typename = std::indirect_result_t>> -constexpr auto transform(InputIterator first1, - InputIterator last1, - OutputIterator result, - UnaryOperation op, - Proj proj = {}) { - return std::transform(first1, last1, result, [&op, &proj](auto&& arg) { - return std::invoke(op, std::invoke(proj, std::forward(arg))); - }); -} - -// Let `N` be `size(range)`, -// `E(i)` be `invoke(op, invoke(proj, *(begin(range) + (i - result))))`. -// -// Preconditions: `op` does not invalidate iterators or subranges, nor modify -// elements in the ranges `[begin(range), end(range)]`, and -// `[result, result + N]`. -// -// Effects: Assigns through every iterator `i` in the range -// `[result, result + N)` a new corresponding value equal to `E(i)`. -// -// Returns: `result + N` -// -// Complexity: Exactly `N` applications of `op` and any projections. -// -// Remarks: result may be equal to `begin(range)`. -// -// Reference: https://wg21.link/alg.transform#:~:text=ranges::transform(R -template < - typename Range, - typename OutputIterator, - typename UnaryOperation, - typename Proj = std::identity, - typename = internal::range_category_t, - typename = internal::iterator_category_t, - typename = std::indirect_result_t, Proj>>> -constexpr auto transform(Range&& range, - OutputIterator result, - UnaryOperation op, - Proj proj = {}) { - return ranges::transform(std::ranges::begin(range), std::ranges::end(range), - result, std::move(op), std::move(proj)); -} - -// Let: -// `N` be `min(last1 - first1, last2 - first2)`, -// `E(i)` be `invoke(binary_op, invoke(proj1, *(first1 + (i - result))), -// invoke(proj2, *(first2 + (i - result))))`. -// -// Preconditions: `binary_op` does not invalidate iterators or subranges, nor -// modify elements in the ranges `[first1, first1 + N]`, `[first2, first2 + N]`, -// and `[result, result + N]`. -// -// Effects: Assigns through every iterator `i` in the range -// `[result, result + N)` a new corresponding value equal to `E(i)`. -// -// Returns: `result + N` -// -// Complexity: Exactly `N` applications of `binary_op`, and any projections. -// -// Remarks: `result` may be equal to `first1` or `first2`. -// -// Reference: https://wg21.link/alg.transform#:~:text=ranges::transform(I1 -template < - typename ForwardIterator1, - typename ForwardIterator2, - typename OutputIterator, - typename BinaryOperation, - typename Proj1 = std::identity, - typename Proj2 = std::identity, - typename = internal::iterator_category_t, - typename = internal::iterator_category_t, - typename = internal::iterator_category_t, - typename = std::indirect_result_t, - std::projected>> -constexpr auto transform(ForwardIterator1 first1, - ForwardIterator1 last1, - ForwardIterator2 first2, - ForwardIterator2 last2, - OutputIterator result, - BinaryOperation binary_op, - Proj1 proj1 = {}, - Proj2 proj2 = {}) { - // std::transform does not have a `last2` overload. Thus we need to adjust - // `last1` to ensure to not read past `last2`. - last1 = std::next(first1, std::min(std::distance(first1, last1), - std::distance(first2, last2))); - return std::transform( - first1, last1, first2, result, - [&binary_op, &proj1, &proj2](auto&& lhs, auto&& rhs) { - return std::invoke( - binary_op, std::invoke(proj1, std::forward(lhs)), - std::invoke(proj2, std::forward(rhs))); - }); -} - -// Let: -// `N` be `min(size(range1), size(range2)`, -// `E(i)` be `invoke(binary_op, invoke(proj1, *(begin(range1) + (i - result))), -// invoke(proj2, *(begin(range2) + (i - result))))` -// -// Preconditions: `binary_op` does not invalidate iterators or subranges, nor -// modify elements in the ranges `[begin(range1), end(range1)]`, -// `[begin(range2), end(range2)]`, and `[result, result + N]`. -// -// Effects: Assigns through every iterator `i` in the range -// `[result, result + N)` a new corresponding value equal to `E(i)`. -// -// Returns: `result + N` -// -// Complexity: Exactly `N` applications of `binary_op`, and any projections. -// -// Remarks: `result` may be equal to `begin(range1)` or `begin(range2)`. -// -// Reference: https://wg21.link/alg.transform#:~:text=ranges::transform(R1 -template , - typename = internal::range_category_t, - typename = internal::iterator_category_t, - typename = - std::indirect_result_t, Proj1>, - std::projected, Proj2>>> -constexpr auto transform(Range1&& range1, - Range2&& range2, - OutputIterator result, - BinaryOperation binary_op, - Proj1 proj1 = {}, - Proj2 proj2 = {}) { - return ranges::transform(std::ranges::begin(range1), std::ranges::end(range1), - std::ranges::begin(range2), std::ranges::end(range2), - result, std::move(binary_op), std::move(proj1), - std::move(proj2)); -} - -// [alg.replace] Replace -// Reference: https://wg21.link/alg.replace - -// Let `E(i)` be `bool(invoke(proj, *i) == old_value)`. -// -// Mandates: `new_value` is writable to `first`. -// -// Effects: Substitutes elements referred by the iterator `i` in the range -// `[first, last)` with `new_value`, when `E(i)` is true. -// -// Returns: `last` -// -// Complexity: Exactly `last - first` applications of the corresponding -// predicate and any projection. -// -// Reference: https://wg21.link/alg.replace#:~:text=ranges::replace(I -template > -constexpr auto replace(ForwardIterator first, - ForwardIterator last, - const T& old_value, - const T& new_value, - Proj proj = {}) { - // Note: In order to be able to apply `proj` to each element in [first, last) - // we are dispatching to std::replace_if instead of std::replace. - std::replace_if( - first, last, - [&proj, &old_value](auto&& lhs) { - return std::invoke(proj, std::forward(lhs)) == old_value; - }, - new_value); - return last; -} - -// Let `E(i)` be `bool(invoke(proj, *i) == old_value)`. -// -// Mandates: `new_value` is writable to `begin(range)`. -// -// Effects: Substitutes elements referred by the iterator `i` in `range` with -// `new_value`, when `E(i)` is true. -// -// Returns: `end(range)` -// -// Complexity: Exactly `size(range)` applications of the corresponding predicate -// and any projection. -// -// Reference: https://wg21.link/alg.replace#:~:text=ranges::replace(R -template > -constexpr auto replace(Range&& range, - const T& old_value, - const T& new_value, - Proj proj = {}) { - return ranges::replace(std::ranges::begin(range), std::ranges::end(range), - old_value, new_value, std::move(proj)); -} - -// Let `E(i)` be `bool(invoke(pred, invoke(proj, *i)))`. -// -// Mandates: `new_value` is writable to `first`. -// -// Effects: Substitutes elements referred by the iterator `i` in the range -// `[first, last)` with `new_value`, when `E(i)` is true. -// -// Returns: `last` -// -// Complexity: Exactly `last - first` applications of the corresponding -// predicate and any projection. -// -// Reference: https://wg21.link/alg.replace#:~:text=ranges::replace_if(I -template > -constexpr auto replace_if(ForwardIterator first, - ForwardIterator last, - Predicate pred, - const T& new_value, - Proj proj = {}) { - std::replace_if(first, last, internal::ProjectedUnaryPredicate(pred, proj), - new_value); - return last; -} - -// Let `E(i)` be `bool(invoke(pred, invoke(proj, *i)))`. -// -// Mandates: `new_value` is writable to `begin(range)`. -// -// Effects: Substitutes elements referred by the iterator `i` in `range` with -// `new_value`, when `E(i)` is true. -// -// Returns: `end(range)` -// -// Complexity: Exactly `size(range)` applications of the corresponding predicate -// and any projection. -// -// Reference: https://wg21.link/alg.replace#:~:text=ranges::replace_if(R -template > -constexpr auto replace_if(Range&& range, - Predicate pred, - const T& new_value, - Proj proj = {}) { - return ranges::replace_if(std::ranges::begin(range), std::ranges::end(range), - std::move(pred), new_value, std::move(proj)); -} - -// Let `E(i)` be `bool(invoke(proj, *(first + (i - result))) == old_value)`. -// -// Mandates: The results of the expressions `*first` and `new_value` are -// writable to `result`. -// -// Preconditions: The ranges `[first, last)` and `[result, result + (last - -// first))` do not overlap. -// -// Effects: Assigns through every iterator `i` in the range `[result, result + -// (last - first))` a new corresponding value, `new_value` if `E(i)` is true, or -// `*(first + (i - result))` otherwise. -// -// Returns: `result + (last - first)`. -// -// Complexity: Exactly `last - first` applications of the corresponding -// predicate and any projection. -// -// Reference: https://wg21.link/alg.replace#:~:text=ranges::replace_copy(I -template , - typename = internal::iterator_category_t> -constexpr auto replace_copy(InputIterator first, - InputIterator last, - OutputIterator result, - const T& old_value, - const T& new_value, - Proj proj = {}) { - // Note: In order to be able to apply `proj` to each element in [first, last) - // we are dispatching to std::replace_copy_if instead of std::replace_copy. - std::replace_copy_if( - first, last, result, - [&proj, &old_value](auto&& lhs) { - return std::invoke(proj, std::forward(lhs)) == old_value; - }, - new_value); - return last; -} - -// Let `E(i)` be -// `bool(invoke(proj, *(begin(range) + (i - result))) == old_value)`. -// -// Mandates: The results of the expressions `*begin(range)` and `new_value` are -// writable to `result`. -// -// Preconditions: The ranges `range` and `[result, result + size(range))` do not -// overlap. -// -// Effects: Assigns through every iterator `i` in the range `[result, result + -// size(range))` a new corresponding value, `new_value` if `E(i)` is true, or -// `*(begin(range) + (i - result))` otherwise. -// -// Returns: `result + size(range)`. -// -// Complexity: Exactly `size(range)` applications of the corresponding -// predicate and any projection. -// -// Reference: https://wg21.link/alg.replace#:~:text=ranges::replace_copy(R -template , - typename = internal::iterator_category_t> -constexpr auto replace_copy(Range&& range, - OutputIterator result, - const T& old_value, - const T& new_value, - Proj proj = {}) { - return ranges::replace_copy(std::ranges::begin(range), - std::ranges::end(range), result, old_value, - new_value, std::move(proj)); -} - -// Let `E(i)` be `bool(invoke(pred, invoke(proj, *(first + (i - result)))))`. -// -// Mandates: The results of the expressions `*first` and `new_value` are -// writable to `result`. -// -// Preconditions: The ranges `[first, last)` and `[result, result + (last - -// first))` do not overlap. -// -// Effects: Assigns through every iterator `i` in the range `[result, result + -// (last - first))` a new corresponding value, `new_value` if `E(i)` is true, or -// `*(first + (i - result))` otherwise. -// -// Returns: `result + (last - first)`. -// -// Complexity: Exactly `last - first` applications of the corresponding -// predicate and any projection. -// -// Reference: https://wg21.link/alg.replace#:~:text=ranges::replace_copy_if(I -template , - typename = internal::iterator_category_t> -constexpr auto replace_copy_if(InputIterator first, - InputIterator last, - OutputIterator result, - Predicate pred, - const T& new_value, - Proj proj = {}) { - return std::replace_copy_if(first, last, result, - internal::ProjectedUnaryPredicate(pred, proj), - new_value); -} - -// Let `E(i)` be -// `bool(invoke(pred, invoke(proj, *(begin(range) + (i - result)))))`. -// -// Mandates: The results of the expressions `*begin(range)` and `new_value` are -// writable to `result`. -// -// Preconditions: The ranges `range` and `[result, result + size(range))` do not -// overlap. -// -// Effects: Assigns through every iterator `i` in the range `[result, result + -// size(range))` a new corresponding value, `new_value` if `E(i)` is true, or -// `*(begin(range) + (i - result))` otherwise. -// -// Returns: `result + size(range)`. -// -// Complexity: Exactly `size(range)` applications of the corresponding -// predicate and any projection. -// -// Reference: https://wg21.link/alg.replace#:~:text=ranges::replace_copy_if(R -template , - typename = internal::iterator_category_t> -constexpr auto replace_copy_if(Range&& range, - OutputIterator result, - Predicate pred, - const T& new_value, - Proj proj = {}) { - return ranges::replace_copy_if(std::ranges::begin(range), - std::ranges::end(range), result, pred, - new_value, std::move(proj)); -} - -// [alg.fill] Fill -// Reference: https://wg21.link/alg.fill - -// Let `N` be `last - first`. -// -// Mandates: The expression `value` is writable to the output iterator. -// -// Effects: Assigns `value` through all the iterators in the range -// `[first, last)`. -// -// Returns: `last`. -// -// Complexity: Exactly `N` assignments. -// -// Reference: https://wg21.link/alg.fill#:~:text=ranges::fill(O -template > -constexpr auto fill(OutputIterator first, OutputIterator last, const T& value) { - std::fill(first, last, value); - return last; -} - -// Let `N` be `size(range)`. -// -// Mandates: The expression `value` is writable to the output iterator. -// -// Effects: Assigns `value` through all the iterators in `range`. -// -// Returns: `end(range)`. -// -// Complexity: Exactly `N` assignments. -// -// Reference: https://wg21.link/alg.fill#:~:text=ranges::fill(R -template > -constexpr auto fill(Range&& range, const T& value) { - return ranges::fill(std::ranges::begin(range), std::ranges::end(range), - value); -} - -// Let `N` be `max(0, n)`. -// -// Mandates: The expression `value` is writable to the output iterator. -// The type `Size` is convertible to an integral type. -// -// Effects: Assigns `value` through all the iterators in `[first, first + N)`. -// -// Returns: `first + N`. -// -// Complexity: Exactly `N` assignments. -// -// Reference: https://wg21.link/alg.fill#:~:text=ranges::fill_n(O -template > -constexpr auto fill_n(OutputIterator first, Size n, const T& value) { - return std::fill_n(first, n, value); -} - -// [alg.generate] Generate -// Reference: https://wg21.link/alg.generate - -// Let `N` be `last - first`. -// -// Effects: Assigns the result of successive evaluations of gen() through each -// iterator in the range `[first, last)`. -// -// Returns: `last`. -// -// Complexity: Exactly `N` evaluations of `gen()` and assignments. -// -// Reference: https://wg21.link/alg.generate#:~:text=ranges::generate(O -template > -constexpr auto generate(OutputIterator first, - OutputIterator last, - Generator gen) { - std::generate(first, last, std::move(gen)); - return last; -} - -// Let `N` be `size(range)`. -// -// Effects: Assigns the result of successive evaluations of gen() through each -// iterator in `range`. -// -// Returns: `end(range)`. -// -// Complexity: Exactly `N` evaluations of `gen()` and assignments. -// -// Reference: https://wg21.link/alg.generate#:~:text=ranges::generate(R -template > -constexpr auto generate(Range&& range, Generator gen) { - return ranges::generate(std::ranges::begin(range), std::ranges::end(range), - std::move(gen)); -} - -// Let `N` be `max(0, n)`. -// -// Mandates: `Size` is convertible to an integral type. -// -// Effects: Assigns the result of successive evaluations of gen() through each -// iterator in the range `[first, first + N)`. -// -// Returns: `first + N`. -// -// Complexity: Exactly `N` evaluations of `gen()` and assignments. -// -// Reference: https://wg21.link/alg.generate#:~:text=ranges::generate_n(O -template > -constexpr auto generate_n(OutputIterator first, Size n, Generator gen) { - return std::generate_n(first, n, std::move(gen)); -} - -// [alg.remove] Remove -// Reference: https://wg21.link/alg.remove - -// Let `E(i)` be `bool(invoke(proj, *i) == value)`. -// -// Effects: Eliminates all the elements referred to by iterator `i` in the range -// `[first, last)` for which `E(i)` holds. -// -// Returns: The end of the resulting range. -// -// Remarks: Stable. -// -// Complexity: Exactly `last - first` applications of the corresponding -// predicate and any projection. -// -// Reference: https://wg21.link/alg.remove#:~:text=ranges::remove(I -template > -constexpr auto remove(ForwardIterator first, - ForwardIterator last, - const T& value, - Proj proj = {}) { - // Note: In order to be able to apply `proj` to each element in [first, last) - // we are dispatching to std::remove_if instead of std::remove. - return std::remove_if(first, last, [&proj, &value](auto&& lhs) { - return std::invoke(proj, std::forward(lhs)) == value; - }); -} - -// Let `E(i)` be `bool(invoke(proj, *i) == value)`. -// -// Effects: Eliminates all the elements referred to by iterator `i` in `range` -// for which `E(i)` holds. -// -// Returns: The end of the resulting range. -// -// Remarks: Stable. -// -// Complexity: Exactly `size(range)` applications of the corresponding predicate -// and any projection. -// -// Reference: https://wg21.link/alg.remove#:~:text=ranges::remove(R -template > -constexpr auto remove(Range&& range, const T& value, Proj proj = {}) { - return ranges::remove(std::ranges::begin(range), std::ranges::end(range), - value, std::move(proj)); -} - -// Let `E(i)` be `bool(invoke(pred, invoke(proj, *i)))`. -// -// Effects: Eliminates all the elements referred to by iterator `i` in the range -// `[first, last)` for which `E(i)` holds. -// -// Returns: The end of the resulting range. -// -// Remarks: Stable. -// -// Complexity: Exactly `last - first` applications of the corresponding -// predicate and any projection. -// -// Reference: https://wg21.link/alg.remove#:~:text=ranges::remove_if(I -template > -constexpr auto remove_if(ForwardIterator first, - ForwardIterator last, - Predicate pred, - Proj proj = {}) { - return std::remove_if(first, last, - internal::ProjectedUnaryPredicate(pred, proj)); -} - -// Let `E(i)` be `bool(invoke(pred, invoke(proj, *i)))`. -// -// Effects: Eliminates all the elements referred to by iterator `i` in `range`. -// -// Returns: The end of the resulting range. -// -// Remarks: Stable. -// -// Complexity: Exactly `size(range)` applications of the corresponding predicate -// and any projection. -// -// Reference: https://wg21.link/alg.remove#:~:text=ranges::remove_if(R -template > -constexpr auto remove_if(Range&& range, Predicate pred, Proj proj = {}) { - return ranges::remove_if(std::ranges::begin(range), std::ranges::end(range), - std::move(pred), std::move(proj)); -} - -// Let `E(i)` be `bool(invoke(proj, *i) == value)`. -// -// Let `N` be the number of elements in `[first, last)` for which `E(i)` is -// false. -// -// Mandates: `*first` is writable to `result`. -// -// Preconditions: The ranges `[first, last)` and `[result, result + (last - -// first))` do not overlap. -// -// Effects: Copies all the elements referred to by the iterator `i` in the range -// `[first, last)` for which `E(i)` is false. -// -// Returns: `result + N`. -// -// Complexity: Exactly `last - first` applications of the corresponding -// predicate and any projection. -// -// Remarks: Stable. -// -// Reference: https://wg21.link/alg.remove#:~:text=ranges::remove_copy(I -template , - typename = internal::iterator_category_t> -constexpr auto remove_copy(InputIterator first, - InputIterator last, - OutputIterator result, - const T& value, - Proj proj = {}) { - // Note: In order to be able to apply `proj` to each element in [first, last) - // we are dispatching to std::remove_copy_if instead of std::remove_copy. - return std::remove_copy_if(first, last, result, [&proj, &value](auto&& lhs) { - return std::invoke(proj, std::forward(lhs)) == value; - }); -} - -// Let `E(i)` be `bool(invoke(proj, *i) == value)`. -// -// Let `N` be the number of elements in `range` for which `E(i)` is false. -// -// Mandates: `*begin(range)` is writable to `result`. -// -// Preconditions: The ranges `range` and `[result, result + size(range))` do not -// overlap. -// -// Effects: Copies all the elements referred to by the iterator `i` in `range` -// for which `E(i)` is false. -// -// Returns: `result + N`. -// -// Complexity: Exactly `size(range)` applications of the corresponding -// predicate and any projection. -// -// Remarks: Stable. -// -// Reference: https://wg21.link/alg.remove#:~:text=ranges::remove_copy(R -template , - typename = internal::iterator_category_t> -constexpr auto remove_copy(Range&& range, - OutputIterator result, - const T& value, - Proj proj = {}) { - return ranges::remove_copy(std::ranges::begin(range), std::ranges::end(range), - result, value, std::move(proj)); -} - -// Let `E(i)` be `bool(invoke(pred, invoke(proj, *i)))`. -// -// Let `N` be the number of elements in `[first, last)` for which `E(i)` is -// false. -// -// Mandates: `*first` is writable to `result`. -// -// Preconditions: The ranges `[first, last)` and `[result, result + (last - -// first))` do not overlap. -// -// Effects: Copies all the elements referred to by the iterator `i` in the range -// `[first, last)` for which `E(i)` is false. -// -// Returns: `result + N`. -// -// Complexity: Exactly `last - first` applications of the corresponding -// predicate and any projection. -// -// Remarks: Stable. -// -// Reference: https://wg21.link/alg.remove#:~:text=ranges::remove_copy_if(I -template , - typename = internal::iterator_category_t> -constexpr auto remove_copy_if(InputIterator first, - InputIterator last, - OutputIterator result, - Pred pred, - Proj proj = {}) { - return std::remove_copy_if(first, last, result, - internal::ProjectedUnaryPredicate(pred, proj)); -} - -// Let `E(i)` be `bool(invoke(pred, invoke(proj, *i)))`. -// -// Let `N` be the number of elements in `range` for which `E(i)` is false. -// -// Mandates: `*begin(range)` is writable to `result`. -// -// Preconditions: The ranges `range` and `[result, result + size(range))` do not -// overlap. -// -// Effects: Copies all the elements referred to by the iterator `i` in `range` -// for which `E(i)` is false. -// -// Returns: `result + N`. -// -// Complexity: Exactly `size(range)` applications of the corresponding -// predicate and any projection. -// -// Remarks: Stable. -// -// Reference: https://wg21.link/alg.remove#:~:text=ranges::remove_copy(R -template , - typename = internal::iterator_category_t> -constexpr auto remove_copy_if(Range&& range, - OutputIterator result, - Pred pred, - Proj proj = {}) { - return ranges::remove_copy_if(std::ranges::begin(range), - std::ranges::end(range), result, - std::move(pred), std::move(proj)); -} - -// [alg.unique] Unique -// Reference: https://wg21.link/alg.unique - -// Let `E(i)` be `bool(invoke(comp, invoke(proj, *(i - 1)), invoke(proj, *i)))`. -// -// Effects: For a nonempty range, eliminates all but the first element from -// every consecutive group of equivalent elements referred to by the iterator -// `i` in the range `[first + 1, last)` for which `E(i)` is true. -// -// Returns: The end of the resulting range. -// -// Complexity: For nonempty ranges, exactly `(last - first) - 1` applications of -// the corresponding predicate and no more than twice as many applications of -// any projection. -// -// Reference: https://wg21.link/alg.unique#:~:text=ranges::unique(I -template < - typename ForwardIterator, - typename Comp = ranges::equal_to, - typename Proj = std::identity, - typename = internal::iterator_category_t, - typename = std::indirect_result_t, - std::projected>> -constexpr auto unique(ForwardIterator first, - ForwardIterator last, - Comp comp = {}, - Proj proj = {}) { - return std::unique(first, last, - internal::ProjectedBinaryPredicate(comp, proj, proj)); -} - -// Let `E(i)` be `bool(invoke(comp, invoke(proj, *(i - 1)), invoke(proj, *i)))`. -// -// Effects: For a nonempty range, eliminates all but the first element from -// every consecutive group of equivalent elements referred to by the iterator -// `i` in the range `[begin(range) + 1, end(range))` for which `E(i)` is true. -// -// Returns: The end of the resulting range. -// -// Complexity: For nonempty ranges, exactly `size(range) - 1` applications of -// the corresponding predicate and no more than twice as many applications of -// any projection. -// -// Reference: https://wg21.link/alg.unique#:~:text=ranges::unique(R -template < - typename Range, - typename Comp = ranges::equal_to, - typename Proj = std::identity, - typename = internal::range_category_t, - typename = std::indirect_result_t, Proj>, - std::projected, Proj>>> -constexpr auto unique(Range&& range, Comp comp = {}, Proj proj = {}) { - return ranges::unique(std::ranges::begin(range), std::ranges::end(range), - std::move(comp), std::move(proj)); -} - -// Let `E(i)` be `bool(invoke(comp, invoke(proj, *i), invoke(proj, *(i - 1))))`. -// -// Mandates: `*first` is writable to `result`. -// -// Preconditions: The ranges `[first, last)` and -// `[result, result + (last - first))` do not overlap. -// -// Effects: Copies only the first element from every consecutive group of equal -// elements referred to by the iterator `i` in the range `[first, last)` for -// which `E(i)` holds. -// -// Returns: `result + N`. -// -// Complexity: Exactly `last - first - 1` applications of the corresponding -// predicate and no more than twice as many applications of any projection. -// -// Reference: https://wg21.link/alg.unique#:~:text=ranges::unique_copy(I -template , - typename = internal::iterator_category_t> -constexpr auto unique_copy(ForwardIterator first, - ForwardIterator last, - OutputIterator result, - Comp comp = {}, - Proj proj = {}) { - return std::unique_copy(first, last, result, - internal::ProjectedBinaryPredicate(comp, proj, proj)); -} - -// Let `E(i)` be `bool(invoke(comp, invoke(proj, *i), invoke(proj, *(i - 1))))`. -// -// Mandates: `*begin(range)` is writable to `result`. -// -// Preconditions: The ranges `range` and `[result, result + size(range))` do not -// overlap. -// -// Effects: Copies only the first element from every consecutive group of equal -// elements referred to by the iterator `i` in `range` for which `E(i)` holds. -// -// Returns: `result + N`. -// -// Complexity: Exactly `size(range) - 1` applications of the corresponding -// predicate and no more than twice as many applications of any projection. -// -// Reference: https://wg21.link/alg.unique#:~:text=ranges::unique_copy(R -template , - typename = internal::iterator_category_t> -constexpr auto unique_copy(Range&& range, - OutputIterator result, - Comp comp = {}, - Proj proj = {}) { - return ranges::unique_copy(std::ranges::begin(range), std::ranges::end(range), - result, std::move(comp), std::move(proj)); -} - -// [alg.reverse] Reverse -// Reference: https://wg21.link/alg.reverse - -// Effects: For each non-negative integer `i < (last - first) / 2`, applies -// `std::iter_swap` to all pairs of iterators `first + i, (last - i) - 1`. -// -// Returns: `last`. -// -// Complexity: Exactly `(last - first)/2` swaps. -// -// Reference: https://wg21.link/alg.reverse#:~:text=ranges::reverse(I -template > -constexpr auto reverse(BidirectionalIterator first, - BidirectionalIterator last) { - std::reverse(first, last); - return last; -} - -// Effects: For each non-negative integer `i < size(range) / 2`, applies -// `std::iter_swap` to all pairs of iterators -// `begin(range) + i, (end(range) - i) - 1`. -// -// Returns: `end(range)`. -// -// Complexity: Exactly `size(range)/2` swaps. -// -// Reference: https://wg21.link/alg.reverse#:~:text=ranges::reverse(R -template > -constexpr auto reverse(Range&& range) { - return ranges::reverse(std::ranges::begin(range), std::ranges::end(range)); -} - -// Let `N` be `last - first`. -// -// Preconditions: The ranges `[first, last)` and `[result, result + N)` do not -// overlap. -// -// Effects: Copies the range `[first, last)` to the range `[result, result + N)` -// such that for every non-negative integer `i < N` the following assignment -// takes place: `*(result + N - 1 - i) = *(first + i)`. -// -// Returns: `result + N`. -// -// Complexity: Exactly `N` assignments. -// -// Reference: https://wg21.link/alg.reverse#:~:text=ranges::reverse_copy(I -template , - typename = internal::iterator_category_t> -constexpr auto reverse_copy(BidirectionalIterator first, - BidirectionalIterator last, - OutputIterator result) { - return std::reverse_copy(first, last, result); -} - -// Let `N` be `size(range)`. -// -// Preconditions: The ranges `range` and `[result, result + N)` do not -// overlap. -// -// Effects: Copies `range` to the range `[result, result + N)` such that for -// every non-negative integer `i < N` the following assignment takes place: -// `*(result + N - 1 - i) = *(begin(range) + i)`. -// -// Returns: `result + N`. -// -// Complexity: Exactly `N` assignments. -// -// Reference: https://wg21.link/alg.reverse#:~:text=ranges::reverse_copy(R -template , - typename = internal::iterator_category_t> -constexpr auto reverse_copy(Range&& range, OutputIterator result) { - return ranges::reverse_copy(std::ranges::begin(range), - std::ranges::end(range), result); -} - -// [alg.rotate] Rotate -// Reference: https://wg21.link/alg.rotate - -// Preconditions: `[first, middle)` and `[middle, last)` are valid ranges. -// -// Effects: For each non-negative integer `i < (last - first)`, places the -// element from the position `first + i` into position -// `first + (i + (last - middle)) % (last - first)`. -// -// Returns: `first + (last - middle)`. -// -// Complexity: At most `last - first` swaps. -// -// Reference: https://wg21.link/alg.rotate#:~:text=ranges::rotate(I -template > -constexpr auto rotate(ForwardIterator first, - ForwardIterator middle, - ForwardIterator last) { - return std::rotate(first, middle, last); -} - -// Preconditions: `[begin(range), middle)` and `[middle, end(range))` are valid -// ranges. -// -// Effects: For each non-negative integer `i < size(range)`, places the element -// from the position `begin(range) + i` into position -// `begin(range) + (i + (end(range) - middle)) % size(range)`. -// -// Returns: `begin(range) + (end(range) - middle)`. -// -// Complexity: At most `size(range)` swaps. -// -// Reference: https://wg21.link/alg.rotate#:~:text=ranges::rotate(R -template > -constexpr auto rotate(Range&& range, iterator_t middle) { - return ranges::rotate(std::ranges::begin(range), middle, - std::ranges::end(range)); -} - -// Let `N` be `last - first`. -// -// Preconditions: `[first, middle)` and `[middle, last)` are valid ranges. The -// ranges `[first, last)` and `[result, result + N)` do not overlap. -// -// Effects: Copies the range `[first, last)` to the range `[result, result + N)` -// such that for each non-negative integer `i < N` the following assignment -// takes place: `*(result + i) = *(first + (i + (middle - first)) % N)`. -// -// Returns: `result + N`. -// -// Complexity: Exactly `N` assignments. -// -// Reference: https://wg21.link/alg.rotate#:~:text=ranges::rotate_copy(I -template , - typename = internal::iterator_category_t> -constexpr auto rotate_copy(ForwardIterator first, - ForwardIterator middle, - ForwardIterator last, - OutputIterator result) { - return std::rotate_copy(first, middle, last, result); -} - -// Let `N` be `size(range)`. -// -// Preconditions: `[begin(range), middle)` and `[middle, end(range))` are valid -// ranges. The ranges `range` and `[result, result + N)` do not overlap. -// -// Effects: Copies `range` to the range `[result, result + N)` such that for -// each non-negative integer `i < N` the following assignment takes place: -// `*(result + i) = *(begin(range) + (i + (middle - begin(range))) % N)`. -// -// Returns: `result + N`. -// -// Complexity: Exactly `N` assignments. -// -// Reference: https://wg21.link/alg.rotate#:~:text=ranges::rotate_copy(R -template , - typename = internal::iterator_category_t> -constexpr auto rotate_copy(Range&& range, - iterator_t middle, - OutputIterator result) { - return ranges::rotate_copy(std::ranges::begin(range), middle, - std::ranges::end(range), result); -} - -// [alg.random.sample] Sample -// Reference: https://wg21.link/alg.random.sample - -// Currently not implemented due to lack of std::sample in C++14. -// TODO(crbug.com/40126606): Consider implementing a hand-rolled version. - -// [alg.random.shuffle] Shuffle -// Reference: https://wg21.link/alg.random.shuffle - -// Preconditions: The type `std::remove_reference_t` -// meets the uniform random bit generator requirements. -// -// Effects: Permutes the elements in the range `[first, last)` such that each -// possible permutation of those elements has equal probability of appearance. -// -// Returns: `last`. -// -// Complexity: Exactly `(last - first) - 1` swaps. -// -// Remarks: To the extent that the implementation of this function makes use of -// random numbers, the object referenced by g shall serve as the -// implementation's source of randomness. -// -// Reference: https://wg21.link/alg.random.shuffle#:~:text=ranges::shuffle(I -template > -constexpr auto shuffle(RandomAccessIterator first, - RandomAccessIterator last, - UniformRandomBitGenerator&& g) { - std::shuffle(first, last, std::forward(g)); - return last; -} - -// Preconditions: The type `std::remove_reference_t` -// meets the uniform random bit generator requirements. -// -// Effects: Permutes the elements in `range` such that each possible permutation -// of those elements has equal probability of appearance. -// -// Returns: `end(range)`. -// -// Complexity: Exactly `size(range) - 1` swaps. -// -// Remarks: To the extent that the implementation of this function makes use of -// random numbers, the object referenced by g shall serve as the -// implementation's source of randomness. -// -// Reference: https://wg21.link/alg.random.shuffle#:~:text=ranges::shuffle(R -template > -constexpr auto shuffle(Range&& range, UniformRandomBitGenerator&& g) { - return ranges::shuffle(std::ranges::begin(range), std::ranges::end(range), - std::forward(g)); -} - -// [alg.nonmodifying] Sorting and related operations -// Reference: https://wg21.link/alg.sorting - -// [alg.sort] Sorting -// Reference: https://wg21.link/alg.sort - -// [sort] sort -// Reference: https://wg21.link/sort - -// Effects: Sorts the elements in the range `[first, last)` with respect to -// `comp` and `proj`. -// -// Returns: `last`. -// -// Complexity: Let `N` be `last - first`. `O(N log N)` comparisons and -// projections. -// -// Reference: https://wg21.link/sort#:~:text=ranges::sort(I -template , - typename = std::indirect_result_t< - Comp&, - std::projected, - std::projected>> -constexpr auto sort(RandomAccessIterator first, - RandomAccessIterator last, - Comp comp = {}, - Proj proj = {}) { - std::sort(first, last, internal::ProjectedBinaryPredicate(comp, proj, proj)); - return last; -} - -// Effects: Sorts the elements in `range` with respect to `comp` and `proj`. -// -// Returns: `end(range)`. -// -// Complexity: Let `N` be `size(range)`. `O(N log N)` comparisons and -// projections. -// -// Reference: https://wg21.link/sort#:~:text=ranges::sort(R -template < - typename Range, - typename Comp = ranges::less, - typename Proj = std::identity, - typename = internal::range_category_t, - typename = std::indirect_result_t, Proj>, - std::projected, Proj>>> -constexpr auto sort(Range&& range, Comp comp = {}, Proj proj = {}) { - return ranges::sort(std::ranges::begin(range), std::ranges::end(range), - std::move(comp), std::move(proj)); -} - -// [stable.sort] stable_sort -// Reference: https://wg21.link/stable.sort - -// Effects: Sorts the elements in the range `[first, last)` with respect to -// `comp` and `proj`. -// -// Returns: `last`. -// -// Complexity: Let `N` be `last - first`. If enough extra memory is available, -// `N log (N)` comparisons. Otherwise, at most `N log^2 (N)` comparisons. In -// either case, twice as many projections as the number of comparisons. -// -// Remarks: Stable. -// -// Reference: https://wg21.link/stable.sort#:~:text=ranges::stable_sort(I -template , - typename = std::indirect_result_t< - Comp&, - std::projected, - std::projected>> -constexpr auto stable_sort(RandomAccessIterator first, - RandomAccessIterator last, - Comp comp = {}, - Proj proj = {}) { - std::stable_sort(first, last, - internal::ProjectedBinaryPredicate(comp, proj, proj)); - return last; -} - -// Effects: Sorts the elements in `range` with respect to `comp` and `proj`. -// -// Returns: `end(rang)`. -// -// Complexity: Let `N` be `size(range)`. If enough extra memory is available, -// `N log (N)` comparisons. Otherwise, at most `N log^2 (N)` comparisons. In -// either case, twice as many projections as the number of comparisons. -// -// Remarks: Stable. -// -// Reference: https://wg21.link/stable.sort#:~:text=ranges::stable_sort(R -template < - typename Range, - typename Comp = ranges::less, - typename Proj = std::identity, - typename = internal::range_category_t, - typename = std::indirect_result_t, Proj>, - std::projected, Proj>>> -constexpr auto stable_sort(Range&& range, Comp comp = {}, Proj proj = {}) { - return ranges::stable_sort(std::ranges::begin(range), std::ranges::end(range), - std::move(comp), std::move(proj)); -} - -// [partial.sort] partial_sort -// Reference: https://wg21.link/partial.sort - -// Preconditions: `[first, middle)` and `[middle, last)` are valid ranges. -// -// Effects: Places the first `middle - first` elements from the range -// `[first, last)` as sorted with respect to `comp` and `proj` into the range -// `[first, middle)`. The rest of the elements in the range `[middle, last)` are -// placed in an unspecified order. -// -// Returns: `last`. -// -// Complexity: Approximately `(last - first) * log(middle - first)` comparisons, -// and twice as many projections. -// -// Reference: https://wg21.link/partial.sort#:~:text=ranges::partial_sort(I -template , - typename = std::indirect_result_t< - Comp&, - std::projected, - std::projected>> -constexpr auto partial_sort(RandomAccessIterator first, - RandomAccessIterator middle, - RandomAccessIterator last, - Comp comp = {}, - Proj proj = {}) { - std::partial_sort(first, middle, last, - internal::ProjectedBinaryPredicate(comp, proj, proj)); - return last; -} - -// Preconditions: `[begin(range), middle)` and `[middle, end(range))` are valid -// ranges. -// -// Effects: Places the first `middle - begin(range)` elements from `range` as -// sorted with respect to `comp` and `proj` into the range -// `[begin(range), middle)`. The rest of the elements in the range -// `[middle, end(range))` are placed in an unspecified order. -// -// Returns: `end(range)`. -// -// Complexity: Approximately `size(range) * log(middle - begin(range))` -// comparisons, and twice as many projections. -// -// Reference: https://wg21.link/partial.sort#:~:text=ranges::partial_sort(R -template < - typename Range, - typename Comp = ranges::less, - typename Proj = std::identity, - typename = internal::range_category_t, - typename = std::indirect_result_t, Proj>, - std::projected, Proj>>> -constexpr auto partial_sort(Range&& range, - iterator_t middle, - Comp comp = {}, - Proj proj = {}) { - return ranges::partial_sort(std::ranges::begin(range), middle, - std::ranges::end(range), std::move(comp), - std::move(proj)); -} - -// [partial.sort.copy] partial_sort_copy -// Reference: https://wg21.link/partial.sort.copy - -// Let `N` be `min(last - first, result_last - result_first)`. -// -// Preconditions: For iterators `a1` and `b1` in `[first, last)`, and iterators -// `x2` and `y2` in `[result_first, result_last)`, after evaluating the -// assignment `*y2 = *b1`, let `E` be the value of `bool(invoke(comp, -// invoke(proj1, *a1), invoke(proj2, *y2)))`. Then, after evaluating the -// assignment `*x2 = *a1`, `E` is equal to `bool(invoke(comp, invoke(proj2, -// *x2), invoke(proj2, *y2)))`. -// -// Effects: Places the first `N` elements as sorted with respect to `comp` and -// `proj2` into the range `[result_first, result_first + N)`. -// -// Returns: `result_first + N`. -// -// Complexity: Approximately `(last - first) * log N` comparisons, and twice as -// many projections. -// -// Reference: -// https://wg21.link/partial.sort.copy#:~:text=ranges::partial_sort_copy(I1 -template < - typename InputIterator, - typename RandomAccessIterator, - typename Comp = ranges::less, - typename Proj1 = std::identity, - typename Proj2 = std::identity, - typename = internal::iterator_category_t, - typename = internal::iterator_category_t, - typename = - std::indirect_result_t, - std::projected>, - typename = - std::indirect_result_t, - std::projected>> -constexpr auto partial_sort_copy(InputIterator first, - InputIterator last, - RandomAccessIterator result_first, - RandomAccessIterator result_last, - Comp comp = {}, - Proj1 proj1 = {}, - Proj2 proj2 = {}) { - // Needs to opt-in to all permutations, since std::partial_sort_copy expects - // comp(proj2(lhs), proj1(rhs)) to compile. - return std::partial_sort_copy( - first, last, result_first, result_last, - internal::PermutedProjectedBinaryPredicate(comp, proj1, proj2)); -} - -// Let `N` be `min(size(range), size(result_range))`. -// -// Preconditions: For iterators `a1` and `b1` in `range`, and iterators -// `x2` and `y2` in `result_range`, after evaluating the assignment -// `*y2 = *b1`, let `E` be the value of -// `bool(invoke(comp, invoke(proj1, *a1), invoke(proj2, *y2)))`. Then, after -// evaluating the assignment `*x2 = *a1`, `E` is equal to -// `bool(invoke(comp, invoke(proj2, *x2), invoke(proj2, *y2)))`. -// -// Effects: Places the first `N` elements as sorted with respect to `comp` and -// `proj2` into the range `[begin(result_range), begin(result_range) + N)`. -// -// Returns: `begin(result_range) + N`. -// -// Complexity: Approximately `size(range) * log N` comparisons, and twice as -// many projections. -// -// Reference: -// https://wg21.link/partial.sort.copy#:~:text=ranges::partial_sort_copy(R1 -template , - typename = internal::range_category_t, - typename = - std::indirect_result_t, Proj1>, - std::projected, Proj2>>, - typename = - std::indirect_result_t, Proj2>, - std::projected, Proj1>>> -constexpr auto partial_sort_copy(Range1&& range, - Range2&& result_range, - Comp comp = {}, - Proj1 proj1 = {}, - Proj2 proj2 = {}) { - return ranges::partial_sort_copy( - std::ranges::begin(range), std::ranges::end(range), - std::ranges::begin(result_range), std::ranges::end(result_range), - std::move(comp), std::move(proj1), std::move(proj2)); -} - -// [is.sorted] is_sorted -// Reference: https://wg21.link/is.sorted - -// Returns: The last iterator `i` in `[first, last]` for which the range -// `[first, i)` is sorted with respect to `comp` and `proj`. -// -// Complexity: Linear. -// -// Reference: https://wg21.link/is.sorted#:~:text=ranges::is_sorted_until(I -template < - typename ForwardIterator, - typename Comp = ranges::less, - typename Proj = std::identity, - typename = internal::iterator_category_t, - typename = std::indirect_result_t, - std::projected>> -constexpr auto is_sorted_until(ForwardIterator first, - ForwardIterator last, - Comp comp = {}, - Proj proj = {}) { - // Implementation inspired by cppreference.com: - // https://en.cppreference.com/w/cpp/algorithm/is_sorted_until - // - // A reimplementation is required, because std::is_sorted_until is not - // constexpr prior to C++20. Once we have C++20, we should switch to standard - // library implementation. - if (first == last) { - return last; - } - - for (ForwardIterator next = first; ++next != last; ++first) { - if (std::invoke(comp, std::invoke(proj, *next), - std::invoke(proj, *first))) { - return next; - } - } - - return last; -} - -// Returns: The last iterator `i` in `[begin(range), end(range)]` for which the -// range `[begin(range), i)` is sorted with respect to `comp` and `proj`. -// -// Complexity: Linear. -// -// Reference: https://wg21.link/is.sorted#:~:text=ranges::is_sorted_until(R -template < - typename Range, - typename Comp = ranges::less, - typename Proj = std::identity, - typename = internal::range_category_t, - typename = std::indirect_result_t, Proj>, - std::projected, Proj>>> -constexpr auto is_sorted_until(Range&& range, Comp comp = {}, Proj proj = {}) { - return ranges::is_sorted_until(std::ranges::begin(range), - std::ranges::end(range), std::move(comp), - std::move(proj)); -} - -// Returns: Whether the range `[first, last)` is sorted with respect to `comp` -// and `proj`. -// -// Complexity: Linear. -// -// Reference: https://wg21.link/is.sorted#:~:text=ranges::is_sorted(I -template < - typename ForwardIterator, - typename Comp = ranges::less, - typename Proj = std::identity, - typename = internal::iterator_category_t, - typename = std::indirect_result_t, - std::projected>> -constexpr auto is_sorted(ForwardIterator first, - ForwardIterator last, - Comp comp = {}, - Proj proj = {}) { - return ranges::is_sorted_until(first, last, std::move(comp), - std::move(proj)) == last; -} - -// Returns: Whether `range` is sorted with respect to `comp` and `proj`. -// -// Complexity: Linear. -// -// Reference: https://wg21.link/is.sorted#:~:text=ranges::is_sorted(R -template < - typename Range, - typename Comp = ranges::less, - typename Proj = std::identity, - typename = internal::range_category_t, - typename = std::indirect_result_t, Proj>, - std::projected, Proj>>> -constexpr auto is_sorted(Range&& range, Comp comp = {}, Proj proj = {}) { - return ranges::is_sorted(std::ranges::begin(range), std::ranges::end(range), - std::move(comp), std::move(proj)); -} - -// [alg.nth.element] Nth element -// Reference: https://wg21.link/alg.nth.element - -// Preconditions: `[first, nth)` and `[nth, last)` are valid ranges. -// -// Effects: After `nth_element` the element in the position pointed to by `nth` -// is the element that would be in that position if the whole range were sorted -// with respect to `comp` and `proj`, unless `nth == last`. Also for every -// iterator `i` in the range `[first, nth)` and every iterator `j` in the range -// `[nth, last)` it holds that: -// `bool(invoke(comp, invoke(proj, *j), invoke(proj, *i)))` is false. -// -// Returns: `last`. -// -// Complexity: Linear on average. -// -// Reference: https://wg21.link/alg.nth.element#:~:text=ranges::nth_element(I -template , - typename = std::indirect_result_t< - Comp&, - std::projected, - std::projected>> -constexpr auto nth_element(RandomAccessIterator first, - RandomAccessIterator nth, - RandomAccessIterator last, - Comp comp = {}, - Proj proj = {}) { - std::nth_element(first, nth, last, - internal::ProjectedBinaryPredicate(comp, proj, proj)); - return last; -} - -// Preconditions: `[begin(range), nth)` and `[nth, end(range))` are valid -// ranges. -// -// Effects: After `nth_element` the element in the position pointed to by `nth` -// is the element that would be in that position if the whole range were sorted -// with respect to `comp` and `proj`, unless `nth == end(range)`. Also for every -// iterator `i` in the range `[begin(range), nth)` and every iterator `j` in the -// range `[nth, end(range))` it holds that: -// `bool(invoke(comp, invoke(proj, *j), invoke(proj, *i)))` is false. -// -// Returns: `end(range)`. -// -// Complexity: Linear on average. -// -// Reference: https://wg21.link/alg.nth.element#:~:text=ranges::nth_element(R -template < - typename Range, - typename Comp = ranges::less, - typename Proj = std::identity, - typename = internal::range_category_t, - typename = std::indirect_result_t, Proj>, - std::projected, Proj>>> -constexpr auto nth_element(Range&& range, - iterator_t nth, - Comp comp = {}, - Proj proj = {}) { - return ranges::nth_element(std::ranges::begin(range), nth, - std::ranges::end(range), std::move(comp), - std::move(proj)); -} - -// [alg.binary.search] Binary search -// Reference: https://wg21.link/alg.binary.search - -// [lower.bound] lower_bound -// Reference: https://wg21.link/lower.bound - -// Preconditions: The elements `e` of `[first, last)` are partitioned with -// respect to the expression `bool(invoke(comp, invoke(proj, e), value))`. -// -// Returns: The furthermost iterator `i` in the range `[first, last]` such that -// for every iterator `j` in the range `[first, i)`, -// `bool(invoke(comp, invoke(proj, *j), value))` is true. -// -// Complexity: At most `log_2(last - first) + O(1)` comparisons and projections. -// -// Reference: https://wg21.link/lower.bound#:~:text=ranges::lower_bound(I -template > -constexpr auto lower_bound(ForwardIterator first, - ForwardIterator last, - const T& value, - Comp comp = {}, - Proj proj = {}) { - // The second arg is guaranteed to be `value`, so we'll simply apply the - // std::identity projection. - std::identity value_proj; - return std::lower_bound( - first, last, value, - internal::ProjectedBinaryPredicate(comp, proj, value_proj)); -} - -// Preconditions: The elements `e` of `range` are partitioned with respect to -// the expression `bool(invoke(comp, invoke(proj, e), value))`. -// -// Returns: The furthermost iterator `i` in the range -// `[begin(range), end(range)]` such that for every iterator `j` in the range -// `[begin(range), i)`, `bool(invoke(comp, invoke(proj, *j), value))` is true. -// -// Complexity: At most `log_2(size(range)) + O(1)` comparisons and projections. -// -// Reference: https://wg21.link/lower.bound#:~:text=ranges::lower_bound(R -template > -constexpr auto lower_bound(Range&& range, - const T& value, - Comp comp = {}, - Proj proj = {}) { - return ranges::lower_bound(std::ranges::begin(range), std::ranges::end(range), - value, std::move(comp), std::move(proj)); -} - -// [upper.bound] upper_bound -// Reference: https://wg21.link/upper.bound - -// Preconditions: The elements `e` of `[first, last)` are partitioned with -// respect to the expression `!bool(invoke(comp, value, invoke(proj, e)))`. -// -// Returns: The furthermost iterator `i` in the range `[first, last]` such that -// for every iterator `j` in the range `[first, i)`, -// `!bool(invoke(comp, value, invoke(proj, *j)))` is true. -// -// Complexity: At most `log_2(last - first) + O(1)` comparisons and projections. -// -// Reference: https://wg21.link/upper.bound#:~:text=ranges::upper_bound(I -template > -constexpr auto upper_bound(ForwardIterator first, - ForwardIterator last, - const T& value, - Comp comp = {}, - Proj proj = {}) { - // The first arg is guaranteed to be `value`, so we'll simply apply the - // std::identity projection. - std::identity value_proj; - return std::upper_bound( - first, last, value, - internal::ProjectedBinaryPredicate(comp, value_proj, proj)); -} - -// Preconditions: The elements `e` of `range` are partitioned with -// respect to the expression `!bool(invoke(comp, value, invoke(proj, e)))`. -// -// Returns: The furthermost iterator `i` in the range -// `[begin(range), end(range)]` such that for every iterator `j` in the range -// `[begin(range), i)`, `!bool(invoke(comp, value, invoke(proj, *j)))` is true. -// -// Complexity: At most `log_2(size(range)) + O(1)` comparisons and projections. -// -// Reference: https://wg21.link/upper.bound#:~:text=ranges::upper_bound(R -template > -constexpr auto upper_bound(Range&& range, - const T& value, - Comp comp = {}, - Proj proj = {}) { - return ranges::upper_bound(std::ranges::begin(range), std::ranges::end(range), - value, std::move(comp), std::move(proj)); -} - -// [equal.range] equal_range -// Reference: https://wg21.link/equal.range - -// Preconditions: The elements `e` of `[first, last)` are partitioned with -// respect to the expressions `bool(invoke(comp, invoke(proj, e), value))` and -// `!bool(invoke(comp, value, invoke(proj, e)))`. -// -// Returns: `{ranges::lower_bound(first, last, value, comp, proj), -// ranges::upper_bound(first, last, value, comp, proj)}`. -// -// Complexity: At most 2 ∗ log_2(last - first) + O(1) comparisons and -// projections. -// -// Reference: https://wg21.link/equal.range#:~:text=ranges::equal_range(I -template > -constexpr auto equal_range(ForwardIterator first, - ForwardIterator last, - const T& value, - Comp comp = {}, - Proj proj = {}) { - // Note: This does not dispatch to std::equal_range, as otherwise it would not - // be possible to prevent applying `proj` to `value`, which can result in - // unintended behavior. - return std::make_pair(ranges::lower_bound(first, last, value, comp, proj), - ranges::upper_bound(first, last, value, comp, proj)); -} - -// Preconditions: The elements `e` of `range` are partitioned with -// respect to the expressions `bool(invoke(comp, invoke(proj, e), value))` and -// `!bool(invoke(comp, value, invoke(proj, e)))`. -// -// Returns: `{ranges::lower_bound(range, value, comp, proj), -// ranges::upper_bound(range, value, comp, proj)}`. -// -// Complexity: At most 2 ∗ log_2(size(range)) + O(1) comparisons and -// projections. -// -// Reference: https://wg21.link/equal.range#:~:text=ranges::equal_range(R -template > -constexpr auto equal_range(Range&& range, - const T& value, - Comp comp = {}, - Proj proj = {}) { - return ranges::equal_range(std::ranges::begin(range), std::ranges::end(range), - value, std::move(comp), std::move(proj)); -} - -// [binary.search] binary_search -// Reference: https://wg21.link/binary.search - -// Preconditions: The elements `e` of `[first, last)` are partitioned with -// respect to the expressions `bool(invoke(comp, invoke(proj, e), value))` and -// `!bool(invoke(comp, value, invoke(proj, e)))`. -// -// Returns: `true` if and only if for some iterator `i` in the range -// `[first, last)`, `!bool(invoke(comp, invoke(proj, *i), value)) && -// !bool(invoke(comp, value, invoke(proj, *i)))` is true. -// -// Complexity: At most `log_2(last - first) + O(1)` comparisons and projections. -// -// Reference: https://wg21.link/binary.search#:~:text=ranges::binary_search(I -template > -constexpr auto binary_search(ForwardIterator first, - ForwardIterator last, - const T& value, - Comp comp = {}, - Proj proj = {}) { - first = ranges::lower_bound(first, last, value, comp, proj); - return first != last && !std::invoke(comp, value, std::invoke(proj, *first)); -} - -// Preconditions: The elements `e` of `range` are partitioned with -// respect to the expressions `bool(invoke(comp, invoke(proj, e), value))` and -// `!bool(invoke(comp, value, invoke(proj, e)))`. -// -// Returns: `true` if and only if for some iterator `i` in `range` -// `!bool(invoke(comp, invoke(proj, *i), value)) && -// !bool(invoke(comp, value, invoke(proj, *i)))` is true. -// -// Complexity: At most `log_2(size(range)) + O(1)` comparisons and projections. -// -// Reference: https://wg21.link/binary.search#:~:text=ranges::binary_search(R -template > -constexpr auto binary_search(Range&& range, - const T& value, - Comp comp = {}, - Proj proj = {}) { - return ranges::binary_search(std::ranges::begin(range), - std::ranges::end(range), value, std::move(comp), - std::move(proj)); -} - -// [alg.partitions] Partitions -// Reference: https://wg21.link/alg.partitions - -// Returns: `true` if and only if the elements `e` of `[first, last)` are -// partitioned with respect to the expression -// `bool(invoke(pred, invoke(proj, e)))`. -// -// Complexity: Linear. At most `last - first` applications of `pred` and `proj`. -// -// Reference: https://wg21.link/alg.partitions#:~:text=ranges::is_partitioned(I -template > -constexpr auto is_partitioned(ForwardIterator first, - ForwardIterator last, - Pred pred, - Proj proj = {}) { - return std::is_partitioned(first, last, - internal::ProjectedUnaryPredicate(pred, proj)); -} - -// Returns: `true` if and only if the elements `e` of `range` are partitioned -// with respect to the expression `bool(invoke(pred, invoke(proj, e)))`. -// -// Complexity: Linear. At most `size(range)` applications of `pred` and `proj`. -// -// Reference: https://wg21.link/alg.partitions#:~:text=ranges::is_partitioned(R -template > -constexpr auto is_partitioned(Range&& range, Pred pred, Proj proj = {}) { - return ranges::is_partitioned(std::ranges::begin(range), - std::ranges::end(range), std::move(pred), - std::move(proj)); -} - -// Let `E(x)` be `bool(invoke(pred, invoke(proj, x)))`. -// -// Effects: Places all the elements `e` in `[first, last)` that satisfy `E(e)` -// before all the elements that do not. -// -// Returns: Let `i` be an iterator such that `E(*j)` is `true` for every -// iterator `j` in `[first, i)` and `false` for every iterator `j` in -// `[i, last)`. Returns: i. -// -// Complexity: Let `N = last - first`: -// Exactly `N` applications of the predicate and projection. At most `N / 2` -// swaps if the type of `first` models `bidirectional_iterator`, and at most `N` -// swaps otherwise. -// -// Reference: https://wg21.link/alg.partitions#:~:text=ranges::partition(I -template > -constexpr auto partition(ForwardIterator first, - ForwardIterator last, - Pred pred, - Proj proj = {}) { - return std::partition(first, last, - internal::ProjectedUnaryPredicate(pred, proj)); -} - -// Let `E(x)` be `bool(invoke(pred, invoke(proj, x)))`. -// -// Effects: Places all the elements `e` in `range` that satisfy `E(e)` before -// all the elements that do not. -// -// Returns: Let `i` be an iterator such that `E(*j)` is `true` for every -// iterator `j` in `[begin(range), i)` and `false` for every iterator `j` in -// `[i, last)`. Returns: i. -// -// Complexity: Let `N = size(range)`: -// Exactly `N` applications of the predicate and projection. At most `N / 2` -// swaps if the type of `first` models `bidirectional_iterator`, and at most `N` -// swaps otherwise. -// -// Reference: https://wg21.link/alg.partitions#:~:text=ranges::partition(R -template > -constexpr auto partition(Range&& range, Pred pred, Proj proj = {}) { - return ranges::partition(std::ranges::begin(range), std::ranges::end(range), - std::move(pred), std::move(proj)); -} - -// Let `E(x)` be `bool(invoke(pred, invoke(proj, x)))`. -// -// Effects: Places all the elements `e` in `[first, last)` that satisfy `E(e)` -// before all the elements that do not. The relative order of the elements in -// both groups is preserved. -// -// Returns: Let `i` be an iterator such that for every iterator `j` in -// `[first, i)`, `E(*j)` is `true`, and for every iterator `j` in the range -// `[i, last)`, `E(*j)` is `false`. Returns: `i`. -// -// Complexity: Let `N = last - first`: -// At most `N log N` swaps, but only `O(N)` swaps if there is enough extra -// memory. Exactly `N` applications of the predicate and projection. -// -// Reference: -// https://wg21.link/alg.partitions#:~:text=ranges::stable_partition(I -template > -constexpr auto stable_partition(BidirectionalIterator first, - BidirectionalIterator last, - Pred pred, - Proj proj = {}) { - return std::stable_partition(first, last, - internal::ProjectedUnaryPredicate(pred, proj)); -} - -// Let `E(x)` be `bool(invoke(pred, invoke(proj, x)))`. -// -// Effects: Places all the elements `e` in `range` that satisfy `E(e)` before -// all the elements that do not. The relative order of the elements in both -// groups is preserved. -// -// Returns: Let `i` be an iterator such that for every iterator `j` in -// `[begin(range), i)`, `E(*j)` is `true`, and for every iterator `j` in the -// range `[i, end(range))`, `E(*j)` is `false`. Returns: `i`. -// -// Complexity: Let `N = size(range)`: -// At most `N log N` swaps, but only `O(N)` swaps if there is enough extra -// memory. Exactly `N` applications of the predicate and projection. -// -// Reference: -// https://wg21.link/alg.partitions#:~:text=ranges::stable_partition(R -template > -constexpr auto stable_partition(Range&& range, Pred pred, Proj proj = {}) { - return ranges::stable_partition(std::ranges::begin(range), - std::ranges::end(range), std::move(pred), - std::move(proj)); -} - -// Let `E(x)` be `bool(invoke(pred, invoke(proj, x)))`. -// -// Mandates: The expression `*first` is writable to `out_true` and `out_false`. -// -// Preconditions: The input range and output ranges do not overlap. -// -// Effects: For each iterator `i` in `[first, last)`, copies `*i` to the output -// range beginning with `out_true` if `E(*i)` is `true`, or to the output range -// beginning with `out_false` otherwise. -// -// Returns: Let `o1` be the end of the output range beginning at `out_true`, and -// `o2` the end of the output range beginning at `out_false`. -// Returns `{o1, o2}`. -// -// Complexity: Exactly `last - first` applications of `pred` and `proj`. -// -// Reference: https://wg21.link/alg.partitions#:~:text=ranges::partition_copy(I -template , - typename = internal::iterator_category_t, - typename = internal::iterator_category_t> -constexpr auto partition_copy(InputIterator first, - InputIterator last, - OutputIterator1 out_true, - OutputIterator2 out_false, - Pred pred, - Proj proj = {}) { - return std::partition_copy(first, last, out_true, out_false, - internal::ProjectedUnaryPredicate(pred, proj)); -} - -// Let `E(x)` be `bool(invoke(pred, invoke(proj, x)))`. -// -// Mandates: The expression `*begin(range)` is writable to `out_true` and -// `out_false`. -// -// Preconditions: The input range and output ranges do not overlap. -// -// Effects: For each iterator `i` in `range`, copies `*i` to the output range -// beginning with `out_true` if `E(*i)` is `true`, or to the output range -// beginning with `out_false` otherwise. -// -// Returns: Let `o1` be the end of the output range beginning at `out_true`, and -// `o2` the end of the output range beginning at `out_false`. -// Returns `{o1, o2}`. -// -// Complexity: Exactly `size(range)` applications of `pred` and `proj`. -// -// Reference: https://wg21.link/alg.partitions#:~:text=ranges::partition_copy(R -template , - typename = internal::iterator_category_t, - typename = internal::iterator_category_t> -constexpr auto partition_copy(Range&& range, - OutputIterator1 out_true, - OutputIterator2 out_false, - Pred pred, - Proj proj = {}) { - return ranges::partition_copy(std::ranges::begin(range), - std::ranges::end(range), out_true, out_false, - std::move(pred), std::move(proj)); -} - -// let `E(x)` be `bool(invoke(pred, invoke(proj, x)))`. -// -// Preconditions: The elements `e` of `[first, last)` are partitioned with -// respect to `E(e)`. -// -// Returns: An iterator `mid` such that `E(*i)` is `true` for all iterators `i` -// in `[first, mid)`, and `false` for all iterators `i` in `[mid, last)`. -// -// Complexity: `O(log(last - first))` applications of `pred` and `proj`. -// -// Reference: https://wg21.link/alg.partitions#:~:text=ranges::partition_point(I -template > -constexpr auto partition_point(ForwardIterator first, - ForwardIterator last, - Pred pred, - Proj proj = {}) { - return std::partition_point(first, last, - internal::ProjectedUnaryPredicate(pred, proj)); -} - -// let `E(x)` be `bool(invoke(pred, invoke(proj, x)))`. -// -// Preconditions: The elements `e` of `range` are partitioned with respect to -// `E(e)`. -// -// Returns: An iterator `mid` such that `E(*i)` is `true` for all iterators `i` -// in `[begin(range), mid)`, and `false` for all iterators `i` in -// `[mid, end(range))`. -// -// Complexity: `O(log(size(range)))` applications of `pred` and `proj`. -// -// Reference: https://wg21.link/alg.partitions#:~:text=ranges::partition_point(R -template > -constexpr auto partition_point(Range&& range, Pred pred, Proj proj = {}) { - return ranges::partition_point(std::ranges::begin(range), - std::ranges::end(range), std::move(pred), - std::move(proj)); -} - -// [alg.merge] Merge -// Reference: https://wg21.link/alg.merge - -// Let `N` be `(last1 - first1) + (last2 - first2)`. -// -// Preconditions: The ranges `[first1, last1)` and `[first2, last2)` are sorted -// with respect to `comp` and `proj1` or `proj2`, respectively. The resulting -// range does not overlap with either of the original ranges. -// -// Effects: Copies all the elements of the two ranges `[first1, last1)` and -// `[first2, last2)` into the range `[result, result_last)`, where `result_last` -// is `result + N`. If an element `a` precedes `b` in an input range, `a` is -// copied into the output range before `b`. If `e1` is an element of -// `[first1, last1)` and `e2` of `[first2, last2)`, `e2` is copied into the -// output range before `e1` if and only if -// `bool(invoke(comp, invoke(proj2, e2), invoke(proj1, e1)))` is `true`. -// -// Returns: `result_last`. -// -// Complexity: At most `N - 1` comparisons and applications of each projection. -// -// Remarks: Stable. -// -// Reference: https://wg21.link/alg.merge#:~:text=ranges::merge(I1 -template < - typename InputIterator1, - typename InputIterator2, - typename OutputIterator, - typename Comp = ranges::less, - typename Proj1 = std::identity, - typename Proj2 = std::identity, - typename = internal::iterator_category_t, - typename = internal::iterator_category_t, - typename = internal::iterator_category_t, - typename = std::indirect_result_t, - std::projected>, - typename = std::indirect_result_t, - std::projected>> -constexpr auto merge(InputIterator1 first1, - InputIterator1 last1, - InputIterator2 first2, - InputIterator2 last2, - OutputIterator result, - Comp comp = {}, - Proj1 proj1 = {}, - Proj2 proj2 = {}) { - // Needs to opt-in to all permutations, since std::merge expects - // comp(proj2(lhs), proj1(rhs)) to compile. - return std::merge( - first1, last1, first2, last2, result, - internal::PermutedProjectedBinaryPredicate(comp, proj1, proj2)); -} - -// Let `N` be `size(range1) + size(range2)`. -// -// Preconditions: The ranges `range1` and `range2` are sorted with respect to -// `comp` and `proj1` or `proj2`, respectively. The resulting range does not -// overlap with either of the original ranges. -// -// Effects: Copies all the elements of the two ranges `range1` and `range2` into -// the range `[result, result_last)`, where `result_last` is `result + N`. If an -// element `a` precedes `b` in an input range, `a` is copied into the output -// range before `b`. If `e1` is an element of `range1` and `e2` of `range2`, -// `e2` is copied into the output range before `e1` if and only if -// `bool(invoke(comp, invoke(proj2, e2), invoke(proj1, e1)))` is `true`. -// -// Returns: `result_last`. -// -// Complexity: At most `N - 1` comparisons and applications of each projection. -// -// Remarks: Stable. -// -// Reference: https://wg21.link/alg.merge#:~:text=ranges::merge(R1 -template , - typename = internal::range_category_t, - typename = internal::iterator_category_t, - typename = - std::indirect_result_t, Proj1>, - std::projected, Proj2>>, - typename = - std::indirect_result_t, Proj2>, - std::projected, Proj1>>> -constexpr auto merge(Range1&& range1, - Range2&& range2, - OutputIterator result, - Comp comp = {}, - Proj1 proj1 = {}, - Proj2 proj2 = {}) { - return ranges::merge(std::ranges::begin(range1), std::ranges::end(range1), - std::ranges::begin(range2), std::ranges::end(range2), - result, std::move(comp), std::move(proj1), - std::move(proj2)); -} - -// Preconditions: `[first, middle)` and `[middle, last)` are valid ranges sorted -// with respect to `comp` and `proj`. -// -// Effects: Merges two sorted consecutive ranges `[first, middle)` and -// `[middle, last)`, putting the result of the merge into the range -// `[first, last)`. The resulting range is sorted with respect to `comp` and -// `proj`. -// -// Returns: `last`. -// -// Complexity: Let `N = last - first`: If enough additional memory is available, -// exactly `N - 1` comparisons. Otherwise, `O(N log N)` comparisons. In either -// case, twice as many projections as comparisons. -// -// Remarks: Stable. -// -// Reference: https://wg21.link/alg.merge#:~:text=ranges::inplace_merge(I -template > -constexpr auto inplace_merge(BidirectionalIterator first, - BidirectionalIterator middle, - BidirectionalIterator last, - Comp comp = {}, - Proj proj = {}) { - std::inplace_merge(first, middle, last, - internal::ProjectedBinaryPredicate(comp, proj, proj)); - return last; -} - -// Preconditions: `[begin(range), middle)` and `[middle, end(range))` are valid -// ranges sorted with respect to `comp` and `proj`. -// -// Effects: Merges two sorted consecutive ranges `[begin(range), middle)` and -// `[middle, end(range))`, putting the result of the merge into `range`. The -// resulting range is sorted with respect to `comp` and `proj`. -// -// Returns: `end(range)`. -// -// Complexity: Let `N = size(range)`: If enough additional memory is available, -// exactly `N - 1` comparisons. Otherwise, `O(N log N)` comparisons. In either -// case, twice as many projections as comparisons. -// -// Remarks: Stable. -// -// Reference: https://wg21.link/alg.merge#:~:text=ranges::inplace_merge(R -template > -constexpr auto inplace_merge(Range&& range, - iterator_t middle, - Comp comp = {}, - Proj proj = {}) { - return ranges::inplace_merge(std::ranges::begin(range), middle, - std::ranges::end(range), std::move(comp), - std::move(proj)); -} - -// [alg.set.operations] Set operations on sorted structures -// Reference: https://wg21.link/alg.set.operations - -// [includes] includes -// Reference: https://wg21.link/includes - -// Preconditions: The ranges `[first1, last1)` and `[first2, last2)` are sorted -// with respect to `comp` and `proj1` or `proj2`, respectively. -// -// Returns: `true` if and only if `[first2, last2)` is a subsequence of -// `[first1, last1)`. -// -// Complexity: At most `2 * ((last1 - first1) + (last2 - first2)) - 1` -// comparisons and applications of each projection. -// -// Reference: https://wg21.link/includes#:~:text=ranges::includes(I1 -template < - typename InputIterator1, - typename InputIterator2, - typename Comp = ranges::less, - typename Proj1 = std::identity, - typename Proj2 = std::identity, - typename = internal::iterator_category_t, - typename = internal::iterator_category_t, - typename = std::indirect_result_t, - std::projected>, - typename = std::indirect_result_t, - std::projected>> -constexpr auto includes(InputIterator1 first1, - InputIterator1 last1, - InputIterator2 first2, - InputIterator2 last2, - Comp comp = {}, - Proj1 proj1 = {}, - Proj2 proj2 = {}) { - DCHECK(ranges::is_sorted(first1, last1, comp, proj1)); - DCHECK(ranges::is_sorted(first2, last2, comp, proj2)); - // Needs to opt-in to all permutations, since std::includes expects - // comp(proj1(lhs), proj2(rhs)) and comp(proj2(lhs), proj1(rhs)) to compile. - return std::includes( - first1, last1, first2, last2, - internal::PermutedProjectedBinaryPredicate(comp, proj1, proj2)); -} - -// Preconditions: The ranges `range1` and `range2` are sorted with respect to -// `comp` and `proj1` or `proj2`, respectively. -// -// Returns: `true` if and only if `range2` is a subsequence of `range1`. -// -// Complexity: At most `2 * (size(range1) + size(range2)) - 1` comparisons and -// applications of each projection. -// -// Reference: https://wg21.link/includes#:~:text=ranges::includes(R1 -template , - typename = internal::range_category_t, - typename = - std::indirect_result_t, Proj1>, - std::projected, Proj2>>, - typename = - std::indirect_result_t, Proj2>, - std::projected, Proj1>>> -constexpr auto includes(Range1&& range1, - Range2&& range2, - Comp comp = {}, - Proj1 proj1 = {}, - Proj2 proj2 = {}) { - return ranges::includes(std::ranges::begin(range1), std::ranges::end(range1), - std::ranges::begin(range2), std::ranges::end(range2), - std::move(comp), std::move(proj1), std::move(proj2)); -} - -// [set.union] set_union -// Reference: https://wg21.link/set.union - -// Preconditions: The ranges `[first1, last1)` and `[first2, last2)` are sorted -// with respect to `comp` and `proj1` or `proj2`, respectively. The resulting -// range does not overlap with either of the original ranges. -// -// Effects: Constructs a sorted union of the elements from the two ranges; that -// is, the set of elements that are present in one or both of the ranges. -// -// Returns: The end of the constructed range. -// -// Complexity: At most `2 * ((last1 - first1) + (last2 - first2)) - 1` -// comparisons and applications of each projection. -// -// Remarks: Stable. If `[first1, last1)` contains `m` elements that are -// equivalent to each other and `[first2, last2)` contains `n` elements that are -// equivalent to them, then all `m` elements from the first range are copied to -// the output range, in order, and then the final `max(n - m , 0)` elements from -// the second range are copied to the output range, in order. -// -// Reference: https://wg21.link/set.union#:~:text=ranges::set_union(I1 -template < - typename InputIterator1, - typename InputIterator2, - typename OutputIterator, - typename Comp = ranges::less, - typename Proj1 = std::identity, - typename Proj2 = std::identity, - typename = internal::iterator_category_t, - typename = internal::iterator_category_t, - typename = internal::iterator_category_t, - typename = std::indirect_result_t, - std::projected>, - typename = std::indirect_result_t, - std::projected>> -constexpr auto set_union(InputIterator1 first1, - InputIterator1 last1, - InputIterator2 first2, - InputIterator2 last2, - OutputIterator result, - Comp comp = {}, - Proj1 proj1 = {}, - Proj2 proj2 = {}) { - // Needs to opt-in to all permutations, since std::set_union expects - // comp(proj1(lhs), proj2(rhs)) and comp(proj2(lhs), proj1(rhs)) to compile. - return std::set_union( - first1, last1, first2, last2, result, - internal::PermutedProjectedBinaryPredicate(comp, proj1, proj2)); -} - -// Preconditions: The ranges `range1` and `range2` are sorted with respect to -// `comp` and `proj1` or `proj2`, respectively. The resulting range does not -// overlap with either of the original ranges. -// -// Effects: Constructs a sorted union of the elements from the two ranges; that -// is, the set of elements that are present in one or both of the ranges. -// -// Returns: The end of the constructed range. -// -// Complexity: At most `2 * (size(range1) + size(range2)) - 1` comparisons and -// applications of each projection. -// -// Remarks: Stable. If `range1` contains `m` elements that are equivalent to -// each other and `range2` contains `n` elements that are equivalent to them, -// then all `m` elements from the first range are copied to the output range, in -// order, and then the final `max(n - m , 0)` elements from the second range are -// copied to the output range, in order. -// -// Reference: https://wg21.link/set.union#:~:text=ranges::set_union(R1 -template , - typename = internal::range_category_t, - typename = internal::iterator_category_t, - typename = - std::indirect_result_t, Proj1>, - std::projected, Proj2>>, - typename = - std::indirect_result_t, Proj2>, - std::projected, Proj1>>> -constexpr auto set_union(Range1&& range1, - Range2&& range2, - OutputIterator result, - Comp comp = {}, - Proj1 proj1 = {}, - Proj2 proj2 = {}) { - return ranges::set_union(std::ranges::begin(range1), std::ranges::end(range1), - std::ranges::begin(range2), std::ranges::end(range2), - result, std::move(comp), std::move(proj1), - std::move(proj2)); -} - -// [set.intersection] set_intersection -// Reference: https://wg21.link/set.intersection - -// Preconditions: The ranges `[first1, last1)` and `[first2, last2)` are sorted -// with respect to `comp` and `proj1` or `proj2`, respectively. The resulting -// range does not overlap with either of the original ranges. -// -// Effects: Constructs a sorted intersection of the elements from the two -// ranges; that is, the set of elements that are present in both of the ranges. -// -// Returns: The end of the constructed range. -// -// Complexity: At most `2 * ((last1 - first1) + (last2 - first2)) - 1` -// comparisons and applications of each projection. -// -// Remarks: Stable. If `[first1, last1)` contains `m` elements that are -// equivalent to each other and `[first2, last2)` contains `n` elements that are -// equivalent to them, the first `min(m, n)` elements are copied from the first -// range to the output range, in order. -// -// Reference: -// https://wg21.link/set.intersection#:~:text=ranges::set_intersection(I1 -template < - typename InputIterator1, - typename InputIterator2, - typename OutputIterator, - typename Comp = ranges::less, - typename Proj1 = std::identity, - typename Proj2 = std::identity, - typename = internal::iterator_category_t, - typename = internal::iterator_category_t, - typename = internal::iterator_category_t, - typename = std::indirect_result_t, - std::projected>, - typename = std::indirect_result_t, - std::projected>> -constexpr auto set_intersection(InputIterator1 first1, - InputIterator1 last1, - InputIterator2 first2, - InputIterator2 last2, - OutputIterator result, - Comp comp = {}, - Proj1 proj1 = {}, - Proj2 proj2 = {}) { - // Needs to opt-in to all permutations, since std::set_intersection expects - // comp(proj1(lhs), proj2(rhs)) and comp(proj2(lhs), proj1(rhs)) to compile. - return std::set_intersection( - first1, last1, first2, last2, result, - internal::PermutedProjectedBinaryPredicate(comp, proj1, proj2)); -} - -// Preconditions: The ranges `range1` and `range2` are sorted with respect to -// `comp` and `proj1` or `proj2`, respectively. The resulting range does not -// overlap with either of the original ranges. -// -// Effects: Constructs a sorted intersection of the elements from the two -// ranges; that is, the set of elements that are present in both of the ranges. -// -// Returns: The end of the constructed range. -// -// Complexity: At most `2 * (size(range1) + size(range2)) - 1` comparisons and -// applications of each projection. -// -// Remarks: Stable. If `range1` contains `m` elements that are equivalent to -// each other and `range2` contains `n` elements that are equivalent to them, -// the first `min(m, n)` elements are copied from the first range to the output -// range, in order. -// -// Reference: -// https://wg21.link/set.intersection#:~:text=ranges::set_intersection(R1 -template , - typename = internal::range_category_t, - typename = internal::iterator_category_t, - typename = - std::indirect_result_t, Proj1>, - std::projected, Proj2>>, - typename = - std::indirect_result_t, Proj2>, - std::projected, Proj1>>> -constexpr auto set_intersection(Range1&& range1, - Range2&& range2, - OutputIterator result, - Comp comp = {}, - Proj1 proj1 = {}, - Proj2 proj2 = {}) { - return ranges::set_intersection( - std::ranges::begin(range1), std::ranges::end(range1), - std::ranges::begin(range2), std::ranges::end(range2), result, - std::move(comp), std::move(proj1), std::move(proj2)); -} - -// [set.difference] set_difference -// Reference: https://wg21.link/set.difference - -// Preconditions: The ranges `[first1, last1)` and `[first2, last2)` are sorted -// with respect to `comp` and `proj1` or `proj2`, respectively. The resulting -// range does not overlap with either of the original ranges. -// -// Effects: Copies the elements of the range `[first1, last1)` which are not -// present in the range `[first2, last2)` to the range beginning at `result`. -// The elements in the constructed range are sorted. -// -// Returns: The end of the constructed range. -// -// Complexity: At most `2 * ((last1 - first1) + (last2 - first2)) - 1` -// comparisons and applications of each projection. -// -// Remarks: If `[first1, last1)` contains `m` elements that are equivalent to -// each other and `[first2, last2)` contains `n` elements that are equivalent to -// them, the last `max(m - n, 0)` elements from `[first1, last1)` are copied to -// the output range, in order. -// -// Reference: -// https://wg21.link/set.difference#:~:text=ranges::set_difference(I1 -template < - typename InputIterator1, - typename InputIterator2, - typename OutputIterator, - typename Comp = ranges::less, - typename Proj1 = std::identity, - typename Proj2 = std::identity, - typename = internal::iterator_category_t, - typename = internal::iterator_category_t, - typename = internal::iterator_category_t, - typename = std::indirect_result_t, - std::projected>, - typename = std::indirect_result_t, - std::projected>> -constexpr auto set_difference(InputIterator1 first1, - InputIterator1 last1, - InputIterator2 first2, - InputIterator2 last2, - OutputIterator result, - Comp comp = {}, - Proj1 proj1 = {}, - Proj2 proj2 = {}) { - // Needs to opt-in to all permutations, since std::set_difference expects - // comp(proj1(lhs), proj2(rhs)) and comp(proj2(lhs), proj1(rhs)) to compile. - return std::set_difference( - first1, last1, first2, last2, result, - internal::PermutedProjectedBinaryPredicate(comp, proj1, proj2)); -} - -// Preconditions: The ranges `range1` and `range2` are sorted with respect to -// `comp` and `proj1` or `proj2`, respectively. The resulting range does not -// overlap with either of the original ranges. -// -// Effects: Copies the elements of `range1` which are not present in `range2` -// to the range beginning at `result`. The elements in the constructed range are -// sorted. -// -// Returns: The end of the constructed range. -// -// Complexity: At most `2 * (size(range1) + size(range2)) - 1` comparisons and -// applications of each projection. -// -// Remarks: Stable. If `range1` contains `m` elements that are equivalent to -// each other and `range2` contains `n` elements that are equivalent to them, -// the last `max(m - n, 0)` elements from `range1` are copied to the output -// range, in order. -// -// Reference: -// https://wg21.link/set.difference#:~:text=ranges::set_difference(R1 -template , - typename = internal::range_category_t, - typename = internal::iterator_category_t, - typename = - std::indirect_result_t, Proj1>, - std::projected, Proj2>>, - typename = - std::indirect_result_t, Proj2>, - std::projected, Proj1>>> -constexpr auto set_difference(Range1&& range1, - Range2&& range2, - OutputIterator result, - Comp comp = {}, - Proj1 proj1 = {}, - Proj2 proj2 = {}) { - return ranges::set_difference( - std::ranges::begin(range1), std::ranges::end(range1), - std::ranges::begin(range2), std::ranges::end(range2), result, - std::move(comp), std::move(proj1), std::move(proj2)); -} - -// [set.symmetric.difference] set_symmetric_difference -// Reference: https://wg21.link/set.symmetric.difference - -// Preconditions: The ranges `[first1, last1)` and `[first2, last2)` are sorted -// with respect to `comp` and `proj1` or `proj2`, respectively. The resulting -// range does not overlap with either of the original ranges. -// -// Effects: Copies the elements of the range `[first1, last1)` that are not -// present in the range `[first2, last2)`, and the elements of the range -// `[first2, last2)` that are not present in the range `[first1, last1)` to the -// range beginning at `result`. The elements in the constructed range are -// sorted. -// -// Returns: The end of the constructed range. -// -// Complexity: At most `2 * ((last1 - first1) + (last2 - first2)) - 1` -// comparisons and applications of each projection. -// -// Remarks: Stable. If `[first1, last1)` contains `m` elements that are -// equivalent to each other and `[first2, last2)` contains `n` elements that are -// equivalent to them, then `|m - n|` of those elements shall be copied to the -// output range: the last `m - n` of these elements from `[first1, last1)` if -// `m > n`, and the last `n - m` of these elements from `[first2, last2)` if -// `m < n`. In either case, the elements are copied in order. -// -// Reference: -// https://wg21.link/set.symmetric.difference#:~:text=set_symmetric_difference(I1 -template < - typename InputIterator1, - typename InputIterator2, - typename OutputIterator, - typename Comp = ranges::less, - typename Proj1 = std::identity, - typename Proj2 = std::identity, - typename = internal::iterator_category_t, - typename = internal::iterator_category_t, - typename = internal::iterator_category_t, - typename = std::indirect_result_t, - std::projected>, - typename = std::indirect_result_t, - std::projected>> -constexpr auto set_symmetric_difference(InputIterator1 first1, - InputIterator1 last1, - InputIterator2 first2, - InputIterator2 last2, - OutputIterator result, - Comp comp = {}, - Proj1 proj1 = {}, - Proj2 proj2 = {}) { - // Needs to opt-in to all permutations, since std::set_symmetric_difference - // expects comp(proj1(lhs), proj2(rhs)) and comp(proj2(lhs), proj1(rhs)) to - // compile. - return std::set_symmetric_difference( - first1, last1, first2, last2, result, - internal::PermutedProjectedBinaryPredicate(comp, proj1, proj2)); -} - -// Preconditions: The ranges `range1` and `range2` are sorted with respect to -// `comp` and `proj1` or `proj2`, respectively. The resulting range does not -// overlap with either of the original ranges. -// -// Effects: Copies the elements of `range1` that are not present in `range2`, -// and the elements of `range2` that are not present in `range1` to the range -// beginning at `result`. The elements in the constructed range are sorted. -// -// Returns: The end of the constructed range. -// -// Complexity: At most `2 * (size(range1) + size(range2)) - 1` comparisons and -// applications of each projection. -// -// Remarks: Stable. If `range1` contains `m` elements that are equivalent to -// each other and `range2` contains `n` elements that are equivalent to them, -// then `|m - n|` of those elements shall be copied to the output range: the -// last `m - n` of these elements from `range1` if `m > n`, and the last `n - m` -// of these elements from `range2` if `m < n`. In either case, the elements are -// copied in order. -// -// Reference: -// https://wg21.link/set.symmetric.difference#:~:text=set_symmetric_difference(R1 -template , - typename = internal::range_category_t, - typename = internal::iterator_category_t, - typename = - std::indirect_result_t, Proj1>, - std::projected, Proj2>>, - typename = - std::indirect_result_t, Proj2>, - std::projected, Proj1>>> -constexpr auto set_symmetric_difference(Range1&& range1, - Range2&& range2, - OutputIterator result, - Comp comp = {}, - Proj1 proj1 = {}, - Proj2 proj2 = {}) { - return ranges::set_symmetric_difference( - std::ranges::begin(range1), std::ranges::end(range1), - std::ranges::begin(range2), std::ranges::end(range2), result, - std::move(comp), std::move(proj1), std::move(proj2)); -} - -// [alg.heap.operations] Heap operations -// Reference: https://wg21.link/alg.heap.operations - -// [push.heap] push_heap -// Reference: https://wg21.link/push.heap - -// Preconditions: The range `[first, last - 1)` is a valid heap with respect to -// `comp` and `proj`. -// -// Effects: Places the value in the location `last - 1` into the resulting heap -// `[first, last)`. -// -// Returns: `last`. -// -// Complexity: At most `log(last - first)` comparisons and twice as many -// projections. -// -// Reference: https://wg21.link/push.heap#:~:text=ranges::push_heap(I -template , - typename = std::indirect_result_t< - Comp&, - std::projected, - std::projected>> -constexpr auto push_heap(RandomAccessIterator first, - RandomAccessIterator last, - Comp comp = {}, - Proj proj = {}) { - std::push_heap(first, last, - internal::ProjectedBinaryPredicate(comp, proj, proj)); - return last; -} - -// Preconditions: The range `[begin(range), end(range) - 1)` is a valid heap -// with respect to `comp` and `proj`. -// -// Effects: Places the value in the location `end(range) - 1` into the resulting -// heap `range`. -// -// Returns: `end(range)`. -// -// Complexity: At most `log(size(range))` comparisons and twice as many -// projections. -// -// Reference: https://wg21.link/push.heap#:~:text=ranges::push_heap(R -template < - typename Range, - typename Comp = ranges::less, - typename Proj = std::identity, - typename = internal::range_category_t, - typename = std::indirect_result_t, Proj>, - std::projected, Proj>>> -constexpr auto push_heap(Range&& range, Comp comp = {}, Proj proj = {}) { - return ranges::push_heap(std::ranges::begin(range), std::ranges::end(range), - std::move(comp), std::move(proj)); -} - -// [pop.heap] pop_heap -// Reference: https://wg21.link/pop.heap - -// Preconditions: The range `[first, last)` is a valid non-empty heap with -// respect to `comp` and `proj`. -// -// Effects: Swaps the value in the location `first` with the value in the -// location `last - 1` and makes `[first, last - 1)` into a heap with respect to -// `comp` and `proj`. -// -// Returns: `last`. -// -// Complexity: At most `2 log(last - first)` comparisons and twice as many -// projections. -// -// Reference: https://wg21.link/pop.heap#:~:text=ranges::pop_heap(I -template , - typename = std::indirect_result_t< - Comp&, - std::projected, - std::projected>> -constexpr auto pop_heap(RandomAccessIterator first, - RandomAccessIterator last, - Comp comp = {}, - Proj proj = {}) { - std::pop_heap(first, last, - internal::ProjectedBinaryPredicate(comp, proj, proj)); - return last; -} - -// Preconditions: `range` is a valid non-empty heap with respect to `comp` and -// `proj`. -// -// Effects: Swaps the value in the location `begin(range)` with the value in the -// location `end(range) - 1` and makes `[begin(range), end(range) - 1)` into a -// heap with respect to `comp` and `proj`. -// -// Returns: `end(range)`. -// -// Complexity: At most `2 log(size(range))` comparisons and twice as many -// projections. -// -// Reference: https://wg21.link/pop.heap#:~:text=ranges::pop_heap(R -template < - typename Range, - typename Comp = ranges::less, - typename Proj = std::identity, - typename = internal::range_category_t, - typename = std::indirect_result_t, Proj>, - std::projected, Proj>>> -constexpr auto pop_heap(Range&& range, Comp comp = {}, Proj proj = {}) { - return ranges::pop_heap(std::ranges::begin(range), std::ranges::end(range), - std::move(comp), std::move(proj)); -} - -// [make.heap] make_heap -// Reference: https://wg21.link/make.heap - -// Effects: Constructs a heap with respect to `comp` and `proj` out of the range -// `[first, last)`. -// -// Returns: `last`. -// -// Complexity: At most `3 * (last - first)` comparisons and twice as many -// projections. -// -// Reference: https://wg21.link/make.heap#:~:text=ranges::make_heap(I -template , - typename = std::indirect_result_t< - Comp&, - std::projected, - std::projected>> -constexpr auto make_heap(RandomAccessIterator first, - RandomAccessIterator last, - Comp comp = {}, - Proj proj = {}) { - std::make_heap(first, last, - internal::ProjectedBinaryPredicate(comp, proj, proj)); - return last; -} - -// Effects: Constructs a heap with respect to `comp` and `proj` out of `range`. -// -// Returns: `end(range)`. -// -// Complexity: At most `3 * size(range)` comparisons and twice as many -// projections. -// -// Reference: https://wg21.link/make.heap#:~:text=ranges::make_heap(R -template < - typename Range, - typename Comp = ranges::less, - typename Proj = std::identity, - typename = internal::range_category_t, - typename = std::indirect_result_t, Proj>, - std::projected, Proj>>> -constexpr auto make_heap(Range&& range, Comp comp = {}, Proj proj = {}) { - return ranges::make_heap(std::ranges::begin(range), std::ranges::end(range), - std::move(comp), std::move(proj)); -} - -// [sort.heap] sort_heap -// Reference: https://wg21.link/sort.heap - -// Preconditions: The range `[first, last)` is a valid heap with respect to -// `comp` and `proj`. -// -// Effects: Sorts elements in the heap `[first, last)` with respect to `comp` -// and `proj`. -// -// Returns: `last`. -// -// Complexity: At most `2 N log N` comparisons, where `N = last - first`, and -// twice as many projections. -// -// Reference: https://wg21.link/sort.heap#:~:text=ranges::sort_heap(I -template , - typename = std::indirect_result_t< - Comp&, - std::projected, - std::projected>> -constexpr auto sort_heap(RandomAccessIterator first, - RandomAccessIterator last, - Comp comp = {}, - Proj proj = {}) { - std::sort_heap(first, last, - internal::ProjectedBinaryPredicate(comp, proj, proj)); - return last; -} - -// Preconditions: `range` is a valid heap with respect to `comp` and `proj`. -// -// Effects: Sorts elements in the heap `range` with respect to `comp` and -// `proj`. -// -// Returns: `end(range)`. -// -// Complexity: At most `2 N log N` comparisons, where `N = size(range)`, and -// twice as many projections. -// -// Reference: https://wg21.link/sort.heap#:~:text=ranges::sort_heap(R -template < - typename Range, - typename Comp = ranges::less, - typename Proj = std::identity, - typename = internal::range_category_t, - typename = std::indirect_result_t, Proj>, - std::projected, Proj>>> -constexpr auto sort_heap(Range&& range, Comp comp = {}, Proj proj = {}) { - return ranges::sort_heap(std::ranges::begin(range), std::ranges::end(range), - std::move(comp), std::move(proj)); -} - -// [is.heap] is_heap -// Reference: https://wg21.link/is.heap - -// Returns: Whether the range `[first, last)` is a heap with respect to `comp` -// and `proj`. -// -// Complexity: Linear. -// -// Reference: https://wg21.link/is.heap#:~:text=ranges::is_heap(I -template , - typename = std::indirect_result_t< - Comp&, - std::projected, - std::projected>> -constexpr auto is_heap(RandomAccessIterator first, - RandomAccessIterator last, - Comp comp = {}, - Proj proj = {}) { - return std::is_heap(first, last, - internal::ProjectedBinaryPredicate(comp, proj, proj)); -} - -// Returns: Whether `range` is a heap with respect to `comp` and `proj`. -// -// Complexity: Linear. -// -// Reference: https://wg21.link/is.heap#:~:text=ranges::is_heap(R -template < - typename Range, - typename Comp = ranges::less, - typename Proj = std::identity, - typename = internal::range_category_t, - typename = std::indirect_result_t, Proj>, - std::projected, Proj>>> -constexpr auto is_heap(Range&& range, Comp comp = {}, Proj proj = {}) { - return ranges::is_heap(std::ranges::begin(range), std::ranges::end(range), - std::move(comp), std::move(proj)); -} - -// Returns: The last iterator `i` in `[first, last]` for which the range -// `[first, i)` is a heap with respect to `comp` and `proj`. -// -// Complexity: Linear. -// -// Reference: https://wg21.link/is.heap#:~:text=ranges::is_heap_until(I -template , - typename = std::indirect_result_t< - Comp&, - std::projected, - std::projected>> -constexpr auto is_heap_until(RandomAccessIterator first, - RandomAccessIterator last, - Comp comp = {}, - Proj proj = {}) { - return std::is_heap_until( - first, last, internal::ProjectedBinaryPredicate(comp, proj, proj)); -} - -// Returns: The last iterator `i` in `[begin(range), end(range)]` for which the -// range `[begin(range), i)` is a heap with respect to `comp` and `proj`. -// -// Complexity: Linear. -// -// Reference: https://wg21.link/is.heap#:~:text=ranges::is_heap_until(R -template < - typename Range, - typename Comp = ranges::less, - typename Proj = std::identity, - typename = internal::range_category_t, - typename = std::indirect_result_t, Proj>, - std::projected, Proj>>> -constexpr auto is_heap_until(Range&& range, Comp comp = {}, Proj proj = {}) { - return ranges::is_heap_until(std::ranges::begin(range), - std::ranges::end(range), std::move(comp), - std::move(proj)); -} - -// [alg.min.max] Minimum and maximum -// Reference: https://wg21.link/alg.min.max - -// Returns: The smaller value. Returns the first argument when the arguments are -// equivalent. -// -// Complexity: Exactly one comparison and two applications of the projection, if -// any. -// -// Reference: https://wg21.link/alg.min.max#:~:text=ranges::min -template -constexpr const T& min(const T& a, const T& b, Comp comp = {}, Proj proj = {}) { - return std::invoke(comp, std::invoke(proj, b), std::invoke(proj, a)) ? b : a; -} - -// Preconditions: `!empty(ilist)`. -// -// Returns: The smallest value in the input range. Returns a copy of the -// leftmost element when several elements are equivalent to the smallest. -// -// Complexity: Exactly `size(ilist) - 1` comparisons and twice as many -// applications of the projection, if any. -// -// Reference: https://wg21.link/alg.min.max#:~:text=ranges::min(initializer_list -template -constexpr T min(std::initializer_list ilist, - Comp comp = {}, - Proj proj = {}) { - return *std::min_element( - ilist.begin(), ilist.end(), - internal::ProjectedBinaryPredicate(comp, proj, proj)); -} - -// Preconditions: `!empty(range)`. -// -// Returns: The smallest value in the input range. Returns a copy of the -// leftmost element when several elements are equivalent to the smallest. -// -// Complexity: Exactly `size(range) - 1` comparisons and twice as many -// applications of the projection, if any. -// -// Reference: https://wg21.link/alg.min.max#:~:text=ranges::min(R -template > -constexpr auto min(Range&& range, Comp comp = {}, Proj proj = {}) { - return *std::min_element( - std::ranges::begin(range), std::ranges::end(range), - internal::ProjectedBinaryPredicate(comp, proj, proj)); -} - -// Returns: The larger value. Returns the first argument when the arguments are -// equivalent. -// -// Complexity: Exactly one comparison and two applications of the projection, if -// any. -// -// Reference: https://wg21.link/alg.min.max#:~:text=ranges::max -template -constexpr const T& max(const T& a, const T& b, Comp comp = {}, Proj proj = {}) { - return std::invoke(comp, std::invoke(proj, a), std::invoke(proj, b)) ? b : a; -} - -// Preconditions: `!empty(ilist)`. -// -// Returns: The largest value in the input range. Returns a copy of the leftmost -// element when several elements are equivalent to the largest. -// -// Complexity: Exactly `size(ilist) - 1` comparisons and twice as many -// applications of the projection, if any. -// -// Reference: https://wg21.link/alg.min.max#:~:text=ranges::max(initializer_list -template -constexpr T max(std::initializer_list ilist, - Comp comp = {}, - Proj proj = {}) { - return *std::max_element( - ilist.begin(), ilist.end(), - internal::ProjectedBinaryPredicate(comp, proj, proj)); -} - -// Preconditions: `!empty(range)`. -// -// Returns: The largest value in the input range. Returns a copy of the leftmost -// element when several elements are equivalent to the smallest. -// -// Complexity: Exactly `size(range) - 1` comparisons and twice as many -// applications of the projection, if any. -// -// Reference: https://wg21.link/alg.min.max#:~:text=ranges::max(R -template > -constexpr auto max(Range&& range, Comp comp = {}, Proj proj = {}) { - return *std::max_element( - std::ranges::begin(range), std::ranges::end(range), - internal::ProjectedBinaryPredicate(comp, proj, proj)); -} - -// Returns: `{b, a}` if `b` is smaller than `a`, and `{a, b}` otherwise. -// -// Complexity: Exactly one comparison and two applications of the projection, if -// any. -// -// Reference: https://wg21.link/alg.min.max#:~:text=ranges::minmax -template -constexpr auto minmax(const T& a, const T& b, Comp comp = {}, Proj proj = {}) { - return std::minmax(a, b, - internal::ProjectedBinaryPredicate(comp, proj, proj)); -} - -// Preconditions: `!empty(ilist)`. -// -// Returns: Let `X` be the return type. Returns `X{x, y}`, where `x` is a copy -// of the leftmost element with the smallest value and `y` a copy of the -// rightmost element with the largest value in the input range. -// -// Complexity: At most `(3/2) size(ilist)` applications of the corresponding -// predicate and twice as many applications of the projection, if any. -// -// Reference: -// https://wg21.link/alg.min.max#:~:text=ranges::minmax(initializer_list -template -constexpr auto minmax(std::initializer_list ilist, - Comp comp = {}, - Proj proj = {}) { - auto it = - std::minmax_element(std::ranges::begin(ilist), std::ranges::end(ilist), - internal::ProjectedBinaryPredicate(comp, proj, proj)); - return std::pair{*it.first, *it.second}; -} - -// Preconditions: `!empty(range)`. -// -// Returns: Let `X` be the return type. Returns `X{x, y}`, where `x` is a copy -// of the leftmost element with the smallest value and `y` a copy of the -// rightmost element with the largest value in the input range. -// -// Complexity: At most `(3/2) size(range)` applications of the corresponding -// predicate and twice as many applications of the projection, if any. -// -// Reference: https://wg21.link/alg.min.max#:~:text=ranges::minmax(R -template > -constexpr auto minmax(Range&& range, Comp comp = {}, Proj proj = {}) { - using T = range_value_t; - auto it = - std::minmax_element(std::ranges::begin(range), std::ranges::end(range), - internal::ProjectedBinaryPredicate(comp, proj, proj)); - return std::pair{*it.first, *it.second}; -} - -// Returns: The first iterator i in the range `[first, last)` such that for -// every iterator `j` in the range `[first, last)`, -// `bool(invoke(comp, invoke(proj, *j), invoke(proj, *i)))` is `false`. Returns -// `last` if `first == last`. -// -// Complexity: Exactly `max(last - first - 1, 0)` comparisons and twice as -// many projections. -// -// Reference: https://wg21.link/alg.min.max#:~:text=ranges::min_element(I -template < - typename ForwardIterator, - typename Comp = ranges::less, - typename Proj = std::identity, - typename = internal::iterator_category_t, - typename = std::indirect_result_t, - std::projected>> -constexpr auto min_element(ForwardIterator first, - ForwardIterator last, - Comp comp = {}, - Proj proj = {}) { - return std::min_element(first, last, - internal::ProjectedBinaryPredicate(comp, proj, proj)); -} - -// Returns: The first iterator i in `range` such that for every iterator `j` in -// `range`, `bool(invoke(comp, invoke(proj, *j), invoke(proj, *i)))` is `false`. -// Returns `end(range)` if `empty(range)`. -// -// Complexity: Exactly `max(size(range) - 1, 0)` comparisons and twice as many -// projections. -// -// Reference: https://wg21.link/alg.min.max#:~:text=ranges::min_element(R -template < - typename Range, - typename Comp = ranges::less, - typename Proj = std::identity, - typename = internal::range_category_t, - typename = std::indirect_result_t, Proj>, - std::projected, Proj>>> -constexpr auto min_element(Range&& range, Comp comp = {}, Proj proj = {}) { - return ranges::min_element(std::ranges::begin(range), std::ranges::end(range), - std::move(comp), std::move(proj)); -} - -// Returns: The first iterator i in the range `[first, last)` such that for -// every iterator `j` in the range `[first, last)`, -// `bool(invoke(comp, invoke(proj, *i), invoke(proj, *j)))` is `false`. -// Returns `last` if `first == last`. -// -// Complexity: Exactly `max(last - first - 1, 0)` comparisons and twice as -// many projections. -// -// Reference: https://wg21.link/alg.min.max#:~:text=ranges::max_element(I -template < - typename ForwardIterator, - typename Comp = ranges::less, - typename Proj = std::identity, - typename = internal::iterator_category_t, - typename = std::indirect_result_t, - std::projected>> -constexpr auto max_element(ForwardIterator first, - ForwardIterator last, - Comp comp = {}, - Proj proj = {}) { - return std::max_element(first, last, - internal::ProjectedBinaryPredicate(comp, proj, proj)); -} - -// Returns: The first iterator i in `range` such that for every iterator `j` -// in `range`, `bool(invoke(comp, invoke(proj, *j), invoke(proj, *j)))` is -// `false`. Returns `end(range)` if `empty(range)`. -// -// Complexity: Exactly `max(size(range) - 1, 0)` comparisons and twice as many -// projections. -// -// Reference: https://wg21.link/alg.min.max#:~:text=ranges::max_element(R -template < - typename Range, - typename Comp = ranges::less, - typename Proj = std::identity, - typename = internal::range_category_t, - typename = std::indirect_result_t, Proj>, - std::projected, Proj>>> -constexpr auto max_element(Range&& range, Comp comp = {}, Proj proj = {}) { - return ranges::max_element(std::ranges::begin(range), std::ranges::end(range), - std::move(comp), std::move(proj)); -} - -// Returns: `{first, first}` if `[first, last)` is empty, otherwise `{m, M}`, -// where `m` is the first iterator in `[first, last)` such that no iterator in -// the range refers to a smaller element, and where `M` is the last iterator -// in -// `[first, last)` such that no iterator in the range refers to a larger -// element. -// -// Complexity: Let `N` be `last - first`. At most `max(3/2 (N − 1), 0)` -// comparisons and twice as many applications of the projection, if any. -// -// Reference: https://wg21.link/alg.min.max#:~:text=ranges::minmax_element(I -template < - typename ForwardIterator, - typename Comp = ranges::less, - typename Proj = std::identity, - typename = internal::iterator_category_t, - typename = std::indirect_result_t, - std::projected>> -constexpr auto minmax_element(ForwardIterator first, - ForwardIterator last, - Comp comp = {}, - Proj proj = {}) { - return std::minmax_element( - first, last, internal::ProjectedBinaryPredicate(comp, proj, proj)); -} - -// Returns: `{begin(range), begin(range)}` if `range` is empty, otherwise -// `{m, M}`, where `m` is the first iterator in `range` such that no iterator -// in the range refers to a smaller element, and where `M` is the last -// iterator in `range` such that no iterator in the range refers to a larger -// element. -// -// Complexity: Let `N` be `size(range)`. At most `max(3/2 (N − 1), 0)` -// comparisons and twice as many applications of the projection, if any. -// -// Reference: https://wg21.link/alg.min.max#:~:text=ranges::minmax_element(R -template < - typename Range, - typename Comp = ranges::less, - typename Proj = std::identity, - typename = internal::range_category_t, - typename = std::indirect_result_t, Proj>, - std::projected, Proj>>> -constexpr auto minmax_element(Range&& range, Comp comp = {}, Proj proj = {}) { - return ranges::minmax_element(std::ranges::begin(range), - std::ranges::end(range), std::move(comp), - std::move(proj)); -} - -// [alg.clamp] Bounded value -// Reference: https://wg21.link/alg.clamp - -// Preconditions: `bool(invoke(comp, invoke(proj, hi), invoke(proj, lo)))` is -// `false`. -// -// Returns: `lo` if `bool(invoke(comp, invoke(proj, v), invoke(proj, lo)))` is -// `true`, `hi` if `bool(invoke(comp, invoke(proj, hi), invoke(proj, v)))` is -// `true`, otherwise `v`. -// -// Complexity: At most two comparisons and three applications of the -// projection. -// -// Reference: https://wg21.link/alg.clamp#:~:text=ranges::clamp -template -constexpr const T& clamp(const T& v, - const T& lo, - const T& hi, - Comp comp = {}, - Proj proj = {}) { - auto&& projected_v = std::invoke(proj, v); - if (std::invoke(comp, projected_v, std::invoke(proj, lo))) { - return lo; - } - - return std::invoke(comp, std::invoke(proj, hi), projected_v) ? hi : v; -} - -// [alg.lex.comparison] Lexicographical comparison -// Reference: https://wg21.link/alg.lex.comparison - -// Returns: `true` if and only if the sequence of elements defined by the range -// `[first1, last1)` is lexicographically less than the sequence of elements -// defined by the range `[first2, last2)`. -// -// Complexity: At most `2 min(last1 - first1, last2 - first2)` applications of -// the corresponding comparison and each projection, if any. -// -// Remarks: If two sequences have the same number of elements and their -// corresponding elements (if any) are equivalent, then neither sequence is -// lexicographically less than the other. If one sequence is a proper prefix of -// the other, then the shorter sequence is lexicographically less than the -// longer sequence. Otherwise, the lexicographical comparison of the sequences -// yields the same result as the comparison of the first corresponding pair of -// elements that are not equivalent. -// -// Reference: -// https://wg21.link/alg.lex.comparison#:~:text=lexicographical_compare(I1 -template < - typename ForwardIterator1, - typename ForwardIterator2, - typename Comp = ranges::less, - typename Proj1 = std::identity, - typename Proj2 = std::identity, - typename = internal::iterator_category_t, - typename = internal::iterator_category_t, - typename = std::indirect_result_t, - std::projected>, - typename = std::indirect_result_t, - std::projected>> -constexpr bool lexicographical_compare(ForwardIterator1 first1, - ForwardIterator1 last1, - ForwardIterator2 first2, - ForwardIterator2 last2, - Comp comp = {}, - Proj1 proj1 = {}, - Proj2 proj2 = {}) { - for (; first1 != last1 && first2 != last2; ++first1, ++first2) { - auto&& projected_first1 = std::invoke(proj1, *first1); - auto&& projected_first2 = std::invoke(proj2, *first2); - if (std::invoke(comp, projected_first1, projected_first2)) { - return true; - } - if (std::invoke(comp, projected_first2, projected_first1)) { - return false; - } - } - - // `first2 != last2` is equivalent to `first1 == last1 && first2 != last2` - // here, since we broke out of the loop above. - return first2 != last2; -} - -// Returns: `true` if and only if the sequence of elements defined by `range1` -// is lexicographically less than the sequence of elements defined by `range2`. -// -// Complexity: At most `2 min(size(range1), size(range2))` applications of the -// corresponding comparison and each projection, if any. -// -// Remarks: If two sequences have the same number of elements and their -// corresponding elements (if any) are equivalent, then neither sequence is -// lexicographically less than the other. If one sequence is a proper prefix of -// the other, then the shorter sequence is lexicographically less than the -// longer sequence. Otherwise, the lexicographical comparison of the sequences -// yields the same result as the comparison of the first corresponding pair of -// elements that are not equivalent. -// -// Reference: -// https://wg21.link/alg.lex.comparison#:~:text=lexicographical_compare(R1 -template , - typename = internal::range_category_t, - typename = - std::indirect_result_t, Proj1>, - std::projected, Proj2>>, - typename = - std::indirect_result_t, Proj2>, - std::projected, Proj1>>> -constexpr bool lexicographical_compare(Range1&& range1, - Range2&& range2, - Comp comp = {}, - Proj1 proj1 = {}, - Proj2 proj2 = {}) { - return ranges::lexicographical_compare( - std::ranges::begin(range1), std::ranges::end(range1), - std::ranges::begin(range2), std::ranges::end(range2), std::move(comp), - std::move(proj1), std::move(proj2)); -} - -// [alg.permutation.generators] Permutation generators -// Reference: https://wg21.link/alg.permutation.generators - -// Effects: Takes a sequence defined by the range `[first, last)` and transforms -// it into the next permutation. The next permutation is found by assuming that -// the set of all permutations is lexicographically sorted with respect to -// `comp` and `proj`. If no such permutation exists, transforms the sequence -// into the first permutation; that is, the ascendingly-sorted one. -// -// Returns: `true` if a next permutation was found and otherwise `false`. -// -// Complexity: At most `(last - first) / 2` swaps. -// -// Reference: -// https://wg21.link/alg.permutation.generators#:~:text=next_permutation(I -template , - typename = std::indirect_result_t< - Comp&, - std::projected, - std::projected>> -constexpr auto next_permutation(BidirectionalIterator first, - BidirectionalIterator last, - Comp comp = {}, - Proj proj = {}) { - return std::next_permutation( - first, last, internal::ProjectedBinaryPredicate(comp, proj, proj)); -} - -// Effects: Takes a sequence defined by `range` and transforms it into the next -// permutation. The next permutation is found by assuming that the set of all -// permutations is lexicographically sorted with respect to `comp` and `proj`. -// If no such permutation exists, transforms the sequence into the first -// permutation; that is, the ascendingly-sorted one. -// -// Returns: `true` if a next permutation was found and otherwise `false`. -// -// Complexity: At most `size(range) / 2` swaps. -// -// Reference: -// https://wg21.link/alg.permutation.generators#:~:text=next_permutation(R -template < - typename Range, - typename Comp = ranges::less, - typename Proj = std::identity, - typename = internal::range_category_t, - typename = std::indirect_result_t, Proj>, - std::projected, Proj>>> -constexpr auto next_permutation(Range&& range, Comp comp = {}, Proj proj = {}) { - return ranges::next_permutation(std::ranges::begin(range), - std::ranges::end(range), std::move(comp), - std::move(proj)); -} - -// Effects: Takes a sequence defined by the range `[first, last)` and transforms -// it into the previous permutation. The previous permutation is found by -// assuming that the set of all permutations is lexicographically sorted with -// respect to `comp` and `proj`. If no such permutation exists, transforms the -// sequence into the last permutation; that is, the decreasingly-sorted one. -// -// Returns: `true` if a next permutation was found and otherwise `false`. -// -// Complexity: At most `(last - first) / 2` swaps. -// -// Reference: -// https://wg21.link/alg.permutation.generators#:~:text=prev_permutation(I -template , - typename = std::indirect_result_t< - Comp&, - std::projected, - std::projected>> -constexpr auto prev_permutation(BidirectionalIterator first, - BidirectionalIterator last, - Comp comp = {}, - Proj proj = {}) { - return std::prev_permutation( - first, last, internal::ProjectedBinaryPredicate(comp, proj, proj)); -} - -// Effects: Takes a sequence defined by `range` and transforms it into the -// previous permutation. The previous permutation is found by assuming that the -// set of all permutations is lexicographically sorted with respect to `comp` -// and `proj`. If no such permutation exists, transforms the sequence into the -// last permutation; that is, the decreasingly-sorted one. -// -// Returns: `true` if a previous permutation was found and otherwise `false`. -// -// Complexity: At most `size(range) / 2` swaps. -// -// Reference: -// https://wg21.link/alg.permutation.generators#:~:text=prev_permutation(R -template < - typename Range, - typename Comp = ranges::less, - typename Proj = std::identity, - typename = internal::range_category_t, - typename = std::indirect_result_t, Proj>, - std::projected, Proj>>> -constexpr auto prev_permutation(Range&& range, Comp comp = {}, Proj proj = {}) { - return ranges::prev_permutation(std::ranges::begin(range), - std::ranges::end(range), std::move(comp), - std::move(proj)); -} - -} // namespace ranges - -} // namespace base - -#endif // BASE_RANGES_ALGORITHM_H_ diff --git a/naiveproxy/src/base/ranges/functional.h b/naiveproxy/src/base/ranges/functional.h deleted file mode 100644 index dc3a812443..0000000000 --- a/naiveproxy/src/base/ranges/functional.h +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2020 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef BASE_RANGES_FUNCTIONAL_H_ -#define BASE_RANGES_FUNCTIONAL_H_ - -#include -#include -#include - -namespace base { - -namespace ranges { - -// Simplified implementations of C++20's std::ranges comparison function -// objects. As opposed to the std::ranges implementation, these versions do not -// constrain the passed-in types. -// -// Reference: https://wg21.link/range.cmp -using equal_to = std::equal_to<>; -using not_equal_to = std::not_equal_to<>; -using greater = std::greater<>; -using less = std::less<>; -using greater_equal = std::greater_equal<>; -using less_equal = std::less_equal<>; - -} // namespace ranges - -} // namespace base - -#endif // BASE_RANGES_FUNCTIONAL_H_ diff --git a/naiveproxy/src/base/ranges/ranges.h b/naiveproxy/src/base/ranges/ranges.h deleted file mode 100644 index b8ba4e6b74..0000000000 --- a/naiveproxy/src/base/ranges/ranges.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2020 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifdef UNSAFE_BUFFERS_BUILD -// TODO(crbug.com/40284755): Remove this and spanify to fix the errors. -#pragma allow_unsafe_buffers -#endif - -#ifndef BASE_RANGES_RANGES_H_ -#define BASE_RANGES_RANGES_H_ - -#include -#include -#include -#include - -namespace base::ranges { - -// Implementation of C++20's std::ranges::iterator_t. -// -// Reference: https://wg21.link/ranges.syn#:~:text=iterator_t -template -using iterator_t = decltype(std::begin(std::declval())); - -// Implementation of C++20's std::ranges::range_value_t. -// -// Reference: https://wg21.link/ranges.syn#:~:text=range_value_t -template -using range_value_t = std::iter_value_t>; - -} // namespace base::ranges - -#endif // BASE_RANGES_RANGES_H_ diff --git a/naiveproxy/src/base/sampling_heap_profiler/poisson_allocation_sampler.cc b/naiveproxy/src/base/sampling_heap_profiler/poisson_allocation_sampler.cc index aff16589f9..2637da2ee8 100644 --- a/naiveproxy/src/base/sampling_heap_profiler/poisson_allocation_sampler.cc +++ b/naiveproxy/src/base/sampling_heap_profiler/poisson_allocation_sampler.cc @@ -17,7 +17,6 @@ #include "base/compiler_specific.h" #include "base/no_destructor.h" #include "base/rand_util.h" -#include "base/ranges/algorithm.h" #include "build/build_config.h" namespace base { @@ -451,7 +450,7 @@ void PoissonAllocationSampler::AddSamplesObserver(SamplesObserver* observer) { ScopedMuteThreadSamples no_reentrancy_scope; AutoLock lock(mutex_); - DCHECK(ranges::find(observers_, observer) == observers_.end()); + DCHECK(std::ranges::find(observers_, observer) == observers_.end()); bool profiler_was_stopped = observers_.empty(); observers_.push_back(observer); @@ -478,7 +477,7 @@ void PoissonAllocationSampler::RemoveSamplesObserver( ScopedMuteThreadSamples no_reentrancy_scope; AutoLock lock(mutex_); - auto it = ranges::find(observers_, observer); + auto it = std::ranges::find(observers_, observer); CHECK(it != observers_.end(), base::NotFatalUntil::M125); observers_.erase(it); diff --git a/naiveproxy/src/base/scoped_multi_source_observation.h b/naiveproxy/src/base/scoped_multi_source_observation.h index c9a1cff650..e440f592ff 100644 --- a/naiveproxy/src/base/scoped_multi_source_observation.h +++ b/naiveproxy/src/base/scoped_multi_source_observation.h @@ -7,12 +7,12 @@ #include +#include #include #include "base/check.h" #include "base/containers/contains.h" #include "base/memory/raw_ptr.h" -#include "base/ranges/algorithm.h" #include "base/scoped_observation_traits.h" namespace base { @@ -64,7 +64,7 @@ class ScopedMultiSourceObservation { // Remove the object passed to the constructor as an observer from |source|. void RemoveObservation(Source* source) { - auto it = base::ranges::find(sources_, source); + auto it = std::ranges::find(sources_, source); CHECK(it != sources_.end()); sources_.erase(it); Traits::RemoveObserver(source, observer_); diff --git a/naiveproxy/src/base/scoped_native_library.cc b/naiveproxy/src/base/scoped_native_library.cc index f3a5e2cc02..6146a8ca5e 100644 --- a/naiveproxy/src/base/scoped_native_library.cc +++ b/naiveproxy/src/base/scoped_native_library.cc @@ -12,12 +12,12 @@ void NativeLibraryTraits::Free(NativeLibrary library) { using BaseClass = ScopedGeneric; -ScopedNativeLibrary::ScopedNativeLibrary() : BaseClass(), error_() {} +ScopedNativeLibrary::ScopedNativeLibrary() = default; ScopedNativeLibrary::~ScopedNativeLibrary() = default; ScopedNativeLibrary::ScopedNativeLibrary(NativeLibrary library) - : BaseClass(library), error_() {} + : BaseClass(library) {} ScopedNativeLibrary::ScopedNativeLibrary(const FilePath& library_path) : ScopedNativeLibrary() { @@ -25,7 +25,7 @@ ScopedNativeLibrary::ScopedNativeLibrary(const FilePath& library_path) } ScopedNativeLibrary::ScopedNativeLibrary(ScopedNativeLibrary&& scoped_library) - : BaseClass(scoped_library.release()), error_() {} + : BaseClass(scoped_library.release()) {} void* ScopedNativeLibrary::GetFunctionPointer(const char* function_name) const { if (!is_valid()) { diff --git a/naiveproxy/src/base/sequence_checker_impl.cc b/naiveproxy/src/base/sequence_checker_impl.cc index bd2530a9e2..737041866f 100644 --- a/naiveproxy/src/base/sequence_checker_impl.cc +++ b/naiveproxy/src/base/sequence_checker_impl.cc @@ -11,7 +11,6 @@ #include "base/compiler_specific.h" #include "base/containers/contains.h" #include "base/debug/stack_trace.h" -#include "base/ranges/algorithm.h" #include "base/sequence_token.h" #include "base/synchronization/lock_subtle.h" #include "base/threading/platform_thread.h" @@ -191,9 +190,9 @@ void SequenceCheckerImpl::EnsureAssigned() const { // detail of `SequenceCheckerImpl` and doesn't provide mutual exclusion // guarantees to the caller). DCHECK(locks_.empty()); - ranges::remove_copy(subtle::GetTrackedLocksHeldByCurrentThread(), - std::back_inserter(locks_), - reinterpret_cast(&lock_)); + std::ranges::remove_copy(subtle::GetTrackedLocksHeldByCurrentThread(), + std::back_inserter(locks_), + reinterpret_cast(&lock_)); #endif // DCHECK_IS_ON() DCHECK(sequence_token_.IsValid()); diff --git a/naiveproxy/src/base/sequence_token.cc b/naiveproxy/src/base/sequence_token.cc index 6257e12a6c..2725279ae2 100644 --- a/naiveproxy/src/base/sequence_token.cc +++ b/naiveproxy/src/base/sequence_token.cc @@ -5,6 +5,7 @@ #include "base/sequence_token.h" #include "base/atomic_sequence_num.h" +#include "base/check.h" namespace base { namespace internal { diff --git a/naiveproxy/src/base/sequence_token.h b/naiveproxy/src/base/sequence_token.h index 060a235eac..43129ffe9b 100644 --- a/naiveproxy/src/base/sequence_token.h +++ b/naiveproxy/src/base/sequence_token.h @@ -5,8 +5,6 @@ #ifndef BASE_SEQUENCE_TOKEN_H_ #define BASE_SEQUENCE_TOKEN_H_ -// TODO: Remove this unused include once no other file indirectly depends on it. -#include "base/auto_reset.h" #include "base/base_export.h" namespace base { diff --git a/naiveproxy/src/base/stl_util.h b/naiveproxy/src/base/stl_util.h index 6444742df5..3c2d97c7b1 100644 --- a/naiveproxy/src/base/stl_util.h +++ b/naiveproxy/src/base/stl_util.h @@ -11,7 +11,6 @@ #include #include "base/check.h" -#include "base/ranges/algorithm.h" namespace base { @@ -40,8 +39,8 @@ void STLClearObject(T* obj) { // Returns a new ResultType containing the difference of two sorted containers. template ResultType STLSetDifference(const Arg1& a1, const Arg2& a2) { - DCHECK(ranges::is_sorted(a1)); - DCHECK(ranges::is_sorted(a2)); + DCHECK(std::ranges::is_sorted(a1)); + DCHECK(std::ranges::is_sorted(a2)); ResultType difference; std::set_difference(a1.begin(), a1.end(), a2.begin(), a2.end(), std::inserter(difference, difference.end())); @@ -51,8 +50,8 @@ ResultType STLSetDifference(const Arg1& a1, const Arg2& a2) { // Returns a new ResultType containing the union of two sorted containers. template ResultType STLSetUnion(const Arg1& a1, const Arg2& a2) { - DCHECK(ranges::is_sorted(a1)); - DCHECK(ranges::is_sorted(a2)); + DCHECK(std::ranges::is_sorted(a1)); + DCHECK(std::ranges::is_sorted(a2)); ResultType result; std::set_union(a1.begin(), a1.end(), a2.begin(), a2.end(), std::inserter(result, result.end())); @@ -63,8 +62,8 @@ ResultType STLSetUnion(const Arg1& a1, const Arg2& a2) { // containers. template ResultType STLSetIntersection(const Arg1& a1, const Arg2& a2) { - DCHECK(ranges::is_sorted(a1)); - DCHECK(ranges::is_sorted(a2)); + DCHECK(std::ranges::is_sorted(a1)); + DCHECK(std::ranges::is_sorted(a2)); ResultType result; std::set_intersection(a1.begin(), a1.end(), a2.begin(), a2.end(), std::inserter(result, result.end())); diff --git a/naiveproxy/src/base/strings/escape.cc b/naiveproxy/src/base/strings/escape.cc index 8ae5d4f1c9..995cddc217 100644 --- a/naiveproxy/src/base/strings/escape.cc +++ b/naiveproxy/src/base/strings/escape.cc @@ -422,7 +422,7 @@ std::string UnescapeURLWithAdjustmentsImpl( if (UnescapeUnsignedByteAtIndex(escaped_text, i, &non_utf8_byte)) { result.push_back(static_cast(non_utf8_byte)); if (adjustments) { - adjustments->push_back(OffsetAdjuster::Adjustment(i, 3, 1)); + adjustments->emplace_back(i, 3, 1); } i += 3; continue; @@ -454,7 +454,7 @@ std::string UnescapeURLWithAdjustmentsImpl( result.append(unescaped); if (adjustments) { for (size_t j = 0; j < unescaped.length(); ++j) { - adjustments->push_back(OffsetAdjuster::Adjustment(i + j * 3, 3, 1)); + adjustments->emplace_back(i + j * 3, 3, 1); } } i += 3 * unescaped.length(); diff --git a/naiveproxy/src/base/strings/safe_sprintf.cc b/naiveproxy/src/base/strings/safe_sprintf.cc index 233cb5d57f..8061e5b060 100644 --- a/naiveproxy/src/base/strings/safe_sprintf.cc +++ b/naiveproxy/src/base/strings/safe_sprintf.cc @@ -50,8 +50,7 @@ } while (0) #endif -namespace base { -namespace strings { +namespace base::strings { // The code in this file is extremely careful to be async-signal-safe. // @@ -119,10 +118,7 @@ class Buffer { // to ensure that the buffer is at least one byte in size, so that it fits // the trailing NUL that will be added by the destructor. The buffer also // must be smaller or equal to kSSizeMax in size. - Buffer(char* buffer, size_t size) - : buffer_(buffer), - size_(size - 1), // Account for trailing NUL byte - count_(0) { + Buffer(char* buffer, size_t size) : buffer_(buffer), size_(size - 1) { // MSVS2013's standard library doesn't mark max() as constexpr yet. cl.exe // supports static_cast but doesn't really implement constexpr yet so it doesn't // complain, but clang does. @@ -284,7 +280,7 @@ class Buffer { // Number of bytes that would have been emitted to the buffer, if the buffer // was sufficiently big. This number always excludes the trailing NUL byte // and it is guaranteed to never grow bigger than kSSizeMax-1. - size_t count_; + size_t count_ = 0; }; bool Buffer::IToASCII(bool sign, @@ -716,5 +712,4 @@ ssize_t SafeSNPrintf(char* buf, size_t sz, const char* fmt) { return buffer.GetCount(); } -} // namespace strings -} // namespace base +} // namespace base::strings diff --git a/naiveproxy/src/base/strings/strcat_internal.h b/naiveproxy/src/base/strings/strcat_internal.h index aa38f80f12..4d614f8af2 100644 --- a/naiveproxy/src/base/strings/strcat_internal.h +++ b/naiveproxy/src/base/strings/strcat_internal.h @@ -19,11 +19,18 @@ namespace base { namespace internal { +// Default to regular `std::basic_string::resize()`. +template +void Resize(std::basic_string& str, size_t total_size) { + str.resize(total_size); +} + // Optimized version of `std::basic_string::resize()` that skips zero // initialization of appended characters. Reading from the newly allocated // characters results in undefined behavior if they are not explicitly -// initialized afterwards. Currently proposed for standardization as -// std::basic_string::resize_and_overwrite: https://wg21.link/P1072R6 +// initialized afterwards. Available in C++23 as +// `std::basic_string::resize_and_overwrite()`: +// https://en.cppreference.com/w/cpp/string/basic_string/resize_and_overwrite template requires requires(std::basic_string& str, size_t total_size) { { str.__resize_default_init(total_size) } -> std::same_as; @@ -32,13 +39,6 @@ auto Resize(std::basic_string& str, size_t total_size) { str.__resize_default_init(total_size); } -// Fallback to regular std::basic_string::resize() if invoking -// __resize_default_init is ill-formed. -template -void Resize(std::basic_string& str, size_t total_size) { - str.resize(total_size); -} - // Appends `pieces` to `dest`. Instead of simply calling `dest.append()` // `pieces.size()` times, this method first resizes `dest` to be of the desired // size, and then appends each piece via `std::char_traits::copy`. This achieves diff --git a/naiveproxy/src/base/strings/string_slice.h b/naiveproxy/src/base/strings/string_slice.h index 1bf148f786..e070b6af80 100644 --- a/naiveproxy/src/base/strings/string_slice.h +++ b/naiveproxy/src/base/strings/string_slice.h @@ -5,6 +5,7 @@ #ifndef BASE_STRINGS_STRING_SLICE_H_ #define BASE_STRINGS_STRING_SLICE_H_ +#include #include #include diff --git a/naiveproxy/src/base/strings/string_util.cc b/naiveproxy/src/base/strings/string_util.cc index 34754565b9..2c3f3581aa 100644 --- a/naiveproxy/src/base/strings/string_util.cc +++ b/naiveproxy/src/base/strings/string_util.cc @@ -19,6 +19,7 @@ #include #include +#include #include #include #include @@ -27,7 +28,6 @@ #include "base/check_op.h" #include "base/no_destructor.h" -#include "base/ranges/algorithm.h" #include "base/strings/string_util_impl_helpers.h" #include "base/strings/string_util_internal.h" #include "base/strings/utf_string_conversion_utils.h" @@ -258,7 +258,7 @@ bool IsStringUTF8AllowingNoncharacters(std::string_view str) { } bool EqualsASCII(std::u16string_view str, std::string_view ascii) { - return ranges::equal(ascii, str); + return std::ranges::equal(ascii, str); } bool StartsWith(std::string_view str, @@ -419,16 +419,15 @@ std::string ReplaceStringPlaceholders(std::string_view format_string, return std::move(replacement).value(); } -std::u16string ReplaceStringPlaceholders(const std::u16string& format_string, - const std::u16string& a, +std::u16string ReplaceStringPlaceholders(std::u16string_view format_string, + std::u16string_view subst, size_t* offset) { std::vector offsets; // ReplaceStringPlaceholders() is more efficient when `offsets` is not set. std::vector* offsets_pointer = offset ? &offsets : nullptr; std::u16string result = internal::DoReplaceStringPlaceholders( - std::u16string_view(format_string), - base::span({a}), + format_string, span_from_ref(subst), /*placeholder_prefix*/ u'$', /*should_escape_multiple_placeholder_prefixes*/ true, /*is_strict_mode*/ false, offsets_pointer) diff --git a/naiveproxy/src/base/strings/string_util.h b/naiveproxy/src/base/strings/string_util.h index c965f1f67e..971fddea59 100644 --- a/naiveproxy/src/base/strings/string_util.h +++ b/naiveproxy/src/base/strings/string_util.h @@ -4,6 +4,11 @@ // // This file defines utility functions for working with strings. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #ifndef BASE_STRINGS_STRING_UTIL_H_ #define BASE_STRINGS_STRING_UTIL_H_ @@ -629,8 +634,8 @@ BASE_EXPORT std::string ReplaceStringPlaceholders( // Single-string shortcut for ReplaceStringHolders. |offset| may be NULL. BASE_EXPORT std::u16string ReplaceStringPlaceholders( - const std::u16string& format_string, - const std::u16string& a, + std::u16string_view format_string, + std::u16string_view subst, size_t* offset); // Helper function for creating a std::string_view from a string literal that diff --git a/naiveproxy/src/base/strings/string_util_impl_helpers.h b/naiveproxy/src/base/strings/string_util_impl_helpers.h index 0240ce0e91..001edb4235 100644 --- a/naiveproxy/src/base/strings/string_util_impl_helpers.h +++ b/naiveproxy/src/base/strings/string_util_impl_helpers.h @@ -20,7 +20,6 @@ #include "base/check_op.h" #include "base/logging.h" #include "base/notreached.h" -#include "base/ranges/algorithm.h" #include "base/third_party/icu/icu_utf.h" namespace base::internal { @@ -587,9 +586,9 @@ std::optional> DoReplaceStringPlaceholders( const size_t index = static_cast(*i - '1'); if (offsets) { ReplacementOffset r_offset(index, formatted.size()); - r_offsets.insert( - ranges::upper_bound(r_offsets, r_offset, &CompareParameter), - r_offset); + r_offsets.insert(std::ranges::upper_bound(r_offsets, r_offset, + &CompareParameter), + r_offset); } if (index < substitutions) { formatted.append(subst.at(index)); diff --git a/naiveproxy/src/base/strings/string_util_internal.h b/naiveproxy/src/base/strings/string_util_internal.h index 885a4ed9a2..997bd98b05 100644 --- a/naiveproxy/src/base/strings/string_util_internal.h +++ b/naiveproxy/src/base/strings/string_util_internal.h @@ -5,12 +5,11 @@ #ifndef BASE_STRINGS_STRING_UTIL_INTERNAL_H_ #define BASE_STRINGS_STRING_UTIL_INTERNAL_H_ +#include #include #include #include -#include "base/ranges/algorithm.h" - namespace base::internal { // ASCII-specific tolower. The standard library's tolower is locale sensitive, @@ -57,7 +56,7 @@ constexpr int CompareCaseInsensitiveASCIIT(T a, T b) { template inline bool EqualsCaseInsensitiveASCIIT(std::basic_string_view a, std::basic_string_view b) { - return ranges::equal(a, b, [](auto lhs, auto rhs) { + return std::ranges::equal(a, b, [](auto lhs, auto rhs) { return ToLowerASCII(lhs) == ToLowerASCII(rhs); }); } diff --git a/naiveproxy/src/base/strings/string_util_posix.h b/naiveproxy/src/base/strings/string_util_posix.h index ed8c0f2525..2a9d69a5ec 100644 --- a/naiveproxy/src/base/strings/string_util_posix.h +++ b/naiveproxy/src/base/strings/string_util_posix.h @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #ifndef BASE_STRINGS_STRING_UTIL_POSIX_H_ #define BASE_STRINGS_STRING_UTIL_POSIX_H_ diff --git a/naiveproxy/src/base/strings/string_util_win.cc b/naiveproxy/src/base/strings/string_util_win.cc index 5b424cb88e..7a7858b7c5 100644 --- a/naiveproxy/src/base/strings/string_util_win.cc +++ b/naiveproxy/src/base/strings/string_util_win.cc @@ -4,10 +4,10 @@ #include "base/strings/string_util_win.h" +#include #include #include -#include "base/ranges/algorithm.h" #include "base/strings/string_util_impl_helpers.h" namespace base { @@ -78,7 +78,7 @@ bool ContainsOnlyChars(std::wstring_view input, std::wstring_view characters) { } bool EqualsASCII(std::wstring_view str, std::string_view ascii) { - return ranges::equal(ascii, str); + return std::ranges::equal(ascii, str); } bool StartsWith(std::wstring_view str, diff --git a/naiveproxy/src/base/strings/stringprintf.h b/naiveproxy/src/base/strings/stringprintf.h index 7de6f91611..81a70dc1c6 100644 --- a/naiveproxy/src/base/strings/stringprintf.h +++ b/naiveproxy/src/base/strings/stringprintf.h @@ -26,42 +26,6 @@ template const Args&... args) { return absl::StrFormat(format, args...); } -// Returns a C++ string given `printf()`-like input. The format string must be a -// run-time value (like with `std::vformat()`), or this will not compile. -// Because this does not check arguments at compile-time, prefer -// `StringPrintf()` whenever possible. -template -[[nodiscard]] std::string StringPrintfNonConstexpr(std::string_view format, - const Args&... args) { - std::string output; - CHECK(absl::FormatUntyped(&output, absl::UntypedFormatSpec(format), - {absl::FormatArg(args)...})); - return output; -} - -// If possible, guide users to use `StringPrintf()` instead of -// `StringPrintfNonConstexpr()` when the format string is constexpr. -// -// It would be nice to do this with `std::enable_if`, but I don't know of a way; -// whether a string constant's value is available at compile time is not -// something easily obtained from the type system, and trying to pass various -// forms of string constant to non-type template parameters produces a variety -// of compile errors. -#if HAS_ATTRIBUTE(enable_if) -// Disable calling with a constexpr `std::string_view`. -template -[[nodiscard]] std::string StringPrintfNonConstexpr(std::string_view format, - const Args&... args) - ENABLE_IF_ATTR( - [](std::string_view s) { return s.empty() || s[0] == s[0]; }(format), - "Use StringPrintf() for constexpr format strings") = delete; -// Disable calling with a constexpr `char[]` or `char*`. -template -[[nodiscard]] std::string StringPrintfNonConstexpr(const char* format, - const Args&... args) - ENABLE_IF_ATTR([](const char* s) { return !!s; }(format), - "Use StringPrintf() for constexpr format strings") = delete; -#endif // Returns a C++ string given `vprintf()`-like input. [[nodiscard]] PRINTF_FORMAT(1, 0) BASE_EXPORT std::string diff --git a/naiveproxy/src/base/strings/stringprintf_nocompile.nc b/naiveproxy/src/base/strings/stringprintf_nocompile.nc deleted file mode 100644 index 7166ec9938..0000000000 --- a/naiveproxy/src/base/strings/stringprintf_nocompile.nc +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2023 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// This is a "No Compile Test" suite. -// http://dev.chromium.org/developers/testing/no-compile-tests - -#include "base/strings/stringprintf.h" - -#include - -#include "base/strings/cstring_view.h" - -namespace base { - -void ConstexprStringView() { - static constexpr base::cstring_view kTest = "test %s"; - std::ignore = StringPrintfNonConstexpr(kTest.data(), "123"); // expected-error {{call to deleted function 'StringPrintfNonConstexpr'}} -} - -void ConstexprCharArray() { - static constexpr char kTest[] = "test %s"; - std::ignore = StringPrintfNonConstexpr(kTest, "123"); // expected-error {{call to deleted function 'StringPrintfNonConstexpr'}} -} - -void ConstexprCharPointer() { - static constexpr const char* kTest = "test %s"; - std::ignore = StringPrintfNonConstexpr(kTest, "123"); // expected-error {{call to deleted function 'StringPrintfNonConstexpr'}} -} - -} // namespace base diff --git a/naiveproxy/src/base/strings/utf_offset_string_conversions.cc b/naiveproxy/src/base/strings/utf_offset_string_conversions.cc index 4ae8cd64ab..140a34ec37 100644 --- a/naiveproxy/src/base/strings/utf_offset_string_conversions.cc +++ b/naiveproxy/src/base/strings/utf_offset_string_conversions.cc @@ -220,8 +220,7 @@ bool ConvertUnicode(const SrcChar* src, // increment will place it at the right location), so we need to account // for that in determining the amount that was read. if (adjustments && ((i - original_i + 1) != chars_written)) { - adjustments->push_back(OffsetAdjuster::Adjustment( - original_i, i - original_i + 1, chars_written)); + adjustments->emplace_back(original_i, i - original_i + 1, chars_written); } } return success; diff --git a/naiveproxy/src/base/synchronization/lock_impl_posix.cc b/naiveproxy/src/base/synchronization/lock_impl_posix.cc index cdaebd74e1..68eb742fcb 100644 --- a/naiveproxy/src/base/synchronization/lock_impl_posix.cc +++ b/naiveproxy/src/base/synchronization/lock_impl_posix.cc @@ -13,8 +13,7 @@ #include "base/synchronization/synchronization_buildflags.h" #include "build/build_config.h" -namespace base { -namespace internal { +namespace base::internal { namespace { @@ -122,5 +121,4 @@ bool LockImpl::PriorityInheritanceAvailable() { #endif } -} // namespace internal -} // namespace base +} // namespace base::internal diff --git a/naiveproxy/src/base/synchronization/lock_subtle.h b/naiveproxy/src/base/synchronization/lock_subtle.h index cc99dcfa96..b8fd2aff61 100644 --- a/naiveproxy/src/base/synchronization/lock_subtle.h +++ b/naiveproxy/src/base/synchronization/lock_subtle.h @@ -5,7 +5,6 @@ #ifndef BASE_SYNCHRONIZATION_LOCK_SUBTLE_H_ #define BASE_SYNCHRONIZATION_LOCK_SUBTLE_H_ -#include "base/auto_reset.h" #include "base/base_export.h" #include "base/containers/span.h" #include "base/dcheck_is_on.h" diff --git a/naiveproxy/src/base/synchronization/waitable_event_posix.cc b/naiveproxy/src/base/synchronization/waitable_event_posix.cc index 05a5ba3667..8cd673e9a1 100644 --- a/naiveproxy/src/base/synchronization/waitable_event_posix.cc +++ b/naiveproxy/src/base/synchronization/waitable_event_posix.cc @@ -11,13 +11,13 @@ #include +#include #include #include #include #include "base/check_op.h" #include "base/memory/stack_allocated.h" -#include "base/ranges/algorithm.h" #include "base/synchronization/condition_variable.h" #include "base/synchronization/lock.h" #include "base/threading/scoped_blocking_call.h" @@ -100,8 +100,7 @@ class SyncWaiter : public WaitableEvent::Waiter { STACK_ALLOCATED(); public: - SyncWaiter() - : fired_(false), signaling_event_(nullptr), lock_(), cv_(&lock_) {} + SyncWaiter() : cv_(&lock_) {} bool Fire(WaitableEvent* signaling_event) override { base::AutoLock locked(lock_); @@ -147,7 +146,7 @@ class SyncWaiter : public WaitableEvent::Waiter { base::ConditionVariable* cv() { return &cv_; } private: - bool fired_; + bool fired_ = false; WaitableEvent* signaling_event_ = nullptr; // The WaitableEvent which woke us base::Lock lock_; base::ConditionVariable cv_; @@ -238,12 +237,12 @@ size_t WaitableEvent::WaitManyImpl(WaitableEvent** raw_waitables, std::vector> waitables; waitables.reserve(count); for (size_t i = 0; i < count; ++i) { - waitables.push_back(std::make_pair(raw_waitables[i], i)); + waitables.emplace_back(raw_waitables[i], i); } DCHECK_EQ(count, waitables.size()); - ranges::sort(waitables, cmp_fst_addr); + std::ranges::sort(waitables, cmp_fst_addr); // The set of waitables must be distinct. Since we have just sorted by // address, we can check this cheaply by comparing pairs of consecutive diff --git a/naiveproxy/src/base/system/sys_info.cc b/naiveproxy/src/base/system/sys_info.cc index aa842e6763..000604bcb8 100644 --- a/naiveproxy/src/base/system/sys_info.cc +++ b/naiveproxy/src/base/system/sys_info.cc @@ -21,12 +21,6 @@ namespace base { namespace { -uint64_t GetLowMemoryDeviceThresholdMB() { - static const uint64_t threshold = base::saturated_cast( - features::kLowMemoryDeviceThresholdMB.Get()); - return threshold; -} - std::optional g_amount_of_physical_memory_mb_for_testing; } // namespace @@ -65,7 +59,7 @@ uint64_t SysInfo::AmountOfAvailablePhysicalMemory() { // from the fake |kLowMemoryDeviceThresholdMB| limit. uint64_t memory_used = AmountOfPhysicalMemoryImpl() - AmountOfAvailablePhysicalMemoryImpl(); - uint64_t memory_limit = GetLowMemoryDeviceThresholdMB() * 1024 * 1024; + uint64_t memory_limit = features::kLowMemoryDeviceThresholdMB.Get() * 1024 * 1024; // std::min ensures no underflow, as |memory_used| can be > |memory_limit|. return memory_limit - std::min(memory_used, memory_limit); } @@ -193,10 +187,9 @@ bool SysInfo::IsLowEndDeviceOrPartialLowEndModeEnabled( #endif } -#if !BUILDFLAG(IS_ANDROID) -// The Android equivalent of this lives in `detectLowEndDevice()` at: -// base/android/java/src/org/chromium/base/SysUtils.java bool DetectLowEndDevice() { + // Keep in sync with the Android implementation of this function. + // LINT.IfChange CommandLine* command_line = CommandLine::ForCurrentProcess(); if (command_line->HasSwitch(switches::kEnableLowEndDeviceMode)) { return true; @@ -207,7 +200,8 @@ bool DetectLowEndDevice() { int ram_size_mb = SysInfo::AmountOfPhysicalMemoryMB(); return ram_size_mb > 0 && - static_cast(ram_size_mb) <= GetLowMemoryDeviceThresholdMB(); + static_cast(ram_size_mb) <= features::kLowMemoryDeviceThresholdMB.Get(); + // LINT.ThenChange(//base/android/java/src/org/chromium/base/SysUtils.java) } // static @@ -215,7 +209,6 @@ bool SysInfo::IsLowEndDeviceImpl() { static internal::LazySysInfoValue instance; return instance.value(); } -#endif #if !BUILDFLAG(IS_APPLE) && !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_WIN) && \ !BUILDFLAG(IS_CHROMEOS) diff --git a/naiveproxy/src/base/system/sys_info.h b/naiveproxy/src/base/system/sys_info.h index b5ae4fdfe7..acacd3422e 100644 --- a/naiveproxy/src/base/system/sys_info.h +++ b/naiveproxy/src/base/system/sys_info.h @@ -268,6 +268,10 @@ class BASE_EXPORT SysInfo { // Returns the Android build ID. static std::string GetAndroidBuildID(); + // Returns the Android hardware system property, equivalent to Java's + // Build.HARDWARE. + static std::string GetAndroidHardware(); + // Returns the Android hardware EGL system property. static std::string GetAndroidHardwareEGL(); #endif // BUILDFLAG(IS_ANDROID) @@ -289,11 +293,8 @@ class BASE_EXPORT SysInfo { // including user-visible changes, for acceptable performance. // For general memory optimizations, consider |AmountOfPhysicalMemoryMB|. // - // On Android this returns: - // true when memory <= 1GB on Android O and later. - // true when memory <= 512MB on Android N and earlier. - // This is not the same as "low-memory" and will be false on a large number of - // <=1GB pre-O Android devices. See: |detectLowEndDevice| in SysUtils.java. + // On Android this returns true when memory <= 1GB on Android O and later. + // This is not the same as "low-memory". // On Desktop this returns true when memory <= 2GB. static bool IsLowEndDevice(); diff --git a/naiveproxy/src/base/system/sys_info_android.cc b/naiveproxy/src/base/system/sys_info_android.cc index d50e12c0a8..e3ead5db46 100644 --- a/naiveproxy/src/base/system/sys_info_android.cc +++ b/naiveproxy/src/base/system/sys_info_android.cc @@ -115,33 +115,18 @@ std::string SysInfo::GetAndroidBuildID() { return std::string(os_build_id_str); } +std::string SysInfo::GetAndroidHardware() { + char os_hardware_str[PROP_VALUE_MAX]; + __system_property_get("ro.hardware", os_hardware_str); + return std::string(os_hardware_str); +} + std::string SysInfo::GetAndroidHardwareEGL() { char os_hardware_egl_str[PROP_VALUE_MAX]; __system_property_get("ro.hardware.egl", os_hardware_egl_str); return std::string(os_hardware_egl_str); } -static base::LazyInstance>::Leaky g_lazy_low_end_device = - LAZY_INSTANCE_INITIALIZER; - -bool SysInfo::IsLowEndDeviceImpl() { - // This code might be used in some environments - // which might not have a Java environment. - // Note that we need to call the Java version here. - // There exists a complete native implementation in - // sys_info.cc but calling that here would mean that - // the Java code and the native code would call different - // implementations which could give different results. - // Also the Java code cannot depend on the native code - // since it might not be loaded yet. - if (!base::android::IsVMInitialized()) { - return false; - } - return g_lazy_low_end_device.Get().value(); -} - // static SysInfo::HardwareInfo SysInfo::GetHardwareInfoSync() { HardwareInfo info; diff --git a/naiveproxy/src/base/system/sys_info_ios.mm b/naiveproxy/src/base/system/sys_info_ios.mm index c05431f6d4..473f163375 100644 --- a/naiveproxy/src/base/system/sys_info_ios.mm +++ b/naiveproxy/src/base/system/sys_info_ios.mm @@ -107,16 +107,20 @@ void SysInfo::OverrideHardwareModelName(std::string name) { // static uint64_t SysInfo::AmountOfPhysicalMemoryImpl() { - struct host_basic_info hostinfo; - mach_msg_type_number_t count = HOST_BASIC_INFO_COUNT; - base::apple::ScopedMachSendRight host(mach_host_self()); - int result = host_info(host.get(), HOST_BASIC_INFO, - reinterpret_cast(&hostinfo), &count); - if (result != KERN_SUCCESS) { - NOTREACHED(); - } - DCHECK_EQ(HOST_BASIC_INFO_COUNT, count); - return hostinfo.max_mem; + static uint64_t s_memory_size = []() { + struct host_basic_info hostinfo; + mach_msg_type_number_t count = HOST_BASIC_INFO_COUNT; + base::apple::ScopedMachSendRight host(mach_host_self()); + kern_return_t result = + host_info(host.get(), HOST_BASIC_INFO, + reinterpret_cast(&hostinfo), &count); + if (result != KERN_SUCCESS) { + NOTREACHED(); + } + DCHECK_EQ(HOST_BASIC_INFO_COUNT, count); + return hostinfo.max_mem; + }(); + return s_memory_size; } // static diff --git a/naiveproxy/src/base/system/sys_info_linux.cc b/naiveproxy/src/base/system/sys_info_linux.cc index a41b81d5bb..de42105dc4 100644 --- a/naiveproxy/src/base/system/sys_info_linux.cc +++ b/naiveproxy/src/base/system/sys_info_linux.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "base/system/sys_info.h" #include diff --git a/naiveproxy/src/base/system/sys_info_posix.cc b/naiveproxy/src/base/system/sys_info_posix.cc index 3abeea32e6..1f43721bf7 100644 --- a/naiveproxy/src/base/system/sys_info_posix.cc +++ b/naiveproxy/src/base/system/sys_info_posix.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "base/system/sys_info.h" #include diff --git a/naiveproxy/src/base/task/common/checked_lock_impl.cc b/naiveproxy/src/base/task/common/checked_lock_impl.cc index 725d0d802d..eefd52e2d8 100644 --- a/naiveproxy/src/base/task/common/checked_lock_impl.cc +++ b/naiveproxy/src/base/task/common/checked_lock_impl.cc @@ -4,6 +4,7 @@ #include "base/task/common/checked_lock_impl.h" +#include #include #include #include @@ -13,14 +14,12 @@ #include "base/lazy_instance.h" #include "base/memory/raw_ptr.h" #include "base/memory/raw_ptr_exclusion.h" -#include "base/ranges/algorithm.h" #include "base/synchronization/condition_variable.h" #include "base/task/common/checked_lock.h" #include "base/threading/platform_thread.h" #include "base/threading/thread_local.h" -namespace base { -namespace internal { +namespace base::internal { namespace { @@ -51,7 +50,7 @@ class SafeAcquisitionTracker { void RecordRelease(const CheckedLockImpl* const lock) { LockVector* acquired_locks = GetAcquiredLocksOnCurrentThread(); - const auto iter_at_lock = ranges::find(*acquired_locks, lock); + const auto iter_at_lock = std::ranges::find(*acquired_locks, lock); CHECK(iter_at_lock != acquired_locks->end(), base::NotFatalUntil::M125); acquired_locks->erase(iter_at_lock); } @@ -194,5 +193,4 @@ void CheckedLockImpl::CreateConditionVariableAndEmplace( opt.emplace(&lock_); } -} // namespace internal -} // namespace base +} // namespace base::internal diff --git a/naiveproxy/src/base/task/common/operations_controller.cc b/naiveproxy/src/base/task/common/operations_controller.cc index 993d807137..89a6b3b575 100644 --- a/naiveproxy/src/base/task/common/operations_controller.cc +++ b/naiveproxy/src/base/task/common/operations_controller.cc @@ -9,8 +9,7 @@ #include "base/check_op.h" #include "base/synchronization/waitable_event.h" -namespace base { -namespace internal { +namespace base::internal { OperationsController::OperationsController() = default; @@ -105,5 +104,4 @@ void OperationsController::DecrementBy(uint32_t n) { } } -} // namespace internal -} // namespace base +} // namespace base::internal diff --git a/naiveproxy/src/base/task/common/scoped_defer_task_posting.cc b/naiveproxy/src/base/task/common/scoped_defer_task_posting.cc index d23b67efc4..cfc6efb967 100644 --- a/naiveproxy/src/base/task/common/scoped_defer_task_posting.cc +++ b/naiveproxy/src/base/task/common/scoped_defer_task_posting.cc @@ -95,8 +95,8 @@ void ScopedDeferTaskPosting::DeferTaskPosting( const Location& from_here, OnceClosure task, base::TimeDelta delay) { - deferred_tasks_.push_back( - {std::move(task_runner), from_here, std::move(task), delay}); + deferred_tasks_.emplace_back(std::move(task_runner), from_here, + std::move(task), delay); } } // namespace base diff --git a/naiveproxy/src/base/task/common/task_annotator.cc b/naiveproxy/src/base/task/common/task_annotator.cc index bd6447b0d8..0b9700c620 100644 --- a/naiveproxy/src/base/task/common/task_annotator.cc +++ b/naiveproxy/src/base/task/common/task_annotator.cc @@ -18,7 +18,6 @@ #include "base/hash/md5.h" #include "base/logging.h" #include "base/metrics/metrics_hashes.h" -#include "base/ranges/algorithm.h" #include "base/time/time.h" #include "base/trace_event/base_tracing.h" #include "base/tracing_buildflags.h" @@ -188,7 +187,7 @@ void TaskAnnotator::RunTaskImpl(PendingTask& pending_task) { task_backtrace.back() = reinterpret_cast(0x0d00d1d1d178119); task_backtrace[1] = pending_task.posted_from.program_counter(); - ranges::copy(pending_task.task_backtrace, task_backtrace.begin() + 2); + std::ranges::copy(pending_task.task_backtrace, task_backtrace.begin() + 2); task_backtrace[kStackTaskTraceSnapshotSize - 2] = reinterpret_cast(pending_task.ipc_hash); debug::Alias(&task_backtrace); diff --git a/naiveproxy/src/base/task/lazy_thread_pool_task_runner.cc b/naiveproxy/src/base/task/lazy_thread_pool_task_runner.cc index b4164ce243..ff2d569414 100644 --- a/naiveproxy/src/base/task/lazy_thread_pool_task_runner.cc +++ b/naiveproxy/src/base/task/lazy_thread_pool_task_runner.cc @@ -12,8 +12,7 @@ #include "base/task/thread_pool.h" #include "build/build_config.h" -namespace base { -namespace internal { +namespace base::internal { namespace { ScopedLazyTaskRunnerListForTesting* g_scoped_lazy_task_runner_list_for_testing = @@ -125,5 +124,4 @@ void ScopedLazyTaskRunnerListForTesting::AddCallback(OnceClosure callback) { callbacks_.push_back(std::move(callback)); } -} // namespace internal -} // namespace base +} // namespace base::internal diff --git a/naiveproxy/src/base/task/scoped_set_task_priority_for_current_thread.cc b/naiveproxy/src/base/task/scoped_set_task_priority_for_current_thread.cc index 217151fa46..f12c0991b4 100644 --- a/naiveproxy/src/base/task/scoped_set_task_priority_for_current_thread.cc +++ b/naiveproxy/src/base/task/scoped_set_task_priority_for_current_thread.cc @@ -6,8 +6,7 @@ #include "base/compiler_specific.h" -namespace base { -namespace internal { +namespace base::internal { namespace { @@ -34,5 +33,4 @@ TaskPriority GetTaskPriorityForCurrentThread() { return task_priority_for_current_thread; } -} // namespace internal -} // namespace base +} // namespace base::internal diff --git a/naiveproxy/src/base/task/sequence_manager/associated_thread_id.cc b/naiveproxy/src/base/task/sequence_manager/associated_thread_id.cc index ba07359069..11b7c551a7 100644 --- a/naiveproxy/src/base/task/sequence_manager/associated_thread_id.cc +++ b/naiveproxy/src/base/task/sequence_manager/associated_thread_id.cc @@ -7,9 +7,7 @@ #include "base/check.h" #include "base/dcheck_is_on.h" -namespace base { -namespace sequence_manager { -namespace internal { +namespace base::sequence_manager::internal { AssociatedThreadId::AssociatedThreadId() = default; AssociatedThreadId::~AssociatedThreadId() = default; @@ -84,6 +82,4 @@ void AssociatedThreadId::StopInSequenceWithCurrentThread() { CHECK(succeeded); } -} // namespace internal -} // namespace sequence_manager -} // namespace base +} // namespace base::sequence_manager::internal diff --git a/naiveproxy/src/base/task/sequence_manager/delayed_task_handle_delegate.cc b/naiveproxy/src/base/task/sequence_manager/delayed_task_handle_delegate.cc index a4972c3c21..cc2e355db5 100644 --- a/naiveproxy/src/base/task/sequence_manager/delayed_task_handle_delegate.cc +++ b/naiveproxy/src/base/task/sequence_manager/delayed_task_handle_delegate.cc @@ -6,9 +6,7 @@ #include "base/task/sequence_manager/task_queue_impl.h" -namespace base { -namespace sequence_manager { -namespace internal { +namespace base::sequence_manager::internal { DelayedTaskHandleDelegate::DelayedTaskHandleDelegate(TaskQueueImpl* outer) : outer_(outer) {} @@ -66,6 +64,4 @@ void DelayedTaskHandleDelegate::WillRunTask() { weak_ptr_factory_.InvalidateWeakPtrs(); } -} // namespace internal -} // namespace sequence_manager -} // namespace base +} // namespace base::sequence_manager::internal diff --git a/naiveproxy/src/base/task/sequence_manager/enqueue_order_generator.cc b/naiveproxy/src/base/task/sequence_manager/enqueue_order_generator.cc index dd6c14c52d..67c4462399 100644 --- a/naiveproxy/src/base/task/sequence_manager/enqueue_order_generator.cc +++ b/naiveproxy/src/base/task/sequence_manager/enqueue_order_generator.cc @@ -4,15 +4,11 @@ #include "base/task/sequence_manager/enqueue_order_generator.h" -namespace base { -namespace sequence_manager { -namespace internal { +namespace base::sequence_manager::internal { EnqueueOrderGenerator::EnqueueOrderGenerator() : counter_(EnqueueOrder::kFirst) {} EnqueueOrderGenerator::~EnqueueOrderGenerator() = default; -} // namespace internal -} // namespace sequence_manager -} // namespace base +} // namespace base::sequence_manager::internal diff --git a/naiveproxy/src/base/task/sequence_manager/fence.cc b/naiveproxy/src/base/task/sequence_manager/fence.cc index 0fd2170932..d388e8c3af 100644 --- a/naiveproxy/src/base/task/sequence_manager/fence.cc +++ b/naiveproxy/src/base/task/sequence_manager/fence.cc @@ -11,9 +11,7 @@ #include "base/time/time.h" #include "base/values.h" -namespace base { -namespace sequence_manager { -namespace internal { +namespace base::sequence_manager::internal { Fence::Fence(const TaskOrder& task_order) : task_order_(task_order) { DCHECK_NE(task_order_.enqueue_order(), EnqueueOrder::none()); @@ -40,6 +38,4 @@ Fence Fence::CreateWithEnqueueOrder(EnqueueOrder enqueue_order) { return Fence(enqueue_order, TimeTicks(), 0); } -} // namespace internal -} // namespace sequence_manager -} // namespace base +} // namespace base::sequence_manager::internal diff --git a/naiveproxy/src/base/task/sequence_manager/lazily_deallocated_deque.h b/naiveproxy/src/base/task/sequence_manager/lazily_deallocated_deque.h deleted file mode 100644 index 812db619f6..0000000000 --- a/naiveproxy/src/base/task/sequence_manager/lazily_deallocated_deque.h +++ /dev/null @@ -1,394 +0,0 @@ -// Copyright 2018 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef BASE_TASK_SEQUENCE_MANAGER_LAZILY_DEALLOCATED_DEQUE_H_ -#define BASE_TASK_SEQUENCE_MANAGER_LAZILY_DEALLOCATED_DEQUE_H_ - -#include -#include -#include -#include -#include -#include - -#include "base/check.h" -#include "base/check_op.h" -#include "base/compiler_specific.h" -#include "base/containers/heap_array.h" -#include "base/containers/span.h" -#include "base/debug/alias.h" -#include "base/gtest_prod_util.h" -#include "base/memory/aligned_memory.h" -#include "base/memory/raw_ptr.h" -#include "base/memory/raw_ptr_exclusion.h" -#include "base/memory/raw_span.h" -#include "base/time/time.h" - -namespace base { -namespace sequence_manager { -namespace internal { - -// A LazilyDeallocatedDeque specialized for the SequenceManager's usage -// patterns. The queue generally grows while tasks are added and then removed -// until empty and the cycle repeats. -// -// The main difference between sequence_manager::LazilyDeallocatedDeque and -// others is memory management. For performance (memory allocation isn't free) -// we don't automatically reclaiming memory when the queue becomes empty. -// Instead we rely on the surrounding code periodically calling -// MaybeShrinkQueue, ideally when the queue is empty. -// -// We keep track of the maximum recent queue size and rate limit -// MaybeShrinkQueue to avoid unnecessary churn. -// -// NB this queue isn't by itself thread safe. -template -class LazilyDeallocatedDeque { - public: - enum { - // Minimum allocation for a ring. Note a ring of size 4 will only hold up to - // 3 elements. - kMinimumRingSize = 4, - - // Maximum "wasted" capacity allowed when considering if we should resize - // the backing store. - kReclaimThreshold = 16, - - // Used to rate limit how frequently MaybeShrinkQueue actually shrinks the - // queue. - kMinimumShrinkIntervalInSeconds = 5 - }; - - LazilyDeallocatedDeque() = default; - LazilyDeallocatedDeque(const LazilyDeallocatedDeque&) = delete; - LazilyDeallocatedDeque& operator=(const LazilyDeallocatedDeque&) = delete; - ~LazilyDeallocatedDeque() { clear(); } - - bool empty() const { return size_ == 0; } - - size_t max_size() const { return max_size_; } - - size_t size() const { return size_; } - - size_t capacity() const { - size_t capacity = 0; - for (const Ring* iter = head_.get(); iter; iter = iter->next_.get()) { - capacity += iter->capacity(); - } - return capacity; - } - - void clear() { - while (head_) { - head_ = std::move(head_->next_); - } - - tail_ = nullptr; - size_ = 0; - } - - // Assumed to be an uncommon operation. - void push_front(T t) { - if (!head_) { - DCHECK(!tail_); - head_ = std::make_unique(kMinimumRingSize); - tail_ = head_.get(); - } - - // Grow if needed, by the minimum amount. - if (!head_->CanPush()) { - // TODO(alexclarke): Remove once we've understood the OOMs. - size_t size = size_; - base::debug::Alias(&size); - - std::unique_ptr new_ring = std::make_unique(kMinimumRingSize); - new_ring->next_ = std::move(head_); - head_ = std::move(new_ring); - } - - head_->push_front(std::move(t)); - max_size_ = std::max(max_size_, ++size_); - } - - // Assumed to be a common operation. - void push_back(T t) { - if (!head_) { - DCHECK(!tail_); - head_ = std::make_unique(kMinimumRingSize); - tail_ = head_.get(); - } - - // Grow if needed. - if (!tail_->CanPush()) { - // TODO(alexclarke): Remove once we've understood the OOMs. - size_t size = size_; - base::debug::Alias(&size); - - // Doubling the size is a common strategy, but one which can be wasteful - // so we use a (somewhat) slower growth curve. - tail_->next_ = std::make_unique(2 + tail_->capacity() + - (tail_->capacity() / 2)); - tail_ = tail_->next_.get(); - } - - tail_->push_back(std::move(t)); - max_size_ = std::max(max_size_, ++size_); - } - - T& front() LIFETIME_BOUND { - DCHECK(head_); - return head_->front(); - } - - const T& front() const LIFETIME_BOUND { - DCHECK(head_); - return head_->front(); - } - - T& back() LIFETIME_BOUND { - DCHECK(tail_); - return tail_->back(); - } - - const T& back() const LIFETIME_BOUND { - DCHECK(tail_); - return tail_->back(); - } - - void pop_front() { - DCHECK(head_); - DCHECK(!head_->empty()); - DCHECK(tail_); - DCHECK_GT(size_, 0u); - head_->pop_front(); - - // If the ring has become empty and we have several rings then, remove the - // head one (which we expect to have lower capacity than the remaining - // ones). - if (head_->empty() && head_->next_) { - head_ = std::move(head_->next_); - } - - --size_; - } - - void swap(LazilyDeallocatedDeque& other) { - std::swap(head_, other.head_); - std::swap(tail_, other.tail_); - std::swap(size_, other.size_); - std::swap(max_size_, other.max_size_); - std::swap(next_resize_time_, other.next_resize_time_); - } - - void MaybeShrinkQueue() { - if (!tail_) { - return; - } - - DCHECK_GE(max_size_, size_); - - // Rate limit how often we shrink the queue because it's somewhat expensive. - TimeTicks current_time = now_source(); - if (current_time < next_resize_time_) { - return; - } - - // Due to the way the Ring works we need 1 more slot than is used. - size_t new_capacity = max_size_ + 1; - if (new_capacity < kMinimumRingSize) { - new_capacity = kMinimumRingSize; - } - - // Reset |max_size_| so that unless usage has spiked up we will consider - // reclaiming it next time. - max_size_ = size_; - - // Only realloc if the current capacity is sufficiently greater than the - // observed maximum size for the previous period. - if (new_capacity + kReclaimThreshold >= capacity()) { - return; - } - - SetCapacity(new_capacity); - next_resize_time_ = current_time + Seconds(kMinimumShrinkIntervalInSeconds); - } - - void SetCapacity(size_t new_capacity) { - std::unique_ptr new_ring = std::make_unique(new_capacity); - - DCHECK_GE(new_capacity, size_ + 1); - - // Preserve the |size_| which counts down to zero in the while loop. - size_t real_size = size_; - - while (!empty()) { - DCHECK(new_ring->CanPush()); - new_ring->push_back(std::move(head_->front())); - pop_front(); - } - - size_ = real_size; - - DCHECK_EQ(head_.get(), tail_); - head_ = std::move(new_ring); - tail_ = head_.get(); - } - - private: - FRIEND_TEST_ALL_PREFIXES(LazilyDeallocatedDequeTest, RingPushFront); - FRIEND_TEST_ALL_PREFIXES(LazilyDeallocatedDequeTest, RingPushBack); - FRIEND_TEST_ALL_PREFIXES(LazilyDeallocatedDequeTest, RingCanPush); - FRIEND_TEST_ALL_PREFIXES(LazilyDeallocatedDequeTest, RingPushPopPushPop); - - struct Ring { - explicit Ring(size_t capacity) { - DCHECK_GE(capacity, kMinimumRingSize); - std::tie(backing_store_, data_) = AlignedUninitCharArray(capacity); - } - Ring(const Ring&) = delete; - Ring& operator=(const Ring&) = delete; - ~Ring() { - while (!empty()) { - pop_front(); - } - } - - bool empty() const { return back_index_ == before_front_index_; } - - size_t capacity() const { return data_.size(); } - - bool CanPush() const { - return before_front_index_ != CircularIncrement(back_index_); - } - - void push_front(T&& t) { - // Mustn't appear to become empty. - CHECK_NE(CircularDecrement(before_front_index_), back_index_); - std::construct_at(data_.get_at(before_front_index_), std::move(t)); - before_front_index_ = CircularDecrement(before_front_index_); - } - - void push_back(T&& t) { - back_index_ = CircularIncrement(back_index_); - CHECK(!empty()); // Mustn't appear to become empty. - std::construct_at(data_.get_at(back_index_), std::move(t)); - } - - void pop_front() { - CHECK(!empty()); - before_front_index_ = CircularIncrement(before_front_index_); - data_[before_front_index_].~T(); - } - - T& front() LIFETIME_BOUND { - CHECK(!empty()); - return data_[CircularIncrement(before_front_index_)]; - } - - const T& front() const LIFETIME_BOUND { - CHECK(!empty()); - return data_[CircularIncrement(before_front_index_)]; - } - - T& back() LIFETIME_BOUND { - CHECK(!empty()); - return data_[back_index_]; - } - - const T& back() const LIFETIME_BOUND { - CHECK(!empty()); - return data_[back_index_]; - } - - size_t CircularDecrement(size_t index) const { - if (index == 0) { - return capacity() - 1; - } - return index - 1; - } - - size_t CircularIncrement(size_t index) const { - CHECK_LT(index, capacity()); - ++index; - if (index == capacity()) { - return 0; - } - return index; - } - - AlignedHeapArray backing_store_; - raw_span data_; - // Indices into `data_` for one-before-the-first element and the last - // element. The back_index_ may be less than before_front_index_ if the - // elements wrap around the back of the array. If they are equal, then the - // Ring is empty. - size_t before_front_index_ = 0; - size_t back_index_ = 0; - std::unique_ptr next_ = nullptr; - }; - - public: - class Iterator { - public: - using value_type = T; - using pointer = const T*; - using reference = const T&; - - const T& operator->() const { return ring_->data_[index_]; } - const T& operator*() const { return ring_->data_[index_]; } - - Iterator& operator++() { - if (index_ == ring_->back_index_) { - ring_ = ring_->next_.get(); - index_ = - ring_ ? ring_->CircularIncrement(ring_->before_front_index_) : 0; - } else { - index_ = ring_->CircularIncrement(index_); - } - return *this; - } - - operator bool() const { return !!ring_; } - - private: - explicit Iterator(const Ring* ring) { - if (!ring || ring->empty()) { - ring_ = nullptr; - index_ = 0; - return; - } - - ring_ = ring; - index_ = ring_->CircularIncrement(ring->before_front_index_); - } - - raw_ptr ring_; - size_t index_; - - friend class LazilyDeallocatedDeque; - }; - - Iterator begin() const { return Iterator(head_.get()); } - - Iterator end() const { return Iterator(nullptr); } - - private: - // We maintain a list of Ring buffers, to enable us to grow without copying, - // but most of the time we aim to have only one active Ring. - std::unique_ptr head_; - - // `tail_` is not a raw_ptr<...> for performance reasons (based on analysis of - // sampling profiler data and tab_search:top100:2020). - RAW_PTR_EXCLUSION Ring* tail_ = nullptr; - - size_t size_ = 0; - size_t max_size_ = 0; - TimeTicks next_resize_time_; -}; - -} // namespace internal -} // namespace sequence_manager -} // namespace base - -#endif // BASE_TASK_SEQUENCE_MANAGER_LAZILY_DEALLOCATED_DEQUE_H_ diff --git a/naiveproxy/src/base/task/sequence_manager/sequence_manager.cc b/naiveproxy/src/base/task/sequence_manager/sequence_manager.cc index f4079c0571..a1f62636f2 100644 --- a/naiveproxy/src/base/task/sequence_manager/sequence_manager.cc +++ b/naiveproxy/src/base/task/sequence_manager/sequence_manager.cc @@ -6,8 +6,7 @@ #include -namespace base { -namespace sequence_manager { +namespace base::sequence_manager { namespace { @@ -175,5 +174,4 @@ SequenceManager::Settings SequenceManager::Settings::Builder::Build() { return std::move(settings_); } -} // namespace sequence_manager -} // namespace base +} // namespace base::sequence_manager diff --git a/naiveproxy/src/base/task/sequence_manager/sequence_manager.h b/naiveproxy/src/base/task/sequence_manager/sequence_manager.h index 030bd3e98a..bee07da811 100644 --- a/naiveproxy/src/base/task/sequence_manager/sequence_manager.h +++ b/naiveproxy/src/base/task/sequence_manager/sequence_manager.h @@ -271,11 +271,6 @@ class BASE_EXPORT SequenceManager { // Returns a JSON string which describes all pending tasks. virtual std::string DescribeAllPendingTasks() const = 0; - // While Now() is less than `prioritize_until` we will alternate between a - // SequenceManager task and a yielding to the underlying sequence (e.g., the - // message pump). - virtual void PrioritizeYieldingToNative(base::TimeTicks prioritize_until) = 0; - // Adds an observer which reports task execution. Can only be called on the // same thread that `this` is running on. virtual void AddTaskObserver(TaskObserver* task_observer) = 0; diff --git a/naiveproxy/src/base/task/sequence_manager/sequence_manager_impl.cc b/naiveproxy/src/base/task/sequence_manager/sequence_manager_impl.cc index cc81f9fd71..7a7dc5c71e 100644 --- a/naiveproxy/src/base/task/sequence_manager/sequence_manager_impl.cc +++ b/naiveproxy/src/base/task/sequence_manager/sequence_manager_impl.cc @@ -9,6 +9,7 @@ #include "base/task/sequence_manager/sequence_manager_impl.h" +#include #include #include #include @@ -29,7 +30,6 @@ #include "base/notreached.h" #include "base/observer_list.h" #include "base/rand_util.h" -#include "base/ranges/algorithm.h" #include "base/task/sequence_manager/enqueue_order.h" #include "base/task/sequence_manager/task_queue_impl.h" #include "base/task/sequence_manager/task_time_observer.h" @@ -46,8 +46,7 @@ #include "base/trace_event/base_tracing.h" #include "build/build_config.h" -namespace base { -namespace sequence_manager { +namespace base::sequence_manager { namespace { // Whether SequenceManagerImpl records crash keys. Enable via Finch when needed @@ -542,7 +541,7 @@ void SequenceManagerImpl::LogTaskDebugInfo( case Settings::TaskLogging::kEnabledWithBacktrace: { std::array task_trace; task_trace[0] = task->posted_from.program_counter(); - ranges::copy(task->task_backtrace, task_trace.begin() + 1); + std::ranges::copy(task->task_backtrace, task_trace.begin() + 1); size_t length = 0; while (length < task_trace.size() && task_trace[length]) { ++length; @@ -1144,11 +1143,6 @@ std::string SequenceManagerImpl::DescribeAllPendingTasks() const { return result; } -void SequenceManagerImpl::PrioritizeYieldingToNative( - base::TimeTicks prioritize_until) { - controller_->PrioritizeYieldingToNative(prioritize_until); -} - void SequenceManagerImpl::AddDestructionObserver( CurrentThread::DestructionObserver* destruction_observer) { main_thread_only().destruction_observers.AddObserver(destruction_observer); @@ -1248,5 +1242,4 @@ TaskQueue::QueuePriority SequenceManagerImpl::GetPriorityCount() const { constexpr TimeDelta SequenceManagerImpl::kReclaimMemoryInterval; } // namespace internal -} // namespace sequence_manager -} // namespace base +} // namespace base::sequence_manager diff --git a/naiveproxy/src/base/task/sequence_manager/sequence_manager_impl.h b/naiveproxy/src/base/task/sequence_manager/sequence_manager_impl.h index 4e3c9f0d25..1c0d1a9415 100644 --- a/naiveproxy/src/base/task/sequence_manager/sequence_manager_impl.h +++ b/naiveproxy/src/base/task/sequence_manager/sequence_manager_impl.h @@ -128,7 +128,6 @@ class BASE_EXPORT SequenceManagerImpl size_t GetPendingTaskCountForTesting() const override; TaskQueue::Handle CreateTaskQueue(const TaskQueue::Spec& spec) override; std::string DescribeAllPendingTasks() const override; - void PrioritizeYieldingToNative(base::TimeTicks prioritize_until) override; void AddTaskObserver(TaskObserver* task_observer) override; void RemoveTaskObserver(TaskObserver* task_observer) override; std::optional GetNextDelayedWakeUp() const override; @@ -137,13 +136,13 @@ class BASE_EXPORT SequenceManagerImpl // SequencedTaskSource implementation: void SetRunTaskSynchronouslyAllowed( bool can_run_tasks_synchronously) override; - std::optional SelectNextTask( - LazyNow& lazy_now, - SelectTaskOption option = SelectTaskOption::kDefault) override; + using internal::SequencedTaskSource::SelectNextTask; + std::optional SelectNextTask(LazyNow& lazy_now, + SelectTaskOption option) override; void DidRunTask(LazyNow& lazy_now) override; - std::optional GetPendingWakeUp( - LazyNow* lazy_now, - SelectTaskOption option = SelectTaskOption::kDefault) override; + using internal::SequencedTaskSource::GetPendingWakeUp; + std::optional GetPendingWakeUp(LazyNow* lazy_now, + SelectTaskOption option) override; bool HasPendingHighResolutionTasks() override; void OnBeginWork() override; bool OnIdle() override; diff --git a/naiveproxy/src/base/task/sequence_manager/sequenced_task_source.cc b/naiveproxy/src/base/task/sequence_manager/sequenced_task_source.cc index 74d03ecf74..76fdc89116 100644 --- a/naiveproxy/src/base/task/sequence_manager/sequenced_task_source.cc +++ b/naiveproxy/src/base/task/sequence_manager/sequenced_task_source.cc @@ -4,9 +4,7 @@ #include "base/task/sequence_manager/sequenced_task_source.h" -namespace base { -namespace sequence_manager { -namespace internal { +namespace base::sequence_manager::internal { SequencedTaskSource::SelectedTask::SelectedTask(const SelectedTask&) = default; @@ -22,6 +20,4 @@ SequencedTaskSource::SelectedTask::SelectedTask( SequencedTaskSource::SelectedTask::~SelectedTask() = default; -} // namespace internal -} // namespace sequence_manager -} // namespace base +} // namespace base::sequence_manager::internal diff --git a/naiveproxy/src/base/task/sequence_manager/sequenced_task_source.h b/naiveproxy/src/base/task/sequence_manager/sequenced_task_source.h index 4446721a5e..94c0fcf786 100644 --- a/naiveproxy/src/base/task/sequence_manager/sequenced_task_source.h +++ b/naiveproxy/src/base/task/sequence_manager/sequenced_task_source.h @@ -67,7 +67,10 @@ class SequencedTaskSource { // |option| allows control on which kind of tasks can be selected. virtual std::optional SelectNextTask( LazyNow& lazy_now, - SelectTaskOption option = SelectTaskOption::kDefault) = 0; + SelectTaskOption option) = 0; + std::optional SelectNextTask(LazyNow& lazy_now) { + return SelectNextTask(lazy_now, SelectTaskOption::kDefault); + } // Notifies this source that the task previously obtained // from SelectNextTask() has been completed. @@ -77,9 +80,11 @@ class SequencedTaskSource { // next task can run immediately, or nullopt if there are no more immediate or // delayed tasks. |option| allows control on which kind of tasks can be // selected. May delete canceled tasks. - virtual std::optional GetPendingWakeUp( - LazyNow* lazy_now, - SelectTaskOption option = SelectTaskOption::kDefault) = 0; + virtual std::optional GetPendingWakeUp(LazyNow* lazy_now, + SelectTaskOption option) = 0; + std::optional GetPendingWakeUp(LazyNow* lazy_now) { + return GetPendingWakeUp(lazy_now, SelectTaskOption::kDefault); + } // Return true if there are any pending tasks in the task source which require // high resolution timing. diff --git a/naiveproxy/src/base/task/sequence_manager/task_order.cc b/naiveproxy/src/base/task/sequence_manager/task_order.cc index 2f6a85f790..51926e7b60 100644 --- a/naiveproxy/src/base/task/sequence_manager/task_order.cc +++ b/naiveproxy/src/base/task/sequence_manager/task_order.cc @@ -9,8 +9,7 @@ #include "base/task/sequence_manager/enqueue_order.h" #include "base/task/sequence_manager/tasks.h" -namespace base { -namespace sequence_manager { +namespace base::sequence_manager { namespace { @@ -87,5 +86,4 @@ bool TaskOrder::operator!=(const TaskOrder& other) const { return !(*this == other); } -} // namespace sequence_manager -} // namespace base +} // namespace base::sequence_manager diff --git a/naiveproxy/src/base/task/sequence_manager/task_queue.h b/naiveproxy/src/base/task/sequence_manager/task_queue.h index 55b0389518..9554472038 100644 --- a/naiveproxy/src/base/task/sequence_manager/task_queue.h +++ b/naiveproxy/src/base/task/sequence_manager/task_queue.h @@ -420,6 +420,12 @@ class BASE_EXPORT TaskQueue { // execution. virtual void SetTaskExecutionTraceLogger(TaskExecutionTraceLogger logger) = 0; + // Removes immediate cancelled tasks from the queue. Call this method when the + // queue is expected to contain a significant number of canceled tasks + // (>1000), making it worthwhile to traverse it to reclaim memory. Should only + // be called in a context where it's safe to call the destructor of tasks. + virtual void RemoveCancelledTasks() = 0; + protected: TaskQueue() = default; }; diff --git a/naiveproxy/src/base/task/sequence_manager/task_queue_impl.cc b/naiveproxy/src/base/task/sequence_manager/task_queue_impl.cc index dfc3d1f5b5..6822960217 100644 --- a/naiveproxy/src/base/task/sequence_manager/task_queue_impl.cc +++ b/naiveproxy/src/base/task/sequence_manager/task_queue_impl.cc @@ -6,6 +6,7 @@ #include +#include #include #include #include @@ -18,7 +19,6 @@ #include "base/metrics/histogram_macros.h" #include "base/notreached.h" #include "base/observer_list.h" -#include "base/ranges/algorithm.h" #include "base/sequence_token.h" #include "base/strings/stringprintf.h" #include "base/task/common/scoped_defer_task_posting.h" @@ -39,10 +39,7 @@ #include "build/build_config.h" #include "third_party/abseil-cpp/absl/container/inlined_vector.h" -namespace base { -namespace sequence_manager { - -namespace internal { +namespace base::sequence_manager::internal { // This class outside the anonymous namespace exists to allow being a friend of // `SingleThreadTaskRunner::CurrentDefaultHandle` in order to access @@ -607,10 +604,6 @@ void TaskQueueImpl::ReloadEmptyImmediateWorkQueue() { void TaskQueueImpl::TakeImmediateIncomingQueueTasks(TaskDeque* queue) { DCHECK(queue->empty()); - // Now is a good time to consider reducing the empty queue's capacity if we're - // wasting memory, before we make it the `immediate_incoming_queue`. - queue->MaybeShrinkQueue(); - base::internal::CheckedAutoLock lock(any_thread_lock_); queue->swap(any_thread_.immediate_incoming_queue); @@ -879,13 +872,6 @@ Value::Dict TaskQueueImpl::AsValue(TimeTicks now, bool force_verbose) const { state.Set("delayed_work_queue_size", static_cast(main_thread_only().delayed_work_queue->Size())); - state.Set("any_thread_.immediate_incoming_queuecapacity", - static_cast(any_thread_.immediate_incoming_queue.capacity())); - state.Set("immediate_work_queue_capacity", - static_cast(immediate_work_queue()->Capacity())); - state.Set("delayed_work_queue_capacity", - static_cast(delayed_work_queue()->Capacity())); - if (!main_thread_only().delayed_incoming_queue.empty()) { TimeDelta delay_to_next_task = (main_thread_only().delayed_incoming_queue.top().delayed_run_time - @@ -1276,15 +1262,6 @@ void TaskQueueImpl::ReclaimMemory(TimeTicks now) { LazyNow lazy_now(now); UpdateWakeUp(&lazy_now); - - // Also consider shrinking the work queue if it's wasting memory. - main_thread_only().delayed_work_queue->MaybeShrinkQueue(); - main_thread_only().immediate_work_queue->MaybeShrinkQueue(); - - { - base::internal::CheckedAutoLock lock(any_thread_lock_); - any_thread_.immediate_incoming_queue.MaybeShrinkQueue(); - } } void TaskQueueImpl::PushImmediateIncomingTaskForTest(Task task) { @@ -1597,6 +1574,31 @@ TaskQueueImpl::CreateQueueEnabledVoter() { new TaskQueue::QueueEnabledVoter(voter_weak_ptr_factory_.GetWeakPtr())); } +void TaskQueueImpl::RemoveCancelledTasks() { + // Because callback destructors could have a side-effect of posting new tasks, + // move cancelled callbacks into a temporary container before deleting them. + // This prevents lock reentrancy or modifying a container while traversing it. + absl::InlinedVector tasks_to_delete; + + auto remove_canceled_tasks_from_queue = [&tasks_to_delete](TaskDeque& queue) { + for (auto& task : queue) { + if (task.task.IsCancelled()) { + tasks_to_delete.push_back(std::move(task.task)); + } + } + std::erase_if(queue, [](const Task& task) { return task.task.is_null(); }); + }; + + { + base::internal::CheckedAutoLock lock(any_thread_lock_); + remove_canceled_tasks_from_queue(any_thread_.immediate_incoming_queue); + } + remove_canceled_tasks_from_queue( + main_thread_only_.immediate_work_queue->tasks_); + remove_canceled_tasks_from_queue( + main_thread_only_.delayed_work_queue->tasks_); +} + void TaskQueueImpl::AddQueueEnabledVoter(bool voter_is_enabled, TaskQueue::QueueEnabledVoter& voter) { ++main_thread_only().voter_count; @@ -1745,6 +1747,4 @@ TaskQueueImpl::OnTaskPostedCallbackHandleImpl:: } } -} // namespace internal -} // namespace sequence_manager -} // namespace base +} // namespace base::sequence_manager::internal diff --git a/naiveproxy/src/base/task/sequence_manager/task_queue_impl.h b/naiveproxy/src/base/task/sequence_manager/task_queue_impl.h index 455c332829..3a407e3105 100644 --- a/naiveproxy/src/base/task/sequence_manager/task_queue_impl.h +++ b/naiveproxy/src/base/task/sequence_manager/task_queue_impl.h @@ -7,6 +7,7 @@ #include +#include #include #include #include @@ -33,7 +34,6 @@ #include "base/task/sequence_manager/atomic_flag_set.h" #include "base/task/sequence_manager/enqueue_order.h" #include "base/task/sequence_manager/fence.h" -#include "base/task/sequence_manager/lazily_deallocated_deque.h" #include "base/task/sequence_manager/sequenced_task_source.h" #include "base/task/sequence_manager/task_queue.h" #include "base/task/sequence_manager/tasks.h" @@ -147,6 +147,7 @@ class BASE_EXPORT TaskQueueImpl : public TaskQueue { AddOnTaskPostedHandler(OnTaskPostedHandler handler) override; void SetTaskExecutionTraceLogger(TaskExecutionTraceLogger logger) override; std::unique_ptr CreateQueueEnabledVoter() override; + void RemoveCancelledTasks() override; void SetQueueEnabled(bool enabled); void UnregisterTaskQueue(); @@ -498,8 +499,7 @@ class BASE_EXPORT TaskQueueImpl : public TaskQueue { // LazilyDeallocatedDeque use TimeTicks to figure out when to resize. We // should use real time here always. - using TaskDeque = - LazilyDeallocatedDeque; + using TaskDeque = std::deque; // Extracts all the tasks from the immediate incoming queue and swaps it with // |queue| which must be empty. diff --git a/naiveproxy/src/base/task/sequence_manager/task_queue_selector.cc b/naiveproxy/src/base/task/sequence_manager/task_queue_selector.cc index 58908aa0d1..cc5524276b 100644 --- a/naiveproxy/src/base/task/sequence_manager/task_queue_selector.cc +++ b/naiveproxy/src/base/task/sequence_manager/task_queue_selector.cc @@ -16,9 +16,7 @@ #include "base/threading/thread_checker.h" #include "base/trace_event/base_tracing.h" -namespace base { -namespace sequence_manager { -namespace internal { +namespace base::sequence_manager::internal { TaskQueueSelector::TaskQueueSelector( scoped_refptr associated_thread, @@ -286,6 +284,4 @@ TaskQueueSelector::ActivePriorityTracker::HighestActivePriority() const { std::countr_zero(active_priorities_)); } -} // namespace internal -} // namespace sequence_manager -} // namespace base +} // namespace base::sequence_manager::internal diff --git a/naiveproxy/src/base/task/sequence_manager/tasks.cc b/naiveproxy/src/base/task/sequence_manager/tasks.cc index a47ce8c2ca..d4b5741421 100644 --- a/naiveproxy/src/base/task/sequence_manager/tasks.cc +++ b/naiveproxy/src/base/task/sequence_manager/tasks.cc @@ -6,8 +6,7 @@ #include "base/task/sequence_manager/task_order.h" -namespace base { -namespace sequence_manager { +namespace base::sequence_manager { Task::Task(internal::PostedTask posted_task, EnqueueOrder sequence_order, @@ -151,5 +150,4 @@ PostedTask::PostedTask(PostedTask&& move_from) noexcept = default; PostedTask::~PostedTask() = default; } // namespace internal -} // namespace sequence_manager -} // namespace base +} // namespace base::sequence_manager diff --git a/naiveproxy/src/base/task/sequence_manager/test/fake_task.cc b/naiveproxy/src/base/task/sequence_manager/test/fake_task.cc index a3aa87c6fe..a74cf6567b 100644 --- a/naiveproxy/src/base/task/sequence_manager/test/fake_task.cc +++ b/naiveproxy/src/base/task/sequence_manager/test/fake_task.cc @@ -4,8 +4,7 @@ #include "base/task/sequence_manager/test/fake_task.h" -namespace base { -namespace sequence_manager { +namespace base::sequence_manager { FakeTask::FakeTask() : FakeTask(0 /* task_type */) {} @@ -31,5 +30,4 @@ FakeTaskTiming::FakeTaskTiming(TimeTicks start, TimeTicks end) state_ = State::Finished; } -} // namespace sequence_manager -} // namespace base +} // namespace base::sequence_manager diff --git a/naiveproxy/src/base/task/sequence_manager/test/mock_time_domain.cc b/naiveproxy/src/base/task/sequence_manager/test/mock_time_domain.cc index 0a79a0b27b..015eab66e3 100644 --- a/naiveproxy/src/base/task/sequence_manager/test/mock_time_domain.cc +++ b/naiveproxy/src/base/task/sequence_manager/test/mock_time_domain.cc @@ -6,8 +6,7 @@ #include -namespace base { -namespace sequence_manager { +namespace base::sequence_manager { MockTimeDomain::MockTimeDomain(TimeTicks initial_now_ticks) : now_ticks_(initial_now_ticks) {} @@ -32,5 +31,4 @@ const char* MockTimeDomain::GetName() const { return "MockTimeDomain"; } -} // namespace sequence_manager -} // namespace base +} // namespace base::sequence_manager diff --git a/naiveproxy/src/base/task/sequence_manager/test/mock_time_message_pump.cc b/naiveproxy/src/base/task/sequence_manager/test/mock_time_message_pump.cc index 4c1262f763..33a405df70 100644 --- a/naiveproxy/src/base/task/sequence_manager/test/mock_time_message_pump.cc +++ b/naiveproxy/src/base/task/sequence_manager/test/mock_time_message_pump.cc @@ -11,8 +11,7 @@ #include "base/notreached.h" #include "base/test/simple_test_tick_clock.h" -namespace base { -namespace sequence_manager { +namespace base::sequence_manager { MockTimeMessagePump::MockTimeMessagePump(SimpleTestTickClock* clock) : clock_(clock) {} @@ -88,5 +87,4 @@ void MockTimeMessagePump::ScheduleDelayedWork( next_wake_up_time_ = next_work_info.delayed_run_time; } -} // namespace sequence_manager -} // namespace base +} // namespace base::sequence_manager diff --git a/naiveproxy/src/base/task/sequence_manager/thread_controller.cc b/naiveproxy/src/base/task/sequence_manager/thread_controller.cc index 1a77fc856c..b91f2077ae 100644 --- a/naiveproxy/src/base/task/sequence_manager/thread_controller.cc +++ b/naiveproxy/src/base/task/sequence_manager/thread_controller.cc @@ -20,9 +20,7 @@ #include "base/time/time.h" #include "base/trace_event/base_tracing.h" -namespace base { -namespace sequence_manager { -namespace internal { +namespace base::sequence_manager::internal { namespace { // Enable sample metadata recording in this class, if it's currently disabled. @@ -736,6 +734,4 @@ const char* ThreadController::RunLevelTracker::TimeKeeper::PhaseToEventName( } } -} // namespace internal -} // namespace sequence_manager -} // namespace base +} // namespace base::sequence_manager::internal diff --git a/naiveproxy/src/base/task/sequence_manager/thread_controller.h b/naiveproxy/src/base/task/sequence_manager/thread_controller.h index 777bfda7ac..b09b81bab9 100644 --- a/naiveproxy/src/base/task/sequence_manager/thread_controller.h +++ b/naiveproxy/src/base/task/sequence_manager/thread_controller.h @@ -157,14 +157,6 @@ class BASE_EXPORT ThreadController { const char* thread_name, bool wall_time_based_metrics_enabled_for_testing); - // Currently only overridden on ThreadControllerWithMessagePumpImpl. - // - // While Now() is less than |prioritize_until| we will alternate between - // |work_batch_size| tasks before setting |yield_to_native| on the - // NextWorkInfo and yielding to the underlying sequence (e.g. the message - // pump). - virtual void PrioritizeYieldingToNative(base::TimeTicks prioritize_until) = 0; - // Sets the SingleThreadTaskRunner that will be returned by // SingleThreadTaskRunner::GetCurrentDefault on the thread controlled by this // ThreadController. diff --git a/naiveproxy/src/base/task/sequence_manager/thread_controller_impl.cc b/naiveproxy/src/base/task/sequence_manager/thread_controller_impl.cc index 32e30ef195..0c2f3a9cc1 100644 --- a/naiveproxy/src/base/task/sequence_manager/thread_controller_impl.cc +++ b/naiveproxy/src/base/task/sequence_manager/thread_controller_impl.cc @@ -17,9 +17,7 @@ #include "base/trace_event/base_tracing.h" #include "build/build_config.h" -namespace base { -namespace sequence_manager { -namespace internal { +namespace base::sequence_manager::internal { using ShouldScheduleWork = WorkDeduplicator::ShouldScheduleWork; @@ -377,10 +375,4 @@ void ThreadControllerImpl::DetachFromMessagePump() { } #endif // BUILDFLAG(IS_IOS) -void ThreadControllerImpl::PrioritizeYieldingToNative(base::TimeTicks) { - NOTREACHED(); -} - -} // namespace internal -} // namespace sequence_manager -} // namespace base +} // namespace base::sequence_manager::internal diff --git a/naiveproxy/src/base/task/sequence_manager/thread_controller_impl.h b/naiveproxy/src/base/task/sequence_manager/thread_controller_impl.h index a3f737ef93..a20a6ce7ba 100644 --- a/naiveproxy/src/base/task/sequence_manager/thread_controller_impl.h +++ b/naiveproxy/src/base/task/sequence_manager/thread_controller_impl.h @@ -67,7 +67,6 @@ class BASE_EXPORT ThreadControllerImpl : public ThreadController, #if BUILDFLAG(IS_IOS) void DetachFromMessagePump() override; #endif - void PrioritizeYieldingToNative(base::TimeTicks prioritize_until) override; bool ShouldQuitRunLoopWhenIdle() override; // RunLoop::NestingObserver: diff --git a/naiveproxy/src/base/task/sequence_manager/thread_controller_power_monitor.cc b/naiveproxy/src/base/task/sequence_manager/thread_controller_power_monitor.cc index 3bbc39cb7f..ad7abc2342 100644 --- a/naiveproxy/src/base/task/sequence_manager/thread_controller_power_monitor.cc +++ b/naiveproxy/src/base/task/sequence_manager/thread_controller_power_monitor.cc @@ -8,9 +8,7 @@ #include "base/power_monitor/power_monitor.h" #include "base/trace_event/base_tracing.h" -namespace base { -namespace sequence_manager { -namespace internal { +namespace base::sequence_manager::internal { namespace { @@ -94,6 +92,4 @@ void ThreadControllerPowerMonitor::OnResume() { } } -} // namespace internal -} // namespace sequence_manager -} // namespace base +} // namespace base::sequence_manager::internal diff --git a/naiveproxy/src/base/task/sequence_manager/thread_controller_with_message_pump_impl.cc b/naiveproxy/src/base/task/sequence_manager/thread_controller_with_message_pump_impl.cc index 373ced5472..a7a653fa10 100644 --- a/naiveproxy/src/base/task/sequence_manager/thread_controller_with_message_pump_impl.cc +++ b/naiveproxy/src/base/task/sequence_manager/thread_controller_with_message_pump_impl.cc @@ -31,9 +31,7 @@ #include "base/message_loop/message_pump_android.h" #endif -namespace base { -namespace sequence_manager { -namespace internal { +namespace base::sequence_manager::internal { namespace { // Returns |next_run_time| capped at 1 day from |lazy_now|. This is used to @@ -331,20 +329,6 @@ ThreadControllerWithMessagePumpImpl::DoWork() { LazyNow continuation_lazy_now(time_source_); std::optional next_wake_up = DoWorkImpl(&continuation_lazy_now); - // If we are yielding after DoWorkImpl (a work batch) set the flag boolean. - // This will inform the MessagePump to schedule a new continuation based on - // the information below, but even if its immediate let the native sequence - // have a chance to run. - // When we have |g_run_tasks_by_batches| active we want to always set the flag - // to true to have a similar behavior on Android as on the desktop platforms - // for this experiment. - if (RunsTasksByBatches() || - (!main_thread_only().yield_to_native_after_batch.is_null() && - continuation_lazy_now.Now() < - main_thread_only().yield_to_native_after_batch)) { - next_work_info.yield_to_native = true; - } - do_work_needed_before_wait_ = false; // Schedule a continuation. @@ -728,11 +712,6 @@ MessagePump* ThreadControllerWithMessagePumpImpl::GetBoundMessagePump() const { return pump_.get(); } -void ThreadControllerWithMessagePumpImpl::PrioritizeYieldingToNative( - base::TimeTicks prioritize_until) { - main_thread_only().yield_to_native_after_batch = prioritize_until; -} - #if BUILDFLAG(IS_IOS) void ThreadControllerWithMessagePumpImpl::AttachToMessagePump() { static_cast(pump_.get())->Attach(this); @@ -758,6 +737,4 @@ bool ThreadControllerWithMessagePumpImpl::ShouldQuitRunLoopWhenIdle() { return ShouldQuitWhenIdle(); } -} // namespace internal -} // namespace sequence_manager -} // namespace base +} // namespace base::sequence_manager::internal diff --git a/naiveproxy/src/base/task/sequence_manager/thread_controller_with_message_pump_impl.h b/naiveproxy/src/base/task/sequence_manager/thread_controller_with_message_pump_impl.h index 4991277fd0..b9cbdf18fd 100644 --- a/naiveproxy/src/base/task/sequence_manager/thread_controller_with_message_pump_impl.h +++ b/naiveproxy/src/base/task/sequence_manager/thread_controller_with_message_pump_impl.h @@ -73,7 +73,6 @@ class BASE_EXPORT ThreadControllerWithMessagePumpImpl void SetTaskExecutionAllowedInNativeNestedLoop(bool allowed) override; bool IsTaskExecutionAllowed() const override; MessagePump* GetBoundMessagePump() const override; - void PrioritizeYieldingToNative(base::TimeTicks prioritize_until) override; #if BUILDFLAG(IS_IOS) || BUILDFLAG(IS_ANDROID) void AttachToMessagePump() override; #endif @@ -128,10 +127,6 @@ class BASE_EXPORT ThreadControllerWithMessagePumpImpl bool can_change_batch_size = true; - // While Now() is less than |yield_to_native_after_batch| we will request a - // yield to the MessagePump after |work_batch_size| work items. - base::TimeTicks yield_to_native_after_batch = base::TimeTicks(); - // The time after which the runloop should quit. TimeTicks quit_runloop_after = TimeTicks::Max(); diff --git a/naiveproxy/src/base/task/sequence_manager/time_domain.cc b/naiveproxy/src/base/task/sequence_manager/time_domain.cc index 210d829de7..62b84e9c07 100644 --- a/naiveproxy/src/base/task/sequence_manager/time_domain.cc +++ b/naiveproxy/src/base/task/sequence_manager/time_domain.cc @@ -9,8 +9,7 @@ #include "base/task/sequence_manager/sequence_manager_impl.h" #include "base/threading/thread_checker.h" -namespace base { -namespace sequence_manager { +namespace base::sequence_manager { void TimeDomain::NotifyPolicyChanged() { sequence_manager_->ScheduleWork(); @@ -28,5 +27,4 @@ Value::Dict TimeDomain::AsValue() const { return state; } -} // namespace sequence_manager -} // namespace base +} // namespace base::sequence_manager diff --git a/naiveproxy/src/base/task/sequence_manager/wake_up_queue.cc b/naiveproxy/src/base/task/sequence_manager/wake_up_queue.cc index 123c83cf73..b38f4c2c9d 100644 --- a/naiveproxy/src/base/task/sequence_manager/wake_up_queue.cc +++ b/naiveproxy/src/base/task/sequence_manager/wake_up_queue.cc @@ -11,9 +11,7 @@ #include "base/task/sequence_manager/task_queue_impl.h" #include "base/threading/thread_checker.h" -namespace base { -namespace sequence_manager { -namespace internal { +namespace base::sequence_manager::internal { WakeUpQueue::WakeUpQueue( scoped_refptr associated_thread) @@ -193,6 +191,4 @@ void NonWakingWakeUpQueue::UnregisterQueue(internal::TaskQueueImpl* queue) { SetNextWakeUpForQueue(queue, nullptr, std::nullopt); } -} // namespace internal -} // namespace sequence_manager -} // namespace base +} // namespace base::sequence_manager::internal diff --git a/naiveproxy/src/base/task/sequence_manager/work_deduplicator.cc b/naiveproxy/src/base/task/sequence_manager/work_deduplicator.cc index 523d4290cf..b4a01724b2 100644 --- a/naiveproxy/src/base/task/sequence_manager/work_deduplicator.cc +++ b/naiveproxy/src/base/task/sequence_manager/work_deduplicator.cc @@ -9,9 +9,7 @@ #include "base/check_op.h" -namespace base { -namespace sequence_manager { -namespace internal { +namespace base::sequence_manager::internal { WorkDeduplicator::WorkDeduplicator( scoped_refptr associated_thread) @@ -74,6 +72,4 @@ WorkDeduplicator::ShouldScheduleWork WorkDeduplicator::DidCheckForMoreWork( : ShouldScheduleWork::kNotNeeded; } -} // namespace internal -} // namespace sequence_manager -} // namespace base +} // namespace base::sequence_manager::internal diff --git a/naiveproxy/src/base/task/sequence_manager/work_queue.cc b/naiveproxy/src/base/task/sequence_manager/work_queue.cc index 1af116f38d..775d52139a 100644 --- a/naiveproxy/src/base/task/sequence_manager/work_queue.cc +++ b/naiveproxy/src/base/task/sequence_manager/work_queue.cc @@ -16,9 +16,7 @@ #include "third_party/abseil-cpp/absl/cleanup/cleanup.h" #include "third_party/abseil-cpp/absl/container/inlined_vector.h" -namespace base { -namespace sequence_manager { -namespace internal { +namespace base::sequence_manager::internal { WorkQueue::WorkQueue(TaskQueueImpl* task_queue, const char* name, @@ -214,9 +212,6 @@ Task WorkQueue::TakeTaskFromWorkQueue() { // right thing. task_queue_->TakeImmediateIncomingQueueTasks(&tasks_); } - // Since the queue is empty, now is a good time to consider reducing it's - // capacity if we're wasting memory. - tasks_.MaybeShrinkQueue(); } DCHECK(work_queue_sets_); @@ -270,9 +265,6 @@ bool WorkQueue::RemoveAllCanceledTasksFromFront() { // right thing. task_queue_->TakeImmediateIncomingQueueTasks(&tasks_); } - // Since the queue is empty, now is a good time to consider reducing it's - // capacity if we're wasting memory. - tasks_.MaybeShrinkQueue(); } // If we have a valid |heap_handle_| (i.e. we're not blocked by a fence or // disabled) then |work_queue_sets_| needs to be told. @@ -334,10 +326,6 @@ bool WorkQueue::RemoveFence() { return false; } -void WorkQueue::MaybeShrinkQueue() { - tasks_.MaybeShrinkQueue(); -} - void WorkQueue::PopTaskForTesting() { if (tasks_.empty()) { return; @@ -356,6 +344,4 @@ void WorkQueue::CollectTasksOlderThan(TaskOrder reference, } } -} // namespace internal -} // namespace sequence_manager -} // namespace base +} // namespace base::sequence_manager::internal diff --git a/naiveproxy/src/base/task/sequence_manager/work_queue.h b/naiveproxy/src/base/task/sequence_manager/work_queue.h index df30e39f66..1a83092328 100644 --- a/naiveproxy/src/base/task/sequence_manager/work_queue.h +++ b/naiveproxy/src/base/task/sequence_manager/work_queue.h @@ -106,8 +106,6 @@ class BASE_EXPORT WorkQueue { size_t Size() const { return tasks_.size(); } - size_t Capacity() const { return tasks_.capacity(); } - // Pulls a task off the |tasks_| and informs the WorkQueueSets. If the // task removed had an enqueue order >= the current fence then WorkQueue // pretends to be empty as far as the WorkQueueSets is concerned. @@ -153,9 +151,6 @@ class BASE_EXPORT WorkQueue { // Otherwise returns false. bool BlockedByFence() const; - // Shrinks |tasks_| if it's wasting memory. - void MaybeShrinkQueue(); - // Test support function. This should not be used in production code. void PopTaskForTesting(); diff --git a/naiveproxy/src/base/task/sequence_manager/work_queue_sets.cc b/naiveproxy/src/base/task/sequence_manager/work_queue_sets.cc index 599c972daa..2b3c06cef0 100644 --- a/naiveproxy/src/base/task/sequence_manager/work_queue_sets.cc +++ b/naiveproxy/src/base/task/sequence_manager/work_queue_sets.cc @@ -10,9 +10,7 @@ #include "base/task/sequence_manager/task_order.h" #include "base/task/sequence_manager/work_queue.h" -namespace base { -namespace sequence_manager { -namespace internal { +namespace base::sequence_manager::internal { WorkQueueSets::WorkQueueSets(const char* name, Observer* observer, @@ -239,6 +237,4 @@ void WorkQueueSets::CollectSkippedOverLowerPriorityTasks( } } -} // namespace internal -} // namespace sequence_manager -} // namespace base +} // namespace base::sequence_manager::internal diff --git a/naiveproxy/src/base/task/sequenced_task_runner.h b/naiveproxy/src/base/task/sequenced_task_runner.h index 842960d599..fcd4b34211 100644 --- a/naiveproxy/src/base/task/sequenced_task_runner.h +++ b/naiveproxy/src/base/task/sequenced_task_runner.h @@ -7,7 +7,6 @@ #include -#include "base/auto_reset.h" #include "base/base_export.h" #include "base/functional/callback.h" #include "base/gtest_prod_util.h" diff --git a/naiveproxy/src/base/task/single_thread_task_runner.h b/naiveproxy/src/base/task/single_thread_task_runner.h index 171d12c305..66b9b1db7d 100644 --- a/naiveproxy/src/base/task/single_thread_task_runner.h +++ b/naiveproxy/src/base/task/single_thread_task_runner.h @@ -7,7 +7,6 @@ #include -#include "base/auto_reset.h" #include "base/base_export.h" #include "base/dcheck_is_on.h" #include "base/gtest_prod_util.h" diff --git a/naiveproxy/src/base/task/task_features.cc b/naiveproxy/src/base/task/task_features.cc index 75ca91d007..ff76a8d9ee 100644 --- a/naiveproxy/src/base/task/task_features.cc +++ b/naiveproxy/src/base/task/task_features.cc @@ -24,48 +24,49 @@ namespace base { BASE_FEATURE(kUseUtilityThreadGroup, "UseUtilityThreadGroup", - base::FEATURE_DISABLED_BY_DEFAULT); + FEATURE_DISABLED_BY_DEFAULT); BASE_FEATURE(kAddTaskLeewayFeature, "AddTaskLeeway", - base::FEATURE_ENABLED_BY_DEFAULT); + FEATURE_ENABLED_BY_DEFAULT); -const base::FeatureParam kTaskLeewayParam{&kAddTaskLeewayFeature, - "leeway", kDefaultLeeway}; -const base::FeatureParam kMaxPreciseDelay{ - &kAddTaskLeewayFeature, "max_precise_delay", kDefaultMaxPreciseDelay}; +// Note: Do not use the prepared macro as of no need for a local cache. +constinit const FeatureParam kTaskLeewayParam{ + &kAddTaskLeewayFeature, "leeway", kDefaultLeeway}; +BASE_FEATURE_PARAM(TimeDelta, + kMaxPreciseDelay, + &kAddTaskLeewayFeature, + "max_precise_delay", + kDefaultMaxPreciseDelay); -BASE_FEATURE(kAlignWakeUps, "AlignWakeUps", base::FEATURE_DISABLED_BY_DEFAULT); +BASE_FEATURE(kAlignWakeUps, "AlignWakeUps", FEATURE_DISABLED_BY_DEFAULT); -BASE_FEATURE(kTimerSlackMac, - "TimerSlackMac", - base::FEATURE_DISABLED_BY_DEFAULT); +BASE_FEATURE(kTimerSlackMac, "TimerSlackMac", FEATURE_DISABLED_BY_DEFAULT); BASE_FEATURE(kExplicitHighResolutionTimerWin, "ExplicitHighResolutionTimerWin", - base::FEATURE_ENABLED_BY_DEFAULT); + FEATURE_ENABLED_BY_DEFAULT); BASE_FEATURE(kUIPumpImprovementsWin, "UIPumpImprovementsWin", - base::FEATURE_ENABLED_BY_DEFAULT); + FEATURE_ENABLED_BY_DEFAULT); BASE_FEATURE(kPumpFastToSleepAndroid, "PumpFastToSleepAndroid", - base::FEATURE_ENABLED_BY_DEFAULT); + FEATURE_ENABLED_BY_DEFAULT); BASE_FEATURE(kRunTasksByBatches, "RunTasksByBatches", #if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_WIN) - base::FEATURE_ENABLED_BY_DEFAULT); + FEATURE_ENABLED_BY_DEFAULT); #else - base::FEATURE_DISABLED_BY_DEFAULT); + FEATURE_DISABLED_BY_DEFAULT); #endif -BASE_FEATURE(kThreadPoolCap2, - "ThreadPoolCap2", - base::FEATURE_DISABLED_BY_DEFAULT); +BASE_FEATURE(kThreadPoolCap2, "ThreadPoolCap2", FEATURE_DISABLED_BY_DEFAULT); -const base::FeatureParam kThreadPoolCapRestrictedCount{ +// Note: Do not use the prepared macro as of no need for a local cache. +constinit const FeatureParam kThreadPoolCapRestrictedCount{ &kThreadPoolCap2, "restricted_count", 3}; } // namespace base diff --git a/naiveproxy/src/base/task/task_features.h b/naiveproxy/src/base/task/task_features.h index a33f8d9622..f84c41cb68 100644 --- a/naiveproxy/src/base/task/task_features.h +++ b/naiveproxy/src/base/task/task_features.h @@ -15,7 +15,7 @@ namespace base { // Fixed amount of threads that will be used as a cap for thread pools. BASE_EXPORT BASE_DECLARE_FEATURE(kThreadPoolCap2); -extern const BASE_EXPORT base::FeatureParam kThreadPoolCapRestrictedCount; +BASE_EXPORT BASE_DECLARE_FEATURE_PARAM(int, kThreadPoolCapRestrictedCount); // Under this feature, a utility_thread_group will be created for // running USER_VISIBLE tasks. @@ -29,12 +29,12 @@ constexpr TimeDelta kDefaultLeeway = Milliseconds(16); #else constexpr TimeDelta kDefaultLeeway = Milliseconds(8); #endif // #if !BUILDFLAG(IS_WIN) -extern const BASE_EXPORT base::FeatureParam kTaskLeewayParam; +BASE_EXPORT BASE_DECLARE_FEATURE_PARAM(TimeDelta, kTaskLeewayParam); // We consider that delayed tasks above |kMaxPreciseDelay| never need // DelayPolicy::kPrecise. The default value is slightly above 30Hz timer. constexpr TimeDelta kDefaultMaxPreciseDelay = Milliseconds(36); -extern const BASE_EXPORT base::FeatureParam kMaxPreciseDelay; +BASE_EXPORT BASE_DECLARE_FEATURE_PARAM(TimeDelta, kMaxPreciseDelay); // Under this feature, wake ups are aligned at a 8ms boundary when allowed per // DelayPolicy. diff --git a/naiveproxy/src/base/task/task_traits.h b/naiveproxy/src/base/task/task_traits.h index 923172b3f1..735212fbdc 100644 --- a/naiveproxy/src/base/task/task_traits.h +++ b/naiveproxy/src/base/task/task_traits.h @@ -8,7 +8,6 @@ #include #include -#include #include #include diff --git a/naiveproxy/src/base/task/thread_pool/delayed_task_manager.cc b/naiveproxy/src/base/task/thread_pool/delayed_task_manager.cc index d1afe11da1..c71155f57d 100644 --- a/naiveproxy/src/base/task/thread_pool/delayed_task_manager.cc +++ b/naiveproxy/src/base/task/thread_pool/delayed_task_manager.cc @@ -16,8 +16,7 @@ #include "base/task/task_runner.h" #include "base/task/thread_pool/task.h" -namespace base { -namespace internal { +namespace base::internal { DelayedTaskManager::DelayedTask::DelayedTask() = default; @@ -237,5 +236,4 @@ void DelayedTaskManager::ScheduleProcessRipeTasksOnServiceThread() { process_ripe_tasks_closure_, process_ripe_tasks_time, delay_policy); } -} // namespace internal -} // namespace base +} // namespace base::internal diff --git a/naiveproxy/src/base/task/thread_pool/environment_config.cc b/naiveproxy/src/base/task/thread_pool/environment_config.cc index 3a718409a4..a2e75c42db 100644 --- a/naiveproxy/src/base/task/thread_pool/environment_config.cc +++ b/naiveproxy/src/base/task/thread_pool/environment_config.cc @@ -10,8 +10,7 @@ #include "base/threading/platform_thread.h" #include "build/build_config.h" -namespace base { -namespace internal { +namespace base::internal { namespace { @@ -74,5 +73,4 @@ bool CanUseUtilityThreadTypeForWorkerThread() { return can_use_utility_thread_type_for_worker_thread; } -} // namespace internal -} // namespace base +} // namespace base::internal diff --git a/naiveproxy/src/base/task/thread_pool/job_task_source.cc b/naiveproxy/src/base/task/thread_pool/job_task_source.cc index 7e1ddded11..e7ef71b68f 100644 --- a/naiveproxy/src/base/task/thread_pool/job_task_source.cc +++ b/naiveproxy/src/base/task/thread_pool/job_task_source.cc @@ -21,8 +21,7 @@ #include "base/time/time_override.h" #include "base/trace_event/base_tracing.h" -namespace base { -namespace internal { +namespace base::internal { namespace { @@ -415,5 +414,4 @@ std::optional JobTaskSource::Clear(TaskSource::Transaction* transaction) { return std::nullopt; } -} // namespace internal -} // namespace base +} // namespace base::internal diff --git a/naiveproxy/src/base/task/thread_pool/pooled_parallel_task_runner.cc b/naiveproxy/src/base/task/thread_pool/pooled_parallel_task_runner.cc index a59982d93c..e26e48bd89 100644 --- a/naiveproxy/src/base/task/thread_pool/pooled_parallel_task_runner.cc +++ b/naiveproxy/src/base/task/thread_pool/pooled_parallel_task_runner.cc @@ -7,8 +7,7 @@ #include "base/task/thread_pool/pooled_task_runner_delegate.h" #include "base/task/thread_pool/sequence.h" -namespace base { -namespace internal { +namespace base::internal { PooledParallelTaskRunner::PooledParallelTaskRunner( const TaskTraits& traits, @@ -35,5 +34,4 @@ bool PooledParallelTaskRunner::PostDelayedTask(const Location& from_here, std::move(sequence)); } -} // namespace internal -} // namespace base +} // namespace base::internal diff --git a/naiveproxy/src/base/task/thread_pool/pooled_sequenced_task_runner.cc b/naiveproxy/src/base/task/thread_pool/pooled_sequenced_task_runner.cc index 3b945fec99..b872631cd7 100644 --- a/naiveproxy/src/base/task/thread_pool/pooled_sequenced_task_runner.cc +++ b/naiveproxy/src/base/task/thread_pool/pooled_sequenced_task_runner.cc @@ -8,8 +8,7 @@ #include "base/sequence_token.h" #include "base/task/default_delayed_task_handle_delegate.h" -namespace base { -namespace internal { +namespace base::internal { PooledSequencedTaskRunner::PooledSequencedTaskRunner( const TaskTraits& traits, @@ -73,5 +72,4 @@ void PooledSequencedTaskRunner::UpdatePriority(TaskPriority priority) { pooled_task_runner_delegate_->UpdatePriority(sequence_, priority); } -} // namespace internal -} // namespace base +} // namespace base::internal diff --git a/naiveproxy/src/base/task/thread_pool/pooled_single_thread_task_runner_manager.cc b/naiveproxy/src/base/task/thread_pool/pooled_single_thread_task_runner_manager.cc index 925ca991cf..1290d0ad95 100644 --- a/naiveproxy/src/base/task/thread_pool/pooled_single_thread_task_runner_manager.cc +++ b/naiveproxy/src/base/task/thread_pool/pooled_single_thread_task_runner_manager.cc @@ -9,6 +9,7 @@ #include "base/task/thread_pool/pooled_single_thread_task_runner_manager.h" +#include #include #include #include @@ -21,7 +22,6 @@ #include "base/memory/ptr_util.h" #include "base/memory/raw_ptr.h" #include "base/message_loop/message_pump.h" -#include "base/ranges/algorithm.h" #include "base/strings/stringprintf.h" #include "base/synchronization/atomic_flag.h" #include "base/task/default_delayed_task_handle_delegate.h" @@ -45,8 +45,7 @@ #include "base/win/scoped_com_initializer.h" #endif // BUILDFLAG(IS_WIN) -namespace base { -namespace internal { +namespace base::internal { namespace { @@ -857,7 +856,7 @@ void PooledSingleThreadTaskRunnerManager::UnregisterWorkerThread( return; } - auto worker_iter = ranges::find(workers_, worker); + auto worker_iter = std::ranges::find(workers_, worker); CHECK(worker_iter != workers_.end(), base::NotFatalUntil::M125); worker_to_destroy = std::move(*worker_iter); workers_.erase(worker_iter); @@ -885,19 +884,23 @@ void PooledSingleThreadTaskRunnerManager::ReleaseSharedWorkerThreads() { } } - for (size_t i = 0; i < std::size(local_shared_worker_threads); ++i) { - for (size_t j = 0; j < std::size(local_shared_worker_threads[i]); ++j) { - if (local_shared_worker_threads[i][j]) { - UnregisterWorkerThread(local_shared_worker_threads[i][j]); + for (auto& threads : local_shared_worker_threads) { + for (auto* thread : threads) { + if (thread) { + UnregisterWorkerThread(thread); } -#if BUILDFLAG(IS_WIN) - if (local_shared_com_worker_threads[i][j]) { - UnregisterWorkerThread(local_shared_com_worker_threads[i][j]); - } -#endif } } + +#if BUILDFLAG(IS_WIN) + for (auto& com_threads : local_shared_com_worker_threads) { + for (auto* com_thread : com_threads) { + if (com_thread) { + UnregisterWorkerThread(com_thread); + } + } + } +#endif } -} // namespace internal -} // namespace base +} // namespace base::internal diff --git a/naiveproxy/src/base/task/thread_pool/pooled_task_runner_delegate.cc b/naiveproxy/src/base/task/thread_pool/pooled_task_runner_delegate.cc index e0b85b3dc7..c42cab221e 100644 --- a/naiveproxy/src/base/task/thread_pool/pooled_task_runner_delegate.cc +++ b/naiveproxy/src/base/task/thread_pool/pooled_task_runner_delegate.cc @@ -7,8 +7,7 @@ #include "base/debug/task_trace.h" #include "base/logging.h" -namespace base { -namespace internal { +namespace base::internal { namespace { @@ -52,5 +51,4 @@ bool PooledTaskRunnerDelegate::MatchesCurrentDelegate( return g_current_delegate == delegate; } -} // namespace internal -} // namespace base +} // namespace base::internal diff --git a/naiveproxy/src/base/task/thread_pool/priority_queue.cc b/naiveproxy/src/base/task/thread_pool/priority_queue.cc index 1fe450f36d..a576d75b09 100644 --- a/naiveproxy/src/base/task/thread_pool/priority_queue.cc +++ b/naiveproxy/src/base/task/thread_pool/priority_queue.cc @@ -11,8 +11,7 @@ #include "base/memory/ptr_util.h" #include "base/types/cxx23_to_underlying.h" -namespace base { -namespace internal { +namespace base::internal { // A class combining a TaskSource and the TaskSourceSortKey that determines its // position in a PriorityQueue. Instances are only mutable via @@ -221,5 +220,4 @@ void PriorityQueue::IncrementNumTaskSourcesForPriority(TaskPriority priority) { ++num_task_sources_per_priority_[base::to_underlying(priority)]; } -} // namespace internal -} // namespace base +} // namespace base::internal diff --git a/naiveproxy/src/base/task/thread_pool/sequence.cc b/naiveproxy/src/base/task/thread_pool/sequence.cc index e3fd62ed91..3e26ff6f74 100644 --- a/naiveproxy/src/base/task/thread_pool/sequence.cc +++ b/naiveproxy/src/base/task/thread_pool/sequence.cc @@ -15,8 +15,7 @@ #include "base/task/task_features.h" #include "base/time/time.h" -namespace base { -namespace internal { +namespace base::internal { namespace { @@ -365,5 +364,4 @@ bool Sequence::IsEmpty() const { return queue_.empty() && delayed_queue_.empty(); } -} // namespace internal -} // namespace base +} // namespace base::internal diff --git a/naiveproxy/src/base/task/thread_pool/service_thread.cc b/naiveproxy/src/base/task/thread_pool/service_thread.cc index 9aaf0932e4..b8c38a63e0 100644 --- a/naiveproxy/src/base/task/thread_pool/service_thread.cc +++ b/naiveproxy/src/base/task/thread_pool/service_thread.cc @@ -6,8 +6,7 @@ #include "base/debug/alias.h" -namespace base { -namespace internal { +namespace base::internal { ServiceThread::ServiceThread() : Thread("ThreadPoolServiceThread") {} @@ -16,5 +15,4 @@ NOINLINE void ServiceThread::Run(RunLoop* run_loop) { NO_CODE_FOLDING(); } -} // namespace internal -} // namespace base +} // namespace base::internal diff --git a/naiveproxy/src/base/task/thread_pool/task.cc b/naiveproxy/src/base/task/thread_pool/task.cc index aba9d6c2b7..39b541e784 100644 --- a/naiveproxy/src/base/task/thread_pool/task.cc +++ b/naiveproxy/src/base/task/thread_pool/task.cc @@ -6,8 +6,7 @@ #include -namespace base { -namespace internal { +namespace base::internal { Task::Task(const Location& posted_from, OnceClosure task, @@ -48,5 +47,4 @@ Task::Task(Task&& other) noexcept : PendingTask(std::move(other)) {} Task& Task::operator=(Task&& other) = default; -} // namespace internal -} // namespace base +} // namespace base::internal diff --git a/naiveproxy/src/base/task/thread_pool/task_source.cc b/naiveproxy/src/base/task/thread_pool/task_source.cc index fcc596784e..cadee8c1cb 100644 --- a/naiveproxy/src/base/task/thread_pool/task_source.cc +++ b/naiveproxy/src/base/task/thread_pool/task_source.cc @@ -12,8 +12,7 @@ #include "base/task/task_features.h" #include "base/task/thread_pool/task_tracker.h" -namespace base { -namespace internal { +namespace base::internal { ExecutionEnvironment::~ExecutionEnvironment() = default; @@ -221,5 +220,4 @@ TaskSourceAndTransaction TaskSourceAndTransaction::FromTaskSource( std::move(transaction)); } -} // namespace internal -} // namespace base +} // namespace base::internal diff --git a/naiveproxy/src/base/task/thread_pool/task_source_sort_key.cc b/naiveproxy/src/base/task/thread_pool/task_source_sort_key.cc index b6895f04bf..926974bec1 100644 --- a/naiveproxy/src/base/task/thread_pool/task_source_sort_key.cc +++ b/naiveproxy/src/base/task/thread_pool/task_source_sort_key.cc @@ -4,8 +4,7 @@ #include "base/task/thread_pool/task_source_sort_key.h" -namespace base { -namespace internal { +namespace base::internal { static_assert(sizeof(TaskSourceSortKey) <= 2 * sizeof(uint64_t), "Members in TaskSourceSortKey should be ordered to be compact."); @@ -37,5 +36,4 @@ bool TaskSourceSortKey::operator<(const TaskSourceSortKey& other) const { return ready_time_ > other.ready_time_; } -} // namespace internal -} // namespace base +} // namespace base::internal diff --git a/naiveproxy/src/base/task/thread_pool/task_tracker.cc b/naiveproxy/src/base/task/thread_pool/task_tracker.cc index 3d130d7afa..0e779e0035 100644 --- a/naiveproxy/src/base/task/thread_pool/task_tracker.cc +++ b/naiveproxy/src/base/task/thread_pool/task_tracker.cc @@ -35,8 +35,7 @@ #include "base/values.h" #include "build/build_config.h" -namespace base { -namespace internal { +namespace base::internal { namespace { @@ -99,30 +98,6 @@ ChromeThreadPoolTask::ShutdownBehavior ShutdownBehaviorToProto( } #endif // BUILDFLAG(ENABLE_BASE_TRACING) -auto EmitThreadPoolTraceEventMetadata(perfetto::EventContext& ctx, - const TaskTraits& traits, - TaskSource* task_source, - const SequenceToken& token) { -#if BUILDFLAG(ENABLE_BASE_TRACING) - // Other parameters are included only when "scheduler" category is enabled. - const uint8_t* scheduler_category_enabled = - TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED("scheduler"); - - if (!*scheduler_category_enabled) { - return; - } - auto* task = ctx.event() - ->set_thread_pool_task(); - task->set_task_priority(TaskPriorityToProto(traits.priority())); - task->set_execution_mode(ExecutionModeToProto(task_source->execution_mode())); - task->set_shutdown_behavior( - ShutdownBehaviorToProto(traits.shutdown_behavior())); - if (token.IsValid()) { - task->set_sequence_token(token.ToInternalValue()); - } -#endif // BUILDFLAG(ENABLE_BASE_TRACING) -} - // If this is greater than 0 on a given thread, it will ignore the DCHECK which // prevents posting BLOCK_SHUTDOWN tasks after shutdown. There are cases where // posting back to a BLOCK_SHUTDOWN sequence is a coincidence rather than part @@ -657,6 +632,34 @@ void TaskTracker::InvokeFlushCallbacksForTesting() { } } +void TaskTracker::EmitThreadPoolTraceEventMetadata(perfetto::EventContext& ctx, + const TaskTraits& traits, + TaskSource* task_source, + const SequenceToken& token) { +#if BUILDFLAG(ENABLE_BASE_TRACING) + if (TRACE_EVENT_CATEGORY_ENABLED("scheduler.flow")) { + if (token.IsValid()) { + ctx.event()->add_flow_ids(reinterpret_cast(this) ^ + static_cast(token.ToInternalValue())); + } + } + + // Other parameters are included only when "scheduler" category is enabled. + if (TRACE_EVENT_CATEGORY_ENABLED("scheduler")) { + auto* task = ctx.event() + ->set_thread_pool_task(); + task->set_task_priority(TaskPriorityToProto(traits.priority())); + task->set_execution_mode( + ExecutionModeToProto(task_source->execution_mode())); + task->set_shutdown_behavior( + ShutdownBehaviorToProto(traits.shutdown_behavior())); + if (token.IsValid()) { + task->set_sequence_token(token.ToInternalValue()); + } + } +#endif // BUILDFLAG(ENABLE_BASE_TRACING) +} + NOINLINE void TaskTracker::RunContinueOnShutdown(Task& task, const TaskTraits& traits, TaskSource* task_source, @@ -708,5 +711,4 @@ void TaskTracker::RunTaskWithShutdownBehavior(Task& task, } } -} // namespace internal -} // namespace base +} // namespace base::internal diff --git a/naiveproxy/src/base/task/thread_pool/task_tracker.h b/naiveproxy/src/base/task/thread_pool/task_tracker.h index dcab9981b2..50b6252937 100644 --- a/naiveproxy/src/base/task/thread_pool/task_tracker.h +++ b/naiveproxy/src/base/task/thread_pool/task_tracker.h @@ -204,6 +204,13 @@ class BASE_EXPORT TaskTracker { // Invokes all |flush_callbacks_for_testing_| if any in a lock-safe manner. void InvokeFlushCallbacksForTesting(); + // Adds ThreadPool related trace event metadata to the event `ctx`. Notably, + // records sequence information, as well as priority/execution mode. + void EmitThreadPoolTraceEventMetadata(perfetto::EventContext& ctx, + const TaskTraits& traits, + TaskSource* task_source, + const SequenceToken& token); + // Dummy frames to allow identification of shutdown behavior in a stack trace. void RunContinueOnShutdown(Task& task, const TaskTraits& traits, diff --git a/naiveproxy/src/base/task/thread_pool/test_task_factory.cc b/naiveproxy/src/base/task/thread_pool/test_task_factory.cc index d5d3f98d3f..1573ae6c4b 100644 --- a/naiveproxy/src/base/task/thread_pool/test_task_factory.cc +++ b/naiveproxy/src/base/task/thread_pool/test_task_factory.cc @@ -14,9 +14,7 @@ #include "base/task/single_thread_task_runner.h" #include "testing/gtest/include/gtest/gtest.h" -namespace base { -namespace internal { -namespace test { +namespace base::internal::test { TestTaskFactory::TestTaskFactory(scoped_refptr task_runner, TaskSourceExecutionMode execution_mode) @@ -113,6 +111,4 @@ void TestTaskFactory::RunTaskCallback(size_t task_index, } } -} // namespace test -} // namespace internal -} // namespace base +} // namespace base::internal::test diff --git a/naiveproxy/src/base/task/thread_pool/test_utils.cc b/naiveproxy/src/base/task/thread_pool/test_utils.cc index a9c181e8c9..d42ba74cfb 100644 --- a/naiveproxy/src/base/task/thread_pool/test_utils.cc +++ b/naiveproxy/src/base/task/thread_pool/test_utils.cc @@ -20,9 +20,7 @@ #include "testing/gtest/include/gtest/gtest.h" #include "third_party/abseil-cpp/absl/types/variant.h" -namespace base { -namespace internal { -namespace test { +namespace base::internal::test { namespace { @@ -339,6 +337,4 @@ void ShutdownTaskTracker(TaskTracker* task_tracker) { task_tracker->CompleteShutdown(); } -} // namespace test -} // namespace internal -} // namespace base +} // namespace base::internal::test diff --git a/naiveproxy/src/base/task/thread_pool/thread_group.cc b/naiveproxy/src/base/task/thread_pool/thread_group.cc index b52f207dd9..1a5b7c84f1 100644 --- a/naiveproxy/src/base/task/thread_pool/thread_group.cc +++ b/naiveproxy/src/base/task/thread_pool/thread_group.cc @@ -7,6 +7,7 @@ #include #include +#include "base/auto_reset.h" #include "base/check.h" #include "base/functional/bind.h" #include "base/functional/callback_helpers.h" @@ -19,8 +20,7 @@ #include "base/win/scoped_winrt_initializer.h" #endif -namespace base { -namespace internal { +namespace base::internal { namespace { @@ -659,5 +659,4 @@ void ThreadGroup::IncrementMaxBestEffortTasksLockRequired() { ThreadGroup::InitializedInStart::InitializedInStart() = default; ThreadGroup::InitializedInStart::~InitializedInStart() = default; -} // namespace internal -} // namespace base +} // namespace base::internal diff --git a/naiveproxy/src/base/task/thread_pool/thread_group_impl.cc b/naiveproxy/src/base/task/thread_pool/thread_group_impl.cc index 80e8e5015d..9488e141ab 100644 --- a/naiveproxy/src/base/task/thread_pool/thread_group_impl.cc +++ b/naiveproxy/src/base/task/thread_pool/thread_group_impl.cc @@ -7,8 +7,8 @@ #include #include -#include "base/auto_reset.h" #include "base/metrics/histogram_macros.h" +#include "base/profiler/thread_group_profiler.h" #include "base/sequence_token.h" #include "base/strings/stringprintf.h" #include "base/task/common/checked_lock.h" @@ -20,8 +20,7 @@ #include "base/trace_event/base_tracing.h" #include "third_party/abseil-cpp/absl/container/inlined_vector.h" -namespace base { -namespace internal { +namespace base::internal { // Upon destruction, executes actions that control the number of active workers. // Useful to satisfy locking requirements of these actions. @@ -130,7 +129,7 @@ class ThreadGroupImpl::WorkerDelegate : public WorkerThread::Delegate, template bool ContainsWorker(const std::vector>& workers, const WorkerThread* worker) { - auto it = ranges::find_if( + auto it = std::ranges::find_if( workers, [worker](const scoped_refptr& i) { return i.get() == worker; }); return it != workers.end(); @@ -210,6 +209,7 @@ class ThreadGroupImpl::WorkerDelegate : public WorkerThread::Delegate, ThreadGroupImpl::ThreadGroupImpl(std::string_view histogram_label, std::string_view thread_group_label, ThreadType thread_type_hint, + int64_t thread_group_type, TrackedRef task_tracker, TrackedRef delegate) : ThreadGroup(histogram_label, @@ -217,6 +217,7 @@ ThreadGroupImpl::ThreadGroupImpl(std::string_view histogram_label, thread_type_hint, std::move(task_tracker), std::move(delegate)), + thread_group_type_(thread_group_type), tracked_ref_factory_(this) { DCHECK(!thread_group_label_.empty()); } @@ -235,6 +236,13 @@ void ThreadGroupImpl::Start( service_thread_task_runner, worker_thread_observer, worker_environment, synchronous_thread_start_for_testing, may_block_threshold); + // Create thread group profiler if profiling is enabled after the thread group + // start but before worker threads are created. + if (ThreadGroupProfiler::IsProfilingEnabled()) { + thread_group_profiler_.emplace(service_thread_task_runner, + thread_group_type_); + } + ScopedCommandsExecutor executor(this); CheckedAutoLock auto_lock(lock_); DCHECK(workers_.empty()); @@ -331,10 +339,15 @@ void ThreadGroupImpl::WorkerDelegate::OnMainEntry(WorkerThread* worker) { worker_only().worker_thread_ = static_cast(worker); SetBlockingObserverForCurrentThread(this); + if (outer_->thread_group_profiler_) { + outer_->thread_group_profiler_->OnWorkerThreadStarted(worker); + } + if (outer_->worker_started_for_testing_) { - // When |worker_started_for_testing_| is set, the thread that starts workers - // should wait for a worker to have started before starting the next one, - // and there should only be one thread that wakes up workers at a time. + // When |worker_started_for_testing_| is set, the thread that starts + // workers should wait for a worker to have started before starting the + // next one, and there should only be one thread that wakes up workers at + // a time. DCHECK(!outer_->worker_started_for_testing_->IsSignaled()); outer_->worker_started_for_testing_->Signal(); } @@ -364,6 +377,10 @@ void ThreadGroupImpl::WorkerDelegate::OnMainExit(WorkerThread* worker_base) { worker_only().win_thread_environment.reset(); #endif // BUILDFLAG(IS_WIN) + if (outer_->thread_group_profiler_) { + outer_->thread_group_profiler_->OnWorkerThreadExiting(worker_base); + } + // Count cleaned up workers for tests. It's important to do this here // instead of at the end of CleanupLockRequired() because some side-effects // of cleaning up happen outside the lock (e.g. recording histograms) and @@ -414,8 +431,22 @@ RegisteredTaskSource ThreadGroupImpl::WorkerDelegate::GetWork( DCHECK(!read_worker().current_shutdown_behavior); ScopedCommandsExecutor executor(outer_.get()); - CheckedAutoLock auto_lock(outer_->lock_); - return GetWorkLockRequired(&executor, worker); + RegisteredTaskSource task_source; + { + CheckedAutoLock auto_lock(outer_->lock_); + task_source = GetWorkLockRequired(&executor, worker); + } + // Notify the profiler on the worker thread status when profiling is enabled. + // This must be called without holding lock_ as lock_ is not a universal + // predecessor that does not satisfy OnWorkerThreadIdle's CheckedLock. + if (outer_->thread_group_profiler_) { + // GetWork is only called when waking up, i.e. from an idle state. No need + // to mark it idle again if no task source available. + if (task_source) { + outer_->thread_group_profiler_->OnWorkerThreadActive(worker); + } + } + return task_source; } RegisteredTaskSource ThreadGroupImpl::WorkerDelegate::GetWorkLockRequired( @@ -501,39 +532,47 @@ RegisteredTaskSource ThreadGroupImpl::WorkerDelegate::SwapProcessedTask( ScopedCommandsExecutor workers_executor(outer_.get()); ScopedReenqueueExecutor reenqueue_executor; - CheckedAutoLock auto_lock(outer_->lock_); + RegisteredTaskSource next_task_source; + { + CheckedAutoLock auto_lock(outer_->lock_); - // During shutdown, max_tasks may have been incremented in - // OnShutdownStartedLockRequired(). - if (incremented_max_tasks_for_shutdown_) { - DCHECK(outer_->shutdown_started_); - outer_->DecrementMaxTasksLockRequired(); - if (*read_worker().current_task_priority == TaskPriority::BEST_EFFORT) { - outer_->DecrementMaxBestEffortTasksLockRequired(); + // During shutdown, max_tasks may have been incremented in + // OnShutdownStartedLockRequired(). + if (incremented_max_tasks_for_shutdown_) { + DCHECK(outer_->shutdown_started_); + outer_->DecrementMaxTasksLockRequired(); + if (*read_worker().current_task_priority == TaskPriority::BEST_EFFORT) { + outer_->DecrementMaxBestEffortTasksLockRequired(); + } + incremented_max_tasks_since_blocked_ = false; + incremented_max_best_effort_tasks_since_blocked_ = false; + incremented_max_tasks_for_shutdown_ = false; } - incremented_max_tasks_since_blocked_ = false; - incremented_max_best_effort_tasks_since_blocked_ = false; - incremented_max_tasks_for_shutdown_ = false; + + DCHECK(read_worker().blocking_start_time.is_null()); + DCHECK(!incremented_max_tasks_since_blocked_); + DCHECK(!incremented_max_best_effort_tasks_since_blocked_); + + // Running task bookkeeping. + outer_->DecrementTasksRunningLockRequired( + *read_worker().current_task_priority); + write_worker().current_shutdown_behavior = std::nullopt; + write_worker().current_task_priority = std::nullopt; + + if (transaction_with_task_source) { + outer_->ReEnqueueTaskSourceLockRequired( + &workers_executor, &reenqueue_executor, + std::move(transaction_with_task_source.value())); + } + + next_task_source = GetWorkLockRequired(&workers_executor, + static_cast(worker)); } - - DCHECK(read_worker().blocking_start_time.is_null()); - DCHECK(!incremented_max_tasks_since_blocked_); - DCHECK(!incremented_max_best_effort_tasks_since_blocked_); - - // Running task bookkeeping. - outer_->DecrementTasksRunningLockRequired( - *read_worker().current_task_priority); - write_worker().current_shutdown_behavior = std::nullopt; - write_worker().current_task_priority = std::nullopt; - - if (transaction_with_task_source) { - outer_->ReEnqueueTaskSourceLockRequired( - &workers_executor, &reenqueue_executor, - std::move(transaction_with_task_source.value())); + // Must be called without holding a lock. + if (outer_->thread_group_profiler_ && !task_source) { + outer_->thread_group_profiler_->OnWorkerThreadIdle(worker); } - - return GetWorkLockRequired(&workers_executor, - static_cast(worker)); + return next_task_source; } bool ThreadGroupImpl::WorkerDelegate::CanCleanupLockRequired( @@ -569,7 +608,7 @@ void ThreadGroupImpl::WorkerDelegate::CleanupLockRequired( } // Remove the worker from |workers_|. - auto worker_iter = ranges::find(outer_->workers_, worker); + auto worker_iter = std::ranges::find(outer_->workers_, worker); CHECK(worker_iter != outer_->workers_.end(), base::NotFatalUntil::M125); outer_->workers_.erase(worker_iter); } @@ -756,6 +795,10 @@ void ThreadGroupImpl::WorkerDelegate::IncrementMaxTasksLockRequired() } void ThreadGroupImpl::JoinForTesting() { + // profiler needs to shutdown first to not block worker thread joins. + if (thread_group_profiler_) { + thread_group_profiler_->Shutdown(); + } decltype(workers_) workers_copy; { CheckedAutoLock auto_lock(lock_); @@ -860,6 +903,10 @@ void ThreadGroupImpl::OnShutdownStarted() { return; } + if (thread_group_profiler_) { + thread_group_profiler_->Shutdown(); + } + // Start a MAY_BLOCK scope on each worker that is already running a task. for (scoped_refptr& worker : workers_) { // The delegates of workers inside a ThreadGroupImpl should be @@ -962,5 +1009,4 @@ void ThreadGroupImpl::AdjustMaxTasks() { EnsureEnoughWorkersLockRequired(&executor); } -} // namespace internal -} // namespace base +} // namespace base::internal diff --git a/naiveproxy/src/base/task/thread_pool/thread_group_impl.h b/naiveproxy/src/base/task/thread_pool/thread_group_impl.h index 153fb30b4f..9416295070 100644 --- a/naiveproxy/src/base/task/thread_pool/thread_group_impl.h +++ b/naiveproxy/src/base/task/thread_pool/thread_group_impl.h @@ -11,6 +11,7 @@ #include "base/base_export.h" #include "base/gtest_prod_util.h" +#include "base/profiler/thread_group_profiler.h" #include "base/synchronization/condition_variable.h" #include "base/synchronization/waitable_event.h" #include "base/task/thread_pool/task_source.h" @@ -23,6 +24,7 @@ namespace base { class WorkerThreadObserver; +class ThreadGroupProfiler; namespace internal { @@ -43,10 +45,12 @@ class BASE_EXPORT ThreadGroupImpl : public ThreadGroup { // It must not be empty. |thread group_label| is used to label the thread // group's threads, it must not be empty. |thread_type_hint| is the preferred // thread type; the actual thread type depends on shutdown state and platform - // capabilities. |task_tracker| keeps track of tasks. + // capabilities. |thread_group_type| is used for thread group profiler to tag + // the profiles collected on this group. |task_tracker| keeps track of tasks. ThreadGroupImpl(std::string_view histogram_label, std::string_view thread_group_label, ThreadType thread_type_hint, + int64_t thread_group_type, TrackedRef task_tracker, TrackedRef delegate); @@ -64,9 +68,19 @@ class BASE_EXPORT ThreadGroupImpl : public ThreadGroup { scoped_refptr service_thread_task_runner, WorkerThreadObserver* worker_thread_observer, WorkerEnvironment worker_environment, - bool synchronous_thread_start_for_testing = false, - std::optional may_block_threshold = - std::optional()) override; + bool synchronous_thread_start_for_testing, + std::optional may_block_threshold) override; + void Start(size_t max_tasks, + size_t max_best_effort_tasks, + TimeDelta suggested_reclaim_time, + scoped_refptr service_thread_task_runner, + WorkerThreadObserver* worker_thread_observer, + WorkerEnvironment worker_environment, + bool synchronous_thread_start_for_testing = false) { + Start(max_tasks, max_best_effort_tasks, suggested_reclaim_time, + service_thread_task_runner, worker_thread_observer, + worker_environment, synchronous_thread_start_for_testing, {}); + } void JoinForTesting() override; void DidUpdateCanRunPolicy() override; void OnShutdownStarted() override; @@ -123,6 +137,16 @@ class BASE_EXPORT ThreadGroupImpl : public ThreadGroup { // is inserted on this set when it receives nullptr from GetWork(). WorkerThreadSet idle_workers_set_ GUARDED_BY(lock_); + // This is used in ThreadGroupProfiler to tag as metadata on profiles + // collected for worker threads within this thread group. + const int64_t thread_group_type_; + + // This is set in Start() if profiling is enabled, before any worker thread is + // created. If profiling is not enabled, this will remain std::nullopt. If + // created the ThreadGroupProfiler instance will exist until ThreadGroupImpl + // destruction. + std::optional thread_group_profiler_; + // Ensures recently cleaned up workers (ref. // WorkerDelegate::CleanupLockRequired()) had time to exit as // they have a raw reference to |this| (and to TaskTracker) which can diff --git a/naiveproxy/src/base/task/thread_pool/thread_pool_impl.cc b/naiveproxy/src/base/task/thread_pool/thread_pool_impl.cc index 44872d0f8c..33deee9fff 100644 --- a/naiveproxy/src/base/task/thread_pool/thread_pool_impl.cc +++ b/naiveproxy/src/base/task/thread_pool/thread_pool_impl.cc @@ -35,8 +35,7 @@ #include "base/time/time.h" #include "build/build_config.h" -namespace base { -namespace internal { +namespace base::internal { namespace { @@ -49,6 +48,10 @@ constexpr EnvironmentParams kUtilityPoolEnvironmentParams{ constexpr EnvironmentParams kBackgroundPoolEnvironmentParams{ "Background", base::ThreadType::kBackground}; +// Used for ThreadGroupProfiler to tag profiles collected for different thread +// groups. +enum ThreadGroupType { FOREGROUND = 0, UTILITY, BACKGROUND }; + constexpr size_t kMaxBestEffortTasks = 2; // Indicates whether BEST_EFFORT tasks are disabled by a command line switch. @@ -88,7 +91,8 @@ ThreadPoolImpl::ThreadPoolImpl(std::string_view histogram_label, "."), kForegroundPoolEnvironmentParams.name_suffix, kForegroundPoolEnvironmentParams.thread_type_hint, - task_tracker_->GetTrackedRef(), tracked_ref_factory_.GetTrackedRef()); + ThreadGroupType::FOREGROUND, task_tracker_->GetTrackedRef(), + tracked_ref_factory_.GetTrackedRef()); if (CanUseBackgroundThreadTypeForWorkerThread()) { background_thread_group_ = std::make_unique( @@ -101,7 +105,8 @@ ThreadPoolImpl::ThreadPoolImpl(std::string_view histogram_label, use_background_threads ? kBackgroundPoolEnvironmentParams.thread_type_hint : kForegroundPoolEnvironmentParams.thread_type_hint, - task_tracker_->GetTrackedRef(), tracked_ref_factory_.GetTrackedRef()); + ThreadGroupType::BACKGROUND, task_tracker_->GetTrackedRef(), + tracked_ref_factory_.GetTrackedRef()); } } @@ -151,7 +156,8 @@ void ThreadPoolImpl::Start(const ThreadPoolInstance::InitParams& init_params, "."), kUtilityPoolEnvironmentParams.name_suffix, kUtilityPoolEnvironmentParams.thread_type_hint, - task_tracker_->GetTrackedRef(), tracked_ref_factory_.GetTrackedRef()); + ThreadGroupType::UTILITY, task_tracker_->GetTrackedRef(), + tracked_ref_factory_.GetTrackedRef()); foreground_thread_group_ ->HandoffNonUserBlockingTaskSourcesToOtherThreadGroup( utility_thread_group_.get()); @@ -339,6 +345,8 @@ void ThreadPoolImpl::Shutdown() { // Ensures that there are enough background worker to run BLOCK_SHUTDOWN // tasks. + // Shutdown must happen after service thread STOP as ThreadGroupProfiler + // destructor expects exclusive access to the instance during destruction. foreground_thread_group_->OnShutdownStarted(); if (utility_thread_group_) { utility_thread_group_->OnShutdownStarted(); @@ -510,9 +518,7 @@ bool ThreadPoolImpl::EnqueueJobTaskSource( void ThreadPoolImpl::RemoveJobTaskSource( scoped_refptr task_source) { auto transaction = task_source->BeginTransaction(); - ThreadGroup* const current_thread_group = - GetThreadGroupForTraits(transaction.traits()); - current_thread_group->RemoveTaskSource(*task_source); + GetThreadGroupForTraits(transaction.traits())->RemoveTaskSource(*task_source); } void ThreadPoolImpl::UpdatePriority(scoped_refptr task_source, @@ -530,21 +536,21 @@ void ThreadPoolImpl::UpdatePriority(scoped_refptr task_source, "BEST_EFFORT. See ThreadPolicy documentation."; } - ThreadGroup* const current_thread_group = + ThreadGroup* const old_thread_group = GetThreadGroupForTraits(transaction.traits()); transaction.UpdatePriority(priority); ThreadGroup* const new_thread_group = GetThreadGroupForTraits(transaction.traits()); - if (new_thread_group == current_thread_group) { + if (new_thread_group == old_thread_group) { // |task_source|'s position needs to be updated within its current thread // group. - current_thread_group->UpdateSortKey(std::move(transaction)); + old_thread_group->UpdateSortKey(std::move(transaction)); } else { // |task_source| is changing thread groups; remove it from its current // thread group and reenqueue it. auto registered_task_source = - current_thread_group->RemoveTaskSource(*task_source); + old_thread_group->RemoveTaskSource(*task_source); if (registered_task_source) { DCHECK(task_source); new_thread_group->PushTaskSourceAndWakeUpWorkers( @@ -605,5 +611,4 @@ void ThreadPoolImpl::UpdateCanRunPolicy() { single_thread_task_runner_manager_.DidUpdateCanRunPolicy(); } -} // namespace internal -} // namespace base +} // namespace base::internal diff --git a/naiveproxy/src/base/task/thread_pool/worker_thread.cc b/naiveproxy/src/base/task/thread_pool/worker_thread.cc index c949a05069..cdd5e2ce5b 100644 --- a/naiveproxy/src/base/task/thread_pool/worker_thread.cc +++ b/naiveproxy/src/base/task/thread_pool/worker_thread.cc @@ -490,7 +490,7 @@ void WorkerThread::RunWorker() { // Check that task_source is always cleared, to help investigation of // memory corruption where task_source is non-null after being moved. // crbug.com/1218384 - CHECK(!task_source); + CHECK(!task_source); // NOLINT(bugprone-use-after-move) task_source = std::move(new_task_source); } } diff --git a/naiveproxy/src/base/task/thread_pool/worker_thread_set.cc b/naiveproxy/src/base/task/thread_pool/worker_thread_set.cc index 2432732394..2653d4adc6 100644 --- a/naiveproxy/src/base/task/thread_pool/worker_thread_set.cc +++ b/naiveproxy/src/base/task/thread_pool/worker_thread_set.cc @@ -4,9 +4,10 @@ #include "base/task/thread_pool/worker_thread_set.h" +#include + #include "base/check_op.h" #include "base/containers/contains.h" -#include "base/ranges/algorithm.h" #include "base/task/thread_pool/worker_thread.h" namespace base::internal { diff --git a/naiveproxy/src/base/test/gmock_expected_support.h b/naiveproxy/src/base/test/gmock_expected_support.h index 2b4f2acf79..fad36a0793 100644 --- a/naiveproxy/src/base/test/gmock_expected_support.h +++ b/naiveproxy/src/base/test/gmock_expected_support.h @@ -209,11 +209,11 @@ inline internal::ErrorIsMatcher> ErrorIs(T&& matcher) { } // namespace base::test -// Executes an expression that returns an `expected` or some subclass -// thereof, and assigns the contained `T` to `lhs` if the result is a value. If -// the result is an error, generates a test failure and returns from the current -// function, which must have a `void` return type. For more usage examples and -// caveats, see the documentation for `ASSIGN_OR_RETURN`. +// Executes an expression that returns an `expected` or +// `std::optional`, and assigns the contained `T` to `lhs` if the result is a +// value. If the result is an error, generates a test failure and returns from +// the current function, which must have a `void` return type. For more usage +// examples and caveats, see the documentation for `ASSIGN_OR_RETURN`. // // Example: Declaring and initializing a new value: // ASSERT_OK_AND_ASSIGN(ValueType value, MaybeGetValue(arg)); @@ -221,12 +221,17 @@ inline internal::ErrorIsMatcher> ErrorIs(T&& matcher) { // Example: Assigning to an existing value: // ValueType value; // ASSERT_OK_AND_ASSIGN(value, MaybeGetValue(arg)); -#define ASSERT_OK_AND_ASSIGN(lhs, rexpr) \ - ASSIGN_OR_RETURN(lhs, rexpr, [](const auto& e) { \ - return GTEST_MESSAGE_( \ - base::StrCat({#rexpr, " returned error: ", base::ToString(e)}) \ - .c_str(), \ - ::testing::TestPartResult::kFatalFailure); \ +#define ASSERT_OK_AND_ASSIGN(lhs, rexpr) \ + ASSIGN_OR_RETURN(lhs, rexpr, [](const Ts&... e) { \ + std::string message; \ + if constexpr (sizeof...(Ts) > 0) { \ + message = base::StrCat( \ + {#rexpr, " returned error: ", (..., base::ToString(e))}); \ + } else { \ + message = base::StrCat({#rexpr, " returned nullopt"}); \ + } \ + return GTEST_MESSAGE_(message.c_str(), \ + ::testing::TestPartResult::kFatalFailure); \ }) namespace base { diff --git a/naiveproxy/src/base/test/gtest_xml_util.cc b/naiveproxy/src/base/test/gtest_xml_util.cc index 2c9f52516c..ae0623ffa5 100644 --- a/naiveproxy/src/base/test/gtest_xml_util.cc +++ b/naiveproxy/src/base/test/gtest_xml_util.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "base/test/gtest_xml_util.h" #include diff --git a/naiveproxy/src/base/test/icu_test_util.cc b/naiveproxy/src/base/test/icu_test_util.cc index 08f8d4fa97..b6bfca63ea 100644 --- a/naiveproxy/src/base/test/icu_test_util.cc +++ b/naiveproxy/src/base/test/icu_test_util.cc @@ -9,8 +9,7 @@ #include "third_party/icu/source/common/unicode/uloc.h" #include "third_party/icu/source/i18n/unicode/timezone.h" -namespace base { -namespace test { +namespace base::test { ScopedRestoreICUDefaultLocale::ScopedRestoreICUDefaultLocale() : ScopedRestoreICUDefaultLocale(std::string()) {} @@ -41,5 +40,4 @@ void InitializeICUForTesting() { i18n::InitializeICU(); } -} // namespace test -} // namespace base +} // namespace base::test diff --git a/naiveproxy/src/base/test/launcher/test_launcher.cc b/naiveproxy/src/base/test/launcher/test_launcher.cc index d50334dce5..17d8822430 100644 --- a/naiveproxy/src/base/test/launcher/test_launcher.cc +++ b/naiveproxy/src/base/test/launcher/test_launcher.cc @@ -44,7 +44,6 @@ #include "base/numerics/safe_conversions.h" #include "base/process/kill.h" #include "base/process/launch.h" -#include "base/ranges/algorithm.h" #include "base/run_loop.h" #include "base/strings/pattern.h" #include "base/strings/strcat.h" @@ -736,10 +735,8 @@ ChildProcessResults DoLaunchChildTestProcess( if (redirect_stdio) { int output_file_fd = fileno(output_file.get()); CHECK_LE(0, output_file_fd); - options.fds_to_remap.push_back( - std::make_pair(output_file_fd, STDOUT_FILENO)); - options.fds_to_remap.push_back( - std::make_pair(output_file_fd, STDERR_FILENO)); + options.fds_to_remap.emplace_back(output_file_fd, STDOUT_FILENO); + options.fds_to_remap.emplace_back(output_file_fd, STDERR_FILENO); } #if !BUILDFLAG(IS_FUCHSIA) @@ -1011,7 +1008,7 @@ class TestLauncher::TestInfo { public: TestInfo() = default; TestInfo(const TestInfo& other) = default; - TestInfo(const TestIdentifier& test_id); + explicit TestInfo(const TestIdentifier& test_id); ~TestInfo() = default; // Returns test name excluding DISABLE_ prefix. @@ -1937,7 +1934,7 @@ bool TestLauncher::ShuffleTests(CommandLine* command_line) { std::mt19937 randomizer; randomizer.seed(shuffle_seed); - ranges::shuffle(tests_, randomizer); + std::ranges::shuffle(tests_, randomizer); fprintf(stdout, "Randomizing with seed %u\n", shuffle_seed); fflush(stdout); diff --git a/naiveproxy/src/base/test/launcher/test_launcher_test_utils.cc b/naiveproxy/src/base/test/launcher/test_launcher_test_utils.cc index c74828af6c..89a1634340 100644 --- a/naiveproxy/src/base/test/launcher/test_launcher_test_utils.cc +++ b/naiveproxy/src/base/test/launcher/test_launcher_test_utils.cc @@ -12,9 +12,7 @@ #include "base/test/gtest_util.h" #include "base/test/launcher/test_result.h" -namespace base { - -namespace test_launcher_utils { +namespace base::test_launcher_utils { namespace { @@ -166,6 +164,4 @@ std::optional ReadSummary(const FilePath& path) { return result; } -} // namespace test_launcher_utils - -} // namespace base +} // namespace base::test_launcher_utils diff --git a/naiveproxy/src/base/test/launcher/test_results_tracker.cc b/naiveproxy/src/base/test/launcher/test_results_tracker.cc index 0378ebb9a4..9b9e170d73 100644 --- a/naiveproxy/src/base/test/launcher/test_results_tracker.cc +++ b/naiveproxy/src/base/test/launcher/test_results_tracker.cc @@ -54,8 +54,7 @@ std::string FormatTimeAsIso8601(Time time) { } struct TestSuiteResultsAggregator { - TestSuiteResultsAggregator() - : tests(0), failures(0), disabled(0), errors(0) {} + TestSuiteResultsAggregator() = default; void Add(const TestResult& result) { tests++; @@ -81,10 +80,10 @@ struct TestSuiteResultsAggregator { } } - int tests; - int failures; - int disabled; - int errors; + int tests = 0; + int failures = 0; + int disabled = 0; + int errors = 0; TimeDelta elapsed_time; }; @@ -224,7 +223,7 @@ void TestResultsTracker::OnTestIterationStarting() { // Start with a fresh state for new iteration. iteration_++; - per_iteration_data_.push_back(PerIterationData()); + per_iteration_data_.emplace_back(); } void TestResultsTracker::AddTest(const std::string& test_name) { @@ -445,9 +444,7 @@ bool TestResultsTracker::SaveSummaryAsJSON( for (const auto& j : per_iteration_data_[i].results) { Value::List test_results; - for (size_t k = 0; k < j.second.test_results.size(); k++) { - const TestResult& test_result = j.second.test_results[k]; - + for (const auto& test_result : j.second.test_results) { Value::Dict test_result_value; test_result_value.Set("status", test_result.StatusAsString()); diff --git a/naiveproxy/src/base/test/metrics/histogram_enum_reader.cc b/naiveproxy/src/base/test/metrics/histogram_enum_reader.cc index 7a967b5b8f..d107a5731e 100644 --- a/naiveproxy/src/base/test/metrics/histogram_enum_reader.cc +++ b/naiveproxy/src/base/test/metrics/histogram_enum_reader.cc @@ -53,7 +53,7 @@ std::optional ParseEnumFromHistogramsXml( success = false; } - HistogramBase::Sample value; + HistogramBase::Sample32 value; if (has_value && !StringToInt(value_str, &value)) { ADD_FAILURE() << "Bad " << enum_name << " enum entry (at index " << entries_index << ", label='" << label diff --git a/naiveproxy/src/base/test/metrics/histogram_enum_reader.h b/naiveproxy/src/base/test/metrics/histogram_enum_reader.h index c143ef56c6..18131f7d4a 100644 --- a/naiveproxy/src/base/test/metrics/histogram_enum_reader.h +++ b/naiveproxy/src/base/test/metrics/histogram_enum_reader.h @@ -13,7 +13,7 @@ namespace base { -using HistogramEnumEntryMap = std::map; +using HistogramEnumEntryMap = std::map; // Find and read the enum with the given |enum_name| (with integer values) from // tools/metrics/histograms/enums.xml, or from enums.xml in the given diff --git a/naiveproxy/src/base/test/metrics/histogram_tester.cc b/naiveproxy/src/base/test/metrics/histogram_tester.cc index 6094a4bb45..17438cf3e9 100644 --- a/naiveproxy/src/base/test/metrics/histogram_tester.cc +++ b/naiveproxy/src/base/test/metrics/histogram_tester.cc @@ -33,8 +33,8 @@ HistogramTester::~HistogramTester() = default; void HistogramTester::ExpectUniqueSample( std::string_view name, - HistogramBase::Sample sample, - HistogramBase::Count expected_bucket_count, + HistogramBase::Sample32 sample, + HistogramBase::Count32 expected_bucket_count, const Location& location) const { HistogramBase* histogram = StatisticsRecorder::FindHistogram(name); if (histogram) { @@ -64,15 +64,15 @@ void HistogramTester::ExpectUniqueSample( void HistogramTester::ExpectUniqueTimeSample( std::string_view name, TimeDelta sample, - HistogramBase::Count expected_bucket_count, + HistogramBase::Count32 expected_bucket_count, const Location& location) const { ExpectUniqueSample(name, sample.InMilliseconds(), expected_bucket_count, location); } void HistogramTester::ExpectBucketCount(std::string_view name, - HistogramBase::Sample sample, - HistogramBase::Count expected_count, + HistogramBase::Sample32 sample, + HistogramBase::Count32 expected_count, const Location& location) const { HistogramBase* histogram = StatisticsRecorder::FindHistogram(name); if (histogram) { @@ -96,7 +96,7 @@ void HistogramTester::ExpectBucketCount(std::string_view name, } void HistogramTester::ExpectTotalCount(std::string_view name, - HistogramBase::Count expected_count, + HistogramBase::Count32 expected_count, const Location& location) const { HistogramBase* histogram = StatisticsRecorder::FindHistogram(name); if (histogram) { @@ -118,7 +118,7 @@ void HistogramTester::ExpectTotalCount(std::string_view name, void HistogramTester::ExpectTimeBucketCount(std::string_view name, TimeDelta sample, - HistogramBase::Count count, + HistogramBase::Count32 count, const Location& location) const { ExpectBucketCount(name, sample.InMilliseconds(), count, location); } @@ -146,9 +146,9 @@ std::vector HistogramTester::GetAllSamples( GetHistogramSamplesSinceCreation(name); if (snapshot) { for (auto it = snapshot->Iterator(); !it->Done(); it->Next()) { - HistogramBase::Sample sample; + HistogramBase::Sample32 sample; int64_t max; - HistogramBase::Count count; + HistogramBase::Count32 count; it->Get(&sample, &max, &count); samples.emplace_back(sample, count); } @@ -156,11 +156,11 @@ std::vector HistogramTester::GetAllSamples( return samples; } -HistogramBase::Count HistogramTester::GetBucketCount( +HistogramBase::Count32 HistogramTester::GetBucketCount( std::string_view name, - HistogramBase::Sample sample) const { + HistogramBase::Sample32 sample) const { HistogramBase* histogram = StatisticsRecorder::FindHistogram(name); - HistogramBase::Count count = 0; + HistogramBase::Count32 count = 0; if (histogram) { GetBucketCountForSamples(*histogram, sample, &count, /*total_count=*/nullptr); @@ -170,9 +170,9 @@ HistogramBase::Count HistogramTester::GetBucketCount( void HistogramTester::GetBucketCountForSamples( const HistogramBase& histogram, - HistogramBase::Sample sample, - HistogramBase::Count* count, - HistogramBase::Count* total_count) const { + HistogramBase::Sample32 sample, + HistogramBase::Count32* count, + HistogramBase::Count32* total_count) const { std::unique_ptr samples = histogram.SnapshotSamples(); *count = samples->GetCount(sample); if (total_count) { diff --git a/naiveproxy/src/base/test/metrics/histogram_tester.h b/naiveproxy/src/base/test/metrics/histogram_tester.h index 461c95530f..3552dee493 100644 --- a/naiveproxy/src/base/test/metrics/histogram_tester.h +++ b/naiveproxy/src/base/test/metrics/histogram_tester.h @@ -38,7 +38,7 @@ class HistogramSamples; // To test histograms in Java tests, use HistogramWatcher. class HistogramTester { public: - using CountsMap = std::map>; + using CountsMap = std::map>; // Takes a snapshot of all current histograms counts. HistogramTester(); @@ -54,46 +54,46 @@ class HistogramTester { // If a bucket had samples before the HistogramTester was created, these // samples are completely ignored. void ExpectUniqueSample(std::string_view name, - HistogramBase::Sample sample, - HistogramBase::Count expected_bucket_count, + HistogramBase::Sample32 sample, + HistogramBase::Count32 expected_bucket_count, const Location& location = FROM_HERE) const; template void ExpectUniqueSample(std::string_view name, T sample, - HistogramBase::Count expected_bucket_count, + HistogramBase::Count32 expected_bucket_count, const Location& location = FROM_HERE) const { - ExpectUniqueSample(name, static_cast(sample), + ExpectUniqueSample(name, static_cast(sample), expected_bucket_count, location); } void ExpectUniqueTimeSample(std::string_view name, TimeDelta sample, - HistogramBase::Count expected_bucket_count, + HistogramBase::Count32 expected_bucket_count, const Location& location = FROM_HERE) const; // EXPECTs that the number of samples in bucket |sample| of histogram |name| // grew by |expected_count| since the HistogramTester was created. Samples in // other buckets are ignored. void ExpectBucketCount(std::string_view name, - HistogramBase::Sample sample, - HistogramBase::Count expected_count, + HistogramBase::Sample32 sample, + HistogramBase::Count32 expected_count, const Location& location = FROM_HERE) const; template void ExpectBucketCount(std::string_view name, T sample, - HistogramBase::Count expected_count, + HistogramBase::Count32 expected_count, const Location& location = FROM_HERE) const { - ExpectBucketCount(name, static_cast(sample), + ExpectBucketCount(name, static_cast(sample), expected_count, location); } void ExpectTimeBucketCount(std::string_view name, TimeDelta sample, - HistogramBase::Count expected_count, + HistogramBase::Count32 expected_count, const Location& location = FROM_HERE) const; // EXPECTs that the total number of samples in histogram |name| // grew by |expected_count| since the HistogramTester was created. void ExpectTotalCount(std::string_view name, - HistogramBase::Count expected_count, + HistogramBase::Count32 expected_count, const Location& location = FROM_HERE) const; // Returns the sum of all samples recorded since the HistogramTester was @@ -134,11 +134,11 @@ class HistogramTester { std::vector GetAllSamples(std::string_view name) const; // Returns the value of the |sample| bucket for ths histogram |name|. - HistogramBase::Count GetBucketCount(std::string_view name, - HistogramBase::Sample sample) const; + HistogramBase::Count32 GetBucketCount(std::string_view name, + HistogramBase::Sample32 sample) const; template - HistogramBase::Count GetBucketCount(std::string_view name, T sample) const { - return GetBucketCount(name, static_cast(sample)); + HistogramBase::Count32 GetBucketCount(std::string_view name, T sample) const { + return GetBucketCount(name, static_cast(sample)); } // Finds histograms whose names start with |prefix|, and returns them along @@ -181,9 +181,9 @@ class HistogramTester { // sets |*total_count| to the number of samples recorded for |histogram| // since the HistogramTester was created. void GetBucketCountForSamples(const HistogramBase& histogram, - HistogramBase::Sample sample, - HistogramBase::Count* sample_count, - HistogramBase::Count* total_count) const; + HistogramBase::Sample32 sample, + HistogramBase::Count32* sample_count, + HistogramBase::Count32* total_count) const; // Returns the deltas for |histogram| since the HistogramTester was created // as an ASCII art histogram for debugging purposes. @@ -197,7 +197,7 @@ class HistogramTester { }; struct Bucket { - Bucket(HistogramBase::Sample min, HistogramBase::Count count) + Bucket(HistogramBase::Sample32 min, HistogramBase::Count32 count) : min(min), count(count) {} // A variant of the above constructor that accepts an `EnumType` for the `min` @@ -205,16 +205,16 @@ struct Bucket { // associated with the metric this bucket is referring to. // // The constructor forwards to the above non-templated constructor. Therefore, - // `EnumType` must be implicitly convertible to `HistogramBase::Sample`. + // `EnumType` must be implicitly convertible to `HistogramBase::Sample32`. template requires(std::is_enum_v) - Bucket(MetricEnum min, HistogramBase::Count count) + Bucket(MetricEnum min, HistogramBase::Count32 count) : Bucket(static_cast>(min), count) {} friend bool operator==(const Bucket&, const Bucket&) = default; - HistogramBase::Sample min; - HistogramBase::Count count; + HistogramBase::Sample32 min; + HistogramBase::Count32 count; }; void PrintTo(const Bucket& value, std::ostream* os); @@ -223,7 +223,7 @@ void PrintTo(const Bucket& value, std::ostream* os); // match GetAllSamples(). // // Unlike the standard matchers UnorderedElementsAreArray() and IsSupersetOf(), -// they explicitly support empty buckets (`Bucket::count == 0`). Empty buckets +// they explicitly support empty buckets (`Bucket::Count32 == 0`). Empty buckets // need special handling because GetAllSamples() doesn't contain empty ones. // BucketsAre() and BucketsAreArray() match a container that contains exactly @@ -263,9 +263,9 @@ auto BucketsAre(BucketTypes... buckets) { // any `n` (including `n == 0`). template auto BucketsIncludeArray(const BucketArray& buckets) { - // The `empty_buckets` have `count == 0`, so the `HistogramBase::Sample` + // The `empty_buckets` have `count == 0`, so the `HistogramBase::Sample32` // suffices. - std::vector empty_buckets; + std::vector empty_buckets; std::vector non_empty_buckets; for (const Bucket& b : buckets) { if (b.count == 0) { diff --git a/naiveproxy/src/base/test/mock_log.cc b/naiveproxy/src/base/test/mock_log.cc index 907156830f..ecacbf3663 100644 --- a/naiveproxy/src/base/test/mock_log.cc +++ b/naiveproxy/src/base/test/mock_log.cc @@ -4,8 +4,7 @@ #include "base/test/mock_log.h" -namespace base { -namespace test { +namespace base::test { // static MockLog* MockLog::g_instance_ = nullptr; @@ -63,5 +62,4 @@ bool MockLog::LogMessageHandler(int severity, return g_instance_->Log(severity, file, line, message_start, str); } -} // namespace test -} // namespace base +} // namespace base::test diff --git a/naiveproxy/src/base/test/perf_test_suite.cc b/naiveproxy/src/base/test/perf_test_suite.cc index 66688b7d02..8158e9b5cf 100644 --- a/naiveproxy/src/base/test/perf_test_suite.cc +++ b/naiveproxy/src/base/test/perf_test_suite.cc @@ -10,7 +10,6 @@ #include "base/path_service.h" #include "base/process/launch.h" #include "base/strings/string_util.h" -#include "base/test/allow_check_is_test_for_testing.h" #include "base/test/perf_log.h" #include "build/build_config.h" #include "testing/gtest/include/gtest/gtest.h" @@ -27,8 +26,6 @@ PerfTestSuite::PerfTestSuite(int argc, char** argv) : TestSuite(argc, argv) {} void PerfTestSuite::Initialize() { TestSuite::Initialize(); - test::AllowCheckIsTestForTesting(); - // Initialize the perf timer log FilePath log_path = CommandLine::ForCurrentProcess()->GetSwitchValuePath("log-file"); diff --git a/naiveproxy/src/base/test/power_monitor_test_utils.cc b/naiveproxy/src/base/test/power_monitor_test_utils.cc index a366612601..f5eb4712cf 100644 --- a/naiveproxy/src/base/test/power_monitor_test_utils.cc +++ b/naiveproxy/src/base/test/power_monitor_test_utils.cc @@ -4,6 +4,8 @@ #include "base/test/power_monitor_test_utils.h" +#include "base/time/time.h" + namespace base::test { TestSamplingEventSource::TestSamplingEventSource() = default; @@ -14,6 +16,12 @@ bool TestSamplingEventSource::Start(SamplingEventCallback callback) { return true; } +TimeDelta TestSamplingEventSource::GetSampleInterval() { + // This value is meaningless because samples are taken manually, but we need + // a valid value for tests. + return base::Minutes(1); +} + void TestSamplingEventSource::SimulateEvent() { sampling_event_callback_.Run(); } diff --git a/naiveproxy/src/base/test/power_monitor_test_utils.h b/naiveproxy/src/base/test/power_monitor_test_utils.h index d3e7aec018..c6bd914007 100644 --- a/naiveproxy/src/base/test/power_monitor_test_utils.h +++ b/naiveproxy/src/base/test/power_monitor_test_utils.h @@ -19,6 +19,7 @@ class TestSamplingEventSource : public SamplingEventSource { ~TestSamplingEventSource() override; bool Start(SamplingEventCallback callback) override; + TimeDelta GetSampleInterval() override; void SimulateEvent(); diff --git a/naiveproxy/src/base/test/scoped_command_line.cc b/naiveproxy/src/base/test/scoped_command_line.cc index 094e3cf360..3408b71366 100644 --- a/naiveproxy/src/base/test/scoped_command_line.cc +++ b/naiveproxy/src/base/test/scoped_command_line.cc @@ -4,8 +4,7 @@ #include "base/test/scoped_command_line.h" -namespace base { -namespace test { +namespace base::test { ScopedCommandLine::ScopedCommandLine() : original_command_line_(*base::CommandLine::ForCurrentProcess()) {} @@ -18,5 +17,4 @@ CommandLine* ScopedCommandLine::GetProcessCommandLine() { return base::CommandLine::ForCurrentProcess(); } -} // namespace test -} // namespace base +} // namespace base::test diff --git a/naiveproxy/src/base/test/sequenced_task_runner_test_template.cc b/naiveproxy/src/base/test/sequenced_task_runner_test_template.cc index 1decc2a23e..14e7296877 100644 --- a/naiveproxy/src/base/test/sequenced_task_runner_test_template.cc +++ b/naiveproxy/src/base/test/sequenced_task_runner_test_template.cc @@ -70,17 +70,17 @@ void SequencedTaskTracker::RunTask(OnceClosure task, int task_i) { void SequencedTaskTracker::TaskPosted(int i) { // Caller must own |lock_|. - events_.push_back(TaskEvent(i, TaskEvent::POST)); + events_.emplace_back(i, TaskEvent::POST); } void SequencedTaskTracker::TaskStarted(int i) { AutoLock lock(lock_); - events_.push_back(TaskEvent(i, TaskEvent::START)); + events_.emplace_back(i, TaskEvent::START); } void SequencedTaskTracker::TaskEnded(int i) { AutoLock lock(lock_); - events_.push_back(TaskEvent(i, TaskEvent::END)); + events_.emplace_back(i, TaskEvent::END); ++task_end_count_; task_end_cv_.Signal(); } diff --git a/naiveproxy/src/base/test/task_environment.cc b/naiveproxy/src/base/test/task_environment.cc index 127d1916cc..b9eb5673be 100644 --- a/naiveproxy/src/base/test/task_environment.cc +++ b/naiveproxy/src/base/test/task_environment.cc @@ -59,8 +59,7 @@ #include "base/trace_event/trace_log.h" // nogncheck #endif // BUILDFLAG(ENABLE_BASE_TRACING) -namespace base { -namespace test { +namespace base::test { namespace { @@ -1089,5 +1088,4 @@ void TaskEnvironment::TestTaskTracker::AssertFlushForTestingAllowed() { "under it should thus never FlushForTesting()."; } -} // namespace test -} // namespace base +} // namespace base::test diff --git a/naiveproxy/src/base/test/task_environment.h b/naiveproxy/src/base/test/task_environment.h index 3d46bc8d68..0fe6347ec1 100644 --- a/naiveproxy/src/base/test/task_environment.h +++ b/naiveproxy/src/base/test/task_environment.h @@ -126,7 +126,7 @@ class TaskEnvironment { // This type will determine what types of messages will get pumped by the main // thread. // Note: If your test needs to use a custom MessagePump you should - // consider using a SingleThreadTaskExecutor instead. + // consider using a SingleThreadTaskEnvironment instead. enum class MainThreadType { // The main thread doesn't pump system messages. DEFAULT, diff --git a/naiveproxy/src/base/test/test_child_process.cc b/naiveproxy/src/base/test/test_child_process.cc index 095d9d14f2..596d0a71bc 100644 --- a/naiveproxy/src/base/test/test_child_process.cc +++ b/naiveproxy/src/base/test/test_child_process.cc @@ -27,7 +27,7 @@ int main(int argc, char** argv) { } const char* env = getenv(argv[2]); - if (env != NULL) { + if (env != nullptr) { printf("%s", env); } } else { diff --git a/naiveproxy/src/base/test/test_discardable_memory_allocator.cc b/naiveproxy/src/base/test/test_discardable_memory_allocator.cc index 3d1b3ad12f..293228d62c 100644 --- a/naiveproxy/src/base/test/test_discardable_memory_allocator.cc +++ b/naiveproxy/src/base/test/test_discardable_memory_allocator.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "base/test/test_discardable_memory_allocator.h" #include diff --git a/naiveproxy/src/base/test/test_mock_time_task_runner.cc b/naiveproxy/src/base/test/test_mock_time_task_runner.cc index b39a57c0bf..faab0605e4 100644 --- a/naiveproxy/src/base/test/test_mock_time_task_runner.cc +++ b/naiveproxy/src/base/test/test_mock_time_task_runner.cc @@ -331,9 +331,8 @@ bool TestMockTimeTaskRunner::PostDelayedTask(const Location& from_here, OnceClosure task, TimeDelta delay) { AutoLock scoped_lock(tasks_lock_); - tasks_.push(TestOrderedPendingTask(from_here, std::move(task), now_ticks_, - delay, next_task_ordinal_++, - TestPendingTask::NESTABLE)); + tasks_.emplace(from_here, std::move(task), now_ticks_, delay, + next_task_ordinal_++, TestPendingTask::NESTABLE); tasks_lock_cv_.Signal(); return true; } diff --git a/naiveproxy/src/base/test/trace_event_analyzer.cc b/naiveproxy/src/base/test/trace_event_analyzer.cc index 26a72a0edb..589e7d51e4 100644 --- a/naiveproxy/src/base/test/trace_event_analyzer.cc +++ b/naiveproxy/src/base/test/trace_event_analyzer.cc @@ -15,7 +15,6 @@ #include "base/logging.h" #include "base/memory/ptr_util.h" #include "base/memory/ref_counted_memory.h" -#include "base/ranges/algorithm.h" #include "base/run_loop.h" #include "base/strings/pattern.h" #include "base/trace_event/trace_buffer.h" @@ -837,7 +836,7 @@ bool TraceAnalyzer::SetEvents(const std::string& json_events) { if (!ParseEventsFromJson(json_events, &raw_events_)) { return false; } - base::ranges::stable_sort(raw_events_); + std::ranges::stable_sort(raw_events_, {}, &TraceEvent::timestamp); ParseMetadata(); return true; } @@ -1030,7 +1029,7 @@ bool GetRateStats(const TraceEventVector& events, deltas.push_back(delta); } - base::ranges::sort(deltas); + std::ranges::sort(deltas); if (options) { if (options->trim_min + options->trim_max > events.size() - kMinEvents) { @@ -1047,8 +1046,8 @@ bool GetRateStats(const TraceEventVector& events, delta_sum += deltas[i]; } - stats->min_us = *base::ranges::min_element(deltas); - stats->max_us = *base::ranges::max_element(deltas); + stats->min_us = *std::ranges::min_element(deltas); + stats->max_us = *std::ranges::max_element(deltas); stats->mean_us = delta_sum / static_cast(num_deltas); double sum_mean_offsets_squared = 0.0; diff --git a/naiveproxy/src/base/test/trace_event_analyzer.h b/naiveproxy/src/base/test/trace_event_analyzer.h index d27470313c..dad01f128e 100644 --- a/naiveproxy/src/base/test/trace_event_analyzer.h +++ b/naiveproxy/src/base/test/trace_event_analyzer.h @@ -115,17 +115,13 @@ class QueryNode; struct TraceEvent { // ProcessThreadID contains a Process ID and Thread ID. struct ProcessThreadID { - ProcessThreadID() : process_id(0), thread_id(0) {} + ProcessThreadID() = default; ProcessThreadID(int process_id, int thread_id) : process_id(process_id), thread_id(thread_id) {} - bool operator<(const ProcessThreadID& rhs) const { - if (process_id != rhs.process_id) { - return process_id < rhs.process_id; - } - return thread_id < rhs.thread_id; - } - int process_id; - int thread_id; + auto operator<=>(const ProcessThreadID&) const = default; + bool operator==(const ProcessThreadID&) const = default; + int process_id = 0; + int thread_id = 0; }; TraceEvent(); @@ -134,10 +130,6 @@ struct TraceEvent { [[nodiscard]] bool SetFromJSON(const base::Value* event_value); - bool operator<(const TraceEvent& rhs) const { - return timestamp < rhs.timestamp; - } - TraceEvent& operator=(TraceEvent&& rhs); bool has_other_event() const { return other_event; } diff --git a/naiveproxy/src/base/test/trace_test_utils.cc b/naiveproxy/src/base/test/trace_test_utils.cc index b2895b6a81..47f5869143 100644 --- a/naiveproxy/src/base/test/trace_test_utils.cc +++ b/naiveproxy/src/base/test/trace_test_utils.cc @@ -7,8 +7,7 @@ #include "base/trace_event/trace_log.h" #include "third_party/perfetto/include/perfetto/tracing/tracing.h" -namespace base { -namespace test { +namespace base::test { TracingEnvironment::TracingEnvironment() { trace_event::TraceLog::ResetForTesting(); @@ -18,5 +17,4 @@ TracingEnvironment::~TracingEnvironment() { perfetto::Tracing::ResetForTesting(); } -} // namespace test -} // namespace base +} // namespace base::test diff --git a/naiveproxy/src/base/test/trace_to_file.cc b/naiveproxy/src/base/test/trace_to_file.cc index 392d710aac..7d3248142c 100644 --- a/naiveproxy/src/base/test/trace_to_file.cc +++ b/naiveproxy/src/base/test/trace_to_file.cc @@ -15,8 +15,7 @@ #include "base/trace_event/trace_buffer.h" #include "base/trace_event/trace_log.h" -namespace base { -namespace test { +namespace base::test { TraceToFile::TraceToFile() : started_(false) {} @@ -110,5 +109,4 @@ void TraceToFile::EndTracingIfNeeded() { AppendFileFooter(); } -} // namespace test -} // namespace base +} // namespace base::test diff --git a/naiveproxy/src/base/test/with_feature_override.cc b/naiveproxy/src/base/test/with_feature_override.cc index 6dd2e55279..964c4da6cb 100644 --- a/naiveproxy/src/base/test/with_feature_override.cc +++ b/naiveproxy/src/base/test/with_feature_override.cc @@ -6,8 +6,7 @@ #include "base/task/thread_pool/thread_pool_instance.h" -namespace base { -namespace test { +namespace base::test { WithFeatureOverride::WithFeatureOverride(const base::Feature& feature) { // Most other classes that tests inherit from start task environments. Verify @@ -29,5 +28,4 @@ bool WithFeatureOverride::IsParamFeatureEnabled() const { WithFeatureOverride::~WithFeatureOverride() = default; -} // namespace test -} // namespace base +} // namespace base::test diff --git a/naiveproxy/src/base/third_party/nspr/README.chromium b/naiveproxy/src/base/third_party/nspr/README.chromium index 292fe7d7d6..1ea510d879 100644 --- a/naiveproxy/src/base/third_party/nspr/README.chromium +++ b/naiveproxy/src/base/third_party/nspr/README.chromium @@ -2,7 +2,7 @@ Name: Netscape Portable Runtime (NSPR) URL: https://hg.mozilla.org/projects/nspr Version: 4.8 Revision: dd5b9aa4631b350ba58e2e83106724808fd9a97f -License: MPL 1.1/GPL 2.0/LGPL 2.1 +License: MPL-1.1 License File: LICENSE Security Critical: yes Shipped: yes diff --git a/naiveproxy/src/base/threading/hang_watcher.cc b/naiveproxy/src/base/threading/hang_watcher.cc index bbbae3de4c..10505f18d0 100644 --- a/naiveproxy/src/base/threading/hang_watcher.cc +++ b/naiveproxy/src/base/threading/hang_watcher.cc @@ -4,6 +4,7 @@ #include "base/threading/hang_watcher.h" +#include #include #include @@ -18,7 +19,6 @@ #include "base/metrics/field_trial_params.h" #include "base/metrics/histogram_macros.h" #include "base/power_monitor/power_monitor.h" -#include "base/ranges/algorithm.h" #include "base/strings/string_number_conversions.h" #include "base/synchronization/lock.h" #include "base/synchronization/waitable_event.h" @@ -192,6 +192,7 @@ BASE_FEATURE(kEnableHangWatcher, ); // Browser process. +// Note: Do not use the prepared macro as of no need for a local cache. constexpr base::FeatureParam kIOThreadLogLevel{ &kEnableHangWatcher, "io_thread_log_level", static_cast(LoggingLevel::kUmaOnly)}; @@ -203,6 +204,7 @@ constexpr base::FeatureParam kThreadPoolLogLevel{ static_cast(LoggingLevel::kUmaOnly)}; // GPU process. +// Note: Do not use the prepared macro as of no need for a local cache. constexpr base::FeatureParam kGPUProcessIOThreadLogLevel{ &kEnableHangWatcher, "gpu_process_io_thread_log_level", static_cast(LoggingLevel::kNone)}; @@ -214,6 +216,7 @@ constexpr base::FeatureParam kGPUProcessThreadPoolLogLevel{ static_cast(LoggingLevel::kNone)}; // Renderer process. +// Note: Do not use the prepared macro as of no need for a local cache. constexpr base::FeatureParam kRendererProcessIOThreadLogLevel{ &kEnableHangWatcher, "renderer_process_io_thread_log_level", static_cast(LoggingLevel::kUmaOnly)}; @@ -225,6 +228,7 @@ constexpr base::FeatureParam kRendererProcessThreadPoolLogLevel{ static_cast(LoggingLevel::kUmaOnly)}; // Utility process. +// Note: Do not use the prepared macro as of no need for a local cache. constexpr base::FeatureParam kUtilityProcessIOThreadLogLevel{ &kEnableHangWatcher, "utility_process_io_thread_log_level", static_cast(LoggingLevel::kUmaOnly)}; @@ -854,10 +858,10 @@ void HangWatcher::WatchStateSnapShot::Init( // Sort |hung_watch_state_copies_| by order of decreasing hang severity so the // most severe hang is first in the list. - ranges::sort(hung_watch_state_copies_, - [](const WatchStateCopy& lhs, const WatchStateCopy& rhs) { - return lhs.deadline < rhs.deadline; - }); + std::ranges::sort(hung_watch_state_copies_, + [](const WatchStateCopy& lhs, const WatchStateCopy& rhs) { + return lhs.deadline < rhs.deadline; + }); } void HangWatcher::WatchStateSnapShot::Clear() { @@ -1037,7 +1041,7 @@ void HangWatcher::BlockIfCaptureInProgress() { void HangWatcher::UnregisterThread() { AutoLock auto_lock(watch_state_lock_); - auto it = ranges::find( + auto it = std::ranges::find( watch_states_, internal::HangWatchState::GetHangWatchStateForCurrentThread(), &std::unique_ptr::get); diff --git a/naiveproxy/src/base/threading/platform_thread_android.cc b/naiveproxy/src/base/threading/platform_thread_android.cc index 95cdb0ec41..9802dc7cda 100644 --- a/naiveproxy/src/base/threading/platform_thread_android.cc +++ b/naiveproxy/src/base/threading/platform_thread_android.cc @@ -12,6 +12,7 @@ #include +#include "base/android/build_info.h" #include "base/android/jni_android.h" #include "base/lazy_instance.h" #include "base/logging.h" @@ -58,9 +59,14 @@ bool CanSetThreadTypeToRealtimeAudio() { bool SetCurrentThreadTypeForPlatform(ThreadType thread_type, MessagePumpType pump_type_hint) { - // On Android, we set the Audio priority through JNI as Audio priority - // will also allow the process to run while it is backgrounded. - if (thread_type == ThreadType::kRealtimeAudio) { + // We set the Audio priority through JNI as the Java setThreadPriority will + // put it into a preferable cgroup, whereas the "normal" C++ call wouldn't. + // However, with + // https://android-review.googlesource.com/c/platform/system/core/+/1975808 + // this becomes obsolete and we can avoid this starting in API level 33. + if (thread_type == ThreadType::kRealtimeAudio && + base::android::BuildInfo::GetInstance()->sdk_int() < + base::android::SDK_VERSION_T) { JNIEnv* env = base::android::AttachCurrentThread(); Java_ThreadUtils_setThreadPriorityAudio(env, PlatformThread::CurrentId()); return true; diff --git a/naiveproxy/src/base/threading/platform_thread_apple.mm b/naiveproxy/src/base/threading/platform_thread_apple.mm index dc0630c356..0a84ebb24c 100644 --- a/naiveproxy/src/base/threading/platform_thread_apple.mm +++ b/naiveproxy/src/base/threading/platform_thread_apple.mm @@ -103,15 +103,24 @@ bool IsOptimizedRealtimeThreadingMacEnabled() { // Fine-tuning optimized real-time thread config: // Whether or not the thread should be preemptible. -const FeatureParam kOptimizedRealtimeThreadingMacPreemptible{ - &kOptimizedRealtimeThreadingMac, "preemptible", true}; +BASE_FEATURE_PARAM(bool, + kOptimizedRealtimeThreadingMacPreemptible, + &kOptimizedRealtimeThreadingMac, + "preemptible", + true); // Portion of the time quantum the thread is expected to be busy, (0, 1]. -const FeatureParam kOptimizedRealtimeThreadingMacBusy{ - &kOptimizedRealtimeThreadingMac, "busy", 0.5}; +BASE_FEATURE_PARAM(double, + kOptimizedRealtimeThreadingMacBusy, + &kOptimizedRealtimeThreadingMac, + "busy", + 0.5); // Maximum portion of the time quantum the thread is expected to be busy, // (kOptimizedRealtimeThreadingMacBusy, 1]. -const FeatureParam kOptimizedRealtimeThreadingMacBusyLimit{ - &kOptimizedRealtimeThreadingMac, "busy_limit", 1.0}; +BASE_FEATURE_PARAM(double, + kOptimizedRealtimeThreadingMacBusyLimit, + &kOptimizedRealtimeThreadingMac, + "busy_limit", + 1.0); namespace { diff --git a/naiveproxy/src/base/threading/platform_thread_internal_posix.cc b/naiveproxy/src/base/threading/platform_thread_internal_posix.cc index ed56c7ddd8..7573174acf 100644 --- a/naiveproxy/src/base/threading/platform_thread_internal_posix.cc +++ b/naiveproxy/src/base/threading/platform_thread_internal_posix.cc @@ -14,9 +14,7 @@ #include "base/notimplemented.h" #include "base/notreached.h" -namespace base { - -namespace internal { +namespace base::internal { BASE_EXPORT int ThreadTypeToNiceValue(ThreadType thread_type) { for (const auto& pair : kThreadTypeToNiceValueMap) { @@ -62,6 +60,4 @@ int GetCurrentThreadNiceValue() { #endif } -} // namespace internal - -} // namespace base +} // namespace base::internal diff --git a/naiveproxy/src/base/threading/sequence_local_storage_map.cc b/naiveproxy/src/base/threading/sequence_local_storage_map.cc index 4f3bc155c1..1c6f8322ca 100644 --- a/naiveproxy/src/base/threading/sequence_local_storage_map.cc +++ b/naiveproxy/src/base/threading/sequence_local_storage_map.cc @@ -10,8 +10,7 @@ #include "base/check_op.h" #include "base/sequence_token.h" -namespace base { -namespace internal { +namespace base::internal { namespace { @@ -130,5 +129,4 @@ ScopedSetSequenceLocalStorageMapForCurrentThread:: ScopedSetSequenceLocalStorageMapForCurrentThread:: ~ScopedSetSequenceLocalStorageMapForCurrentThread() = default; -} // namespace internal -} // namespace base +} // namespace base::internal diff --git a/naiveproxy/src/base/threading/sequence_local_storage_slot.cc b/naiveproxy/src/base/threading/sequence_local_storage_slot.cc index 8dc49c98d2..c6109fed13 100644 --- a/naiveproxy/src/base/threading/sequence_local_storage_slot.cc +++ b/naiveproxy/src/base/threading/sequence_local_storage_slot.cc @@ -9,8 +9,7 @@ #include "base/atomic_sequence_num.h" #include "base/check_op.h" -namespace base { -namespace internal { +namespace base::internal { namespace { AtomicSequenceNumber g_sequence_local_storage_slot_generator; @@ -22,6 +21,4 @@ int GetNextSequenceLocalStorageSlotNumber() { return slot_id; } -} // namespace internal - -} // namespace base +} // namespace base::internal diff --git a/naiveproxy/src/base/threading/thread_local_storage_posix.cc b/naiveproxy/src/base/threading/thread_local_storage_posix.cc index 8806b8c9be..441e2e244b 100644 --- a/naiveproxy/src/base/threading/thread_local_storage_posix.cc +++ b/naiveproxy/src/base/threading/thread_local_storage_posix.cc @@ -6,9 +6,7 @@ #include "base/check_op.h" -namespace base { - -namespace internal { +namespace base::internal { bool PlatformThreadLocalStorage::AllocTLS(TLSKey* key) { return !pthread_key_create( @@ -25,6 +23,4 @@ void PlatformThreadLocalStorage::SetTLSValue(TLSKey key, void* value) { DCHECK_EQ(ret, 0); } -} // namespace internal - -} // namespace base +} // namespace base::internal diff --git a/naiveproxy/src/base/threading/thread_restrictions.h b/naiveproxy/src/base/threading/thread_restrictions.h index e029700325..ab355bfa81 100644 --- a/naiveproxy/src/base/threading/thread_restrictions.h +++ b/naiveproxy/src/base/threading/thread_restrictions.h @@ -216,7 +216,6 @@ class CrashUtil; } namespace chromeos { class BlockingMethodCaller; -class ChromeOsCdmFactory; namespace system { bool IsCoreSchedulingAvailable(); int NumberOfPhysicalCores(); @@ -799,7 +798,6 @@ class BASE_EXPORT ScopedAllowBaseSyncPrimitives { friend class android_webview:: OverlayProcessorWebView; // http://crbug.com/341151462 friend class blink::VideoFrameResourceProvider; // http://crbug.com/878070 - friend class chromeos::ChromeOsCdmFactory; // http://crbug.com/368792274 friend class viz:: DisplayCompositorMemoryAndTaskController; // http://crbug.com/341151462 friend class viz::SkiaOutputSurfaceImpl; // http://crbug.com/341151462 diff --git a/naiveproxy/src/base/threading/threading_features.h b/naiveproxy/src/base/threading/threading_features.h index 24314c4ff9..23f3056d39 100644 --- a/naiveproxy/src/base/threading/threading_features.h +++ b/naiveproxy/src/base/threading/threading_features.h @@ -17,13 +17,14 @@ namespace base { #if BUILDFLAG(IS_APPLE) BASE_EXPORT BASE_DECLARE_FEATURE(kOptimizedRealtimeThreadingMac); -extern const BASE_EXPORT FeatureParam - kOptimizedRealtimeThreadingMacPreemptible; -extern const BASE_EXPORT FeatureParam - kOptimizedRealtimeThreadingMacBusy; -extern const BASE_EXPORT FeatureParam - kOptimizedRealtimeThreadingMacBusyLimit; -extern const BASE_EXPORT Feature kUserInteractiveCompositingMac; +BASE_EXPORT BASE_DECLARE_FEATURE_PARAM( + bool, + kOptimizedRealtimeThreadingMacPreemptible); +BASE_EXPORT BASE_DECLARE_FEATURE_PARAM(double, + kOptimizedRealtimeThreadingMacBusy); +BASE_EXPORT BASE_DECLARE_FEATURE_PARAM(double, + kOptimizedRealtimeThreadingMacBusyLimit); +BASE_EXPORT BASE_DECLARE_FEATURE(kUserInteractiveCompositingMac); #endif BASE_EXPORT BASE_DECLARE_FEATURE(kEnableHangWatcher); diff --git a/naiveproxy/src/base/time/time_override.cc b/naiveproxy/src/base/time/time_override.cc index d99da880da..ea6134d564 100644 --- a/naiveproxy/src/base/time/time_override.cc +++ b/naiveproxy/src/base/time/time_override.cc @@ -6,8 +6,7 @@ #include "base/check.h" -namespace base { -namespace subtle { +namespace base::subtle { // static bool ScopedTimeClockOverrides::overrides_active_ = false; @@ -56,5 +55,4 @@ ScopedTimeClockOverrides::~ScopedTimeClockOverrides() { overrides_active_ = false; } -} // namespace subtle -} // namespace base +} // namespace base::subtle diff --git a/naiveproxy/src/base/timer/timer.h b/naiveproxy/src/base/timer/timer.h index 358f8becc3..2a1fbc4675 100644 --- a/naiveproxy/src/base/timer/timer.h +++ b/naiveproxy/src/base/timer/timer.h @@ -242,7 +242,10 @@ class BASE_EXPORT OneShotTimer : public internal::DelayTimerBase { TimeDelta delay, Receiver* receiver, void (Receiver::*method)()) { - Start(posted_from, delay, BindOnce(method, Unretained(receiver))); + // Explicitly qualify calls, in case this is used inside Blink (which has + // similar methods in WTF). + Start(posted_from, delay, + ::base::BindOnce(method, ::base::Unretained(receiver))); } // Run the scheduled task immediately, and stop the timer. The timer needs to diff --git a/naiveproxy/src/base/trace_event/OWNERS b/naiveproxy/src/base/trace_event/OWNERS index c6bf75a0ca..2c37f8ac5d 100644 --- a/naiveproxy/src/base/trace_event/OWNERS +++ b/naiveproxy/src/base/trace_event/OWNERS @@ -1,8 +1,11 @@ -eseckler@chromium.org -nuskos@chromium.org -khokhlov@google.com -etiennep@chromium.org altimin@chromium.org +eseckler@chromium.org +etiennep@chromium.org +khokhlov@google.com +nuskos@chromium.org +# SQL stdlib and proto arguments. +petrcermak@chromium.org + primiano@chromium.org skyostil@chromium.org diff --git a/naiveproxy/src/base/trace_event/builtin_categories.cc b/naiveproxy/src/base/trace_event/builtin_categories.cc index 3e8ba5fd9f..14626edcf4 100644 --- a/naiveproxy/src/base/trace_event/builtin_categories.cc +++ b/naiveproxy/src/base/trace_event/builtin_categories.cc @@ -3,7 +3,3 @@ // found in the LICENSE file. #include "base/trace_event/builtin_categories.h" - -namespace base { -namespace trace_event {} // namespace trace_event -} // namespace base diff --git a/naiveproxy/src/base/trace_event/builtin_categories.h b/naiveproxy/src/base/trace_event/builtin_categories.h index d10d536f12..397fd890b7 100644 --- a/naiveproxy/src/base/trace_event/builtin_categories.h +++ b/naiveproxy/src/base/trace_event/builtin_categories.h @@ -2,430 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifdef UNSAFE_BUFFERS_BUILD -// TODO(crbug.com/40284755): Remove this and spanify to fix the errors. -#pragma allow_unsafe_buffers -#endif - #ifndef BASE_TRACE_EVENT_BUILTIN_CATEGORIES_H_ #define BASE_TRACE_EVENT_BUILTIN_CATEGORIES_H_ -#include -#include - #include "base/base_export.h" #include "base/trace_event/common/trace_event_common.h" #include "base/tracing_buildflags.h" #include "build/build_config.h" -// List of builtin category names. If you want to use a new category name in -// your code and you get a static assert, this is the right place to register -// the name. If the name is going to be used only for testing, please add it to -// |kCategoriesForTesting| instead. -// -// Since spaces aren't allowed, use '_' to separate words in category names -// (e.g., "content_capture"). -// -// Parameter |X| must be a *macro* that takes a single |name| string argument, -// denoting a category name. -#define INTERNAL_TRACE_LIST_BUILTIN_CATEGORIES(X) \ - /* These entries must go first to be consistent with the \ - * CategoryRegistry::kCategory* consts.*/ \ - X("tracing_categories_exhausted._must_increase_kMaxCategories") \ - X("tracing_already_shutdown") \ - X("__metadata") \ - /* The rest of the list is in alphabetical order */ \ - X("accessibility") \ - X("AccountFetcherService") \ - X("android.adpf") \ - X("android.ui.jank") \ - X("android_webview") \ - X("android_webview.timeline") \ - /* Actions on Google Hardware, used in Google-internal code. */ \ - X("aogh") \ - X("audio") \ - X("base") \ - X("benchmark") \ - X("blink") \ - X("blink.animations") \ - X("blink.bindings") \ - X("blink.console") \ - X("blink.net") \ - X("blink.resource") \ - X("blink.user_timing") \ - X("blink.worker") \ - X("blink_style") \ - X("Blob") \ - X("browser") \ - X("browsing_data") \ - X("CacheStorage") \ - X("Calculators") \ - X("CameraStream") \ - X("cppgc") \ - X("camera") \ - X("cast_app") \ - X("cast_perf_test") \ - X("cast.mdns") \ - X("cast.mdns.socket") \ - X("cast.stream") \ - X("cc") \ - X("cc.debug") \ - X("cdp.perf") \ - X("chromeos") \ - X("cma") \ - X("compositor") \ - /* Config categories do not emit trace events, but are used */ \ - /* to configure enabling additional information at runtime, */ \ - /* which then is emitted in other trace events. */ \ - /* Controls details emitted by TaskAnnotator::EmitTaskTimingDetails */ \ - X("config.scheduler.record_task_post_time") \ - X("content") \ - X("content_capture") \ - X("interactions") \ - X("delegated_ink_trails") \ - X("device") \ - X("devtools") \ - X("devtools.contrast") \ - X("devtools.timeline") \ - X("disk_cache") \ - X("download") \ - X("download_service") \ - X("drm") \ - X("drmcursor") \ - X("dwrite") \ - X("evdev") \ - X("event") \ - X("exo") \ - X("extensions") \ - X("explore_sites") \ - X("FileSystem") \ - X("file_system_provider") \ - X("fledge") \ - X("fonts") \ - X("GAMEPAD") \ - X("gpu") \ - X("gpu.angle") \ - X("gpu.angle.texture_metrics") \ - X("gpu.capture") \ - X("graphics.pipeline") \ - X("headless") \ - /* Traces for //components/history. */ \ - X("history") \ - X("hwoverlays") \ - X("identity") \ - X("ime") \ - X("IndexedDB") \ - X("input") \ - X("input.scrolling") \ - X("io") \ - X("ipc") \ - X("Java") \ - X("jni") \ - X("jpeg") \ - X("latency") \ - X("latencyInfo") \ - X("leveldb") \ - X("loading") \ - X("log") \ - X("login") \ - X("media") \ - X("mediastream") \ - X("media_router") \ - X("memory") \ - X("midi") \ - X("mojom") \ - X("mus") \ - X("native") \ - X("navigation") \ - X("navigation.debug") \ - X("net") \ - X("network.scheduler") \ - X("netlog") \ - X("offline_pages") \ - X("omnibox") \ - X("oobe") \ - X("openscreen") \ - X("ozone") \ - X("partition_alloc") \ - X("passwords") \ - X("p2p") \ - X("page-serialization") \ - X("paint_preview") \ - X("pepper") \ - X("PlatformMalloc") \ - X("power") \ - X("ppapi") \ - X("ppapi_proxy") \ - X("print") \ - X("raf_investigation") \ - X("rail") \ - X("renderer") \ - X("renderer_host") \ - X("renderer.scheduler") \ - X("resources") \ - X("RLZ") \ - X("ServiceWorker") \ - X("SiteEngagement") \ - X("safe_browsing") \ - X("scheduler") \ - X("scheduler.long_tasks") \ - X("screenlock_monitor") \ - X("segmentation_platform") \ - X("sequence_manager") \ - X("service_manager") \ - X("sharing") \ - X("shell") \ - X("shutdown") \ - X("skia") \ - X("sql") \ - X("stadia_media") \ - X("stadia_rtc") \ - X("startup") \ - X("sync") \ - X("system_apps") \ - X("test_gpu") \ - X("toplevel") \ - X("toplevel.flow") \ - X("ui") \ - X("v8") \ - X("v8.execute") \ - X("v8.wasm") \ - X("ValueStoreFrontend::Backend") \ - X("views") \ - X("views.frame") \ - X("viz") \ - X("vk") \ - X("wakeup.flow") \ - X("wayland") \ - X("webaudio") \ - X("webengine.fidl") \ - X("weblayer") \ - X("WebCore") \ - X("webnn") \ - X("webrtc") \ - X("webrtc_stats") \ - X("xr") \ - X(TRACE_DISABLED_BY_DEFAULT("android_view_hierarchy")) \ - X(TRACE_DISABLED_BY_DEFAULT("animation-worklet")) \ - X(TRACE_DISABLED_BY_DEFAULT("audio")) \ - X(TRACE_DISABLED_BY_DEFAULT("audio.latency")) \ - X(TRACE_DISABLED_BY_DEFAULT("audio-worklet")) \ - X(TRACE_DISABLED_BY_DEFAULT("base")) \ - X(TRACE_DISABLED_BY_DEFAULT("blink.debug")) \ - X(TRACE_DISABLED_BY_DEFAULT("blink.debug.display_lock")) \ - X(TRACE_DISABLED_BY_DEFAULT("blink.debug.layout")) \ - X(TRACE_DISABLED_BY_DEFAULT("blink.debug.layout.trees")) \ - X(TRACE_DISABLED_BY_DEFAULT("blink.feature_usage")) \ - X(TRACE_DISABLED_BY_DEFAULT("blink.image_decoding")) \ - X(TRACE_DISABLED_BY_DEFAULT("blink.invalidation")) \ - X(TRACE_DISABLED_BY_DEFAULT("identifiability")) \ - X(TRACE_DISABLED_BY_DEFAULT("identifiability.high_entropy_api")) \ - X(TRACE_DISABLED_BY_DEFAULT("cc")) \ - X(TRACE_DISABLED_BY_DEFAULT("cc.debug")) \ - X(TRACE_DISABLED_BY_DEFAULT("cc.debug.cdp-perf")) \ - X(TRACE_DISABLED_BY_DEFAULT("cc.debug.display_items")) \ - X(TRACE_DISABLED_BY_DEFAULT("cc.debug.lcd_text")) \ - X(TRACE_DISABLED_BY_DEFAULT("cc.debug.picture")) \ - X(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler")) \ - X(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler.frames")) \ - X(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler.now")) \ - X(TRACE_DISABLED_BY_DEFAULT("content.verbose")) \ - X(TRACE_DISABLED_BY_DEFAULT("cpu_profiler")) \ - X(TRACE_DISABLED_BY_DEFAULT("cppgc")) \ - X(TRACE_DISABLED_BY_DEFAULT("cpu_profiler.debug")) \ - X(TRACE_DISABLED_BY_DEFAULT("crypto.dpapi")) \ - X(TRACE_DISABLED_BY_DEFAULT("devtools.screenshot")) \ - X(TRACE_DISABLED_BY_DEFAULT("devtools.timeline")) \ - X(TRACE_DISABLED_BY_DEFAULT("devtools.timeline.frame")) \ - X(TRACE_DISABLED_BY_DEFAULT("devtools.timeline.inputs")) \ - X(TRACE_DISABLED_BY_DEFAULT("devtools.timeline.invalidationTracking")) \ - X(TRACE_DISABLED_BY_DEFAULT("devtools.timeline.layers")) \ - X(TRACE_DISABLED_BY_DEFAULT("devtools.timeline.picture")) \ - X(TRACE_DISABLED_BY_DEFAULT("devtools.timeline.stack")) \ - X(TRACE_DISABLED_BY_DEFAULT("devtools.target-rundown")) \ - X(TRACE_DISABLED_BY_DEFAULT("devtools.v8-source-rundown")) \ - X(TRACE_DISABLED_BY_DEFAULT("devtools.v8-source-rundown-sources")) \ - X(TRACE_DISABLED_BY_DEFAULT("file")) \ - X(TRACE_DISABLED_BY_DEFAULT("fonts")) \ - X(TRACE_DISABLED_BY_DEFAULT("gpu_cmd_queue")) \ - X(TRACE_DISABLED_BY_DEFAULT("gpu.dawn")) \ - X(TRACE_DISABLED_BY_DEFAULT("gpu.debug")) \ - X(TRACE_DISABLED_BY_DEFAULT("gpu.decoder")) \ - X(TRACE_DISABLED_BY_DEFAULT("gpu.device")) \ - X(TRACE_DISABLED_BY_DEFAULT("gpu.graphite.dawn")) \ - X(TRACE_DISABLED_BY_DEFAULT("gpu.service")) \ - X(TRACE_DISABLED_BY_DEFAULT("gpu.vulkan.vma")) \ - X(TRACE_DISABLED_BY_DEFAULT("histogram_samples")) \ - X(TRACE_DISABLED_BY_DEFAULT("java-heap-profiler")) \ - X(TRACE_DISABLED_BY_DEFAULT("layer-element")) \ - X(TRACE_DISABLED_BY_DEFAULT("layout_shift.debug")) \ - X(TRACE_DISABLED_BY_DEFAULT("lifecycles")) \ - X(TRACE_DISABLED_BY_DEFAULT("loading")) \ - X(TRACE_DISABLED_BY_DEFAULT("mediastream")) \ - X(TRACE_DISABLED_BY_DEFAULT("memory-infra")) \ - X(TRACE_DISABLED_BY_DEFAULT("memory-infra.v8.code_stats")) \ - X(TRACE_DISABLED_BY_DEFAULT("mojom")) \ - X(TRACE_DISABLED_BY_DEFAULT("navigation")) \ - X(TRACE_DISABLED_BY_DEFAULT("net")) \ - X(TRACE_DISABLED_BY_DEFAULT("network")) \ - X(TRACE_DISABLED_BY_DEFAULT("paint-worklet")) \ - X(TRACE_DISABLED_BY_DEFAULT("power")) \ - X(TRACE_DISABLED_BY_DEFAULT("system_metrics")) \ - X(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler")) \ - X(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler.debug")) \ - X(TRACE_DISABLED_BY_DEFAULT("sequence_manager")) \ - X(TRACE_DISABLED_BY_DEFAULT("sequence_manager.debug")) \ - X(TRACE_DISABLED_BY_DEFAULT("sequence_manager.verbose_snapshots")) \ - X(TRACE_DISABLED_BY_DEFAULT("skia")) \ - X(TRACE_DISABLED_BY_DEFAULT("skia.gpu")) \ - X(TRACE_DISABLED_BY_DEFAULT("skia.gpu.cache")) \ - X(TRACE_DISABLED_BY_DEFAULT("skia.shaders")) \ - X(TRACE_DISABLED_BY_DEFAULT("skottie")) \ - X(TRACE_DISABLED_BY_DEFAULT("SyncFileSystem")) \ - X(TRACE_DISABLED_BY_DEFAULT("system_power")) \ - X(TRACE_DISABLED_BY_DEFAULT("thread_pool_diagnostics")) \ - X(TRACE_DISABLED_BY_DEFAULT("toplevel.ipc")) \ - X(TRACE_DISABLED_BY_DEFAULT("user_action_samples")) \ - X(TRACE_DISABLED_BY_DEFAULT("v8.compile")) \ - X(TRACE_DISABLED_BY_DEFAULT("v8.cpu_profiler")) \ - X(TRACE_DISABLED_BY_DEFAULT("v8.gc")) \ - X(TRACE_DISABLED_BY_DEFAULT("v8.gc_stats")) \ - X(TRACE_DISABLED_BY_DEFAULT("v8.ic_stats")) \ - X(TRACE_DISABLED_BY_DEFAULT("v8.inspector")) \ - X(TRACE_DISABLED_BY_DEFAULT("v8.runtime")) \ - X(TRACE_DISABLED_BY_DEFAULT("v8.runtime_stats")) \ - X(TRACE_DISABLED_BY_DEFAULT("v8.runtime_stats_sampling")) \ - X(TRACE_DISABLED_BY_DEFAULT("v8.stack_trace")) \ - X(TRACE_DISABLED_BY_DEFAULT("v8.turbofan")) \ - X(TRACE_DISABLED_BY_DEFAULT("v8.wasm.detailed")) \ - X(TRACE_DISABLED_BY_DEFAULT("v8.wasm.turbofan")) \ - X(TRACE_DISABLED_BY_DEFAULT("video_and_image_capture")) \ - X(TRACE_DISABLED_BY_DEFAULT("display.framedisplayed")) \ - X(TRACE_DISABLED_BY_DEFAULT("viz.gpu_composite_time")) \ - X(TRACE_DISABLED_BY_DEFAULT("viz.debug.overlay_planes")) \ - X(TRACE_DISABLED_BY_DEFAULT("viz.hit_testing_flow")) \ - X(TRACE_DISABLED_BY_DEFAULT("viz.overdraw")) \ - X(TRACE_DISABLED_BY_DEFAULT("viz.quads")) \ - X(TRACE_DISABLED_BY_DEFAULT("viz.surface_id_flow")) \ - X(TRACE_DISABLED_BY_DEFAULT("viz.surface_lifetime")) \ - X(TRACE_DISABLED_BY_DEFAULT("viz.triangles")) \ - X(TRACE_DISABLED_BY_DEFAULT("viz.visual_debugger")) \ - X(TRACE_DISABLED_BY_DEFAULT("webaudio.audionode")) \ - X(TRACE_DISABLED_BY_DEFAULT("webgpu")) \ - X(TRACE_DISABLED_BY_DEFAULT("webnn")) \ - X(TRACE_DISABLED_BY_DEFAULT("webrtc")) \ - X(TRACE_DISABLED_BY_DEFAULT("worker.scheduler")) \ - X(TRACE_DISABLED_BY_DEFAULT("xr.debug")) - -#define INTERNAL_TRACE_LIST_BUILTIN_CATEGORY_GROUPS(X) \ - X("android_webview,toplevel") \ - X("android_webview.timeline,android.ui.jank") \ - X("base,toplevel") \ - X("benchmark,drm") \ - X("benchmark,latencyInfo,rail") \ - X("benchmark,latencyInfo,rail,input.scrolling") \ - X("benchmark,loading") \ - X("benchmark,rail") \ - X("benchmark,uma") \ - X("benchmark,ui") \ - X("benchmark,viz") \ - X("benchmark,viz," TRACE_DISABLED_BY_DEFAULT("display.framedisplayed")) \ - X("blink,benchmark") \ - X("blink,benchmark,rail," TRACE_DISABLED_BY_DEFAULT("blink.debug.layout")) \ - X("blink,blink.resource") \ - X("blink,blink_style") \ - X("blink,devtools.timeline") \ - X("blink,latency") \ - X("blink,loading") \ - X("blink,rail") \ - X("blink.animations,devtools.timeline,benchmark,rail") \ - X("blink.user_timing,rail") \ - X("browser,content,navigation") \ - X("browser,navigation") \ - X("browser,navigation,benchmark") \ - X("browser,startup") \ - X("category1,category2") \ - X("cc,benchmark") \ - X("cc,benchmark,input,input.scrolling") \ - X("cc,benchmark,latency") \ - X("cc,benchmark," TRACE_DISABLED_BY_DEFAULT("devtools.timeline.frame")) \ - X("cc,input") \ - X("cc,raf_investigation") \ - X("cc," TRACE_DISABLED_BY_DEFAULT("devtools.timeline")) \ - X("cc,benchmark," TRACE_DISABLED_BY_DEFAULT("devtools.timeline.frame")) \ - X("content,navigation") \ - X("devtools.timeline,rail") \ - X("drm,hwoverlays") \ - X("dwrite,fonts") \ - X("fonts,ui") \ - X("gpu,benchmark") \ - X("gpu,benchmark,android_webview") \ - X("gpu,benchmark,webview") \ - X("gpu,login") \ - X("gpu,startup") \ - X("gpu,toplevel.flow") \ - X("gpu.angle,startup") \ - X("inc2,inc") \ - X("inc,inc2") \ - X("input,benchmark") \ - X("input,benchmark,devtools.timeline") \ - X("input,benchmark,devtools.timeline,latencyInfo") \ - X("input,benchmark,latencyInfo") \ - X("input,latency") \ - X("input,rail") \ - X("input,input.scrolling") \ - X("input,views") \ - X("interactions,input.scrolling") \ - X("interactions,startup") \ - X("ipc,security") \ - X("ipc,toplevel") \ - X("Java,devtools," TRACE_DISABLED_BY_DEFAULT("devtools.timeline")) \ - X("loading,interactions") \ - X("loading,rail") \ - X("loading,rail,devtools.timeline") \ - X("login,screenlock_monitor") \ - X("media,gpu") \ - X("media,rail") \ - X("navigation,benchmark,rail") \ - X("navigation,rail") \ - X("renderer,benchmark,rail") \ - X("renderer,benchmark,rail,input.scrolling") \ - X("renderer,webkit") \ - X("renderer_host,navigation") \ - X("renderer_host," TRACE_DISABLED_BY_DEFAULT("viz.surface_id_flow")) \ - X("scheduler,devtools.timeline,loading") \ - X("shutdown,viz") \ - X("startup,benchmark,rail") \ - X("startup,rail") \ - X("toplevel,graphics.pipeline") \ - X("toplevel,Java") \ - X("toplevel,latency") \ - X("toplevel,viz") \ - X("ui,input") \ - X("ui,latency") \ - X("ui,toplevel") \ - X("v8," TRACE_DISABLED_BY_DEFAULT("v8.compile")) \ - X("v8,devtools.timeline") \ - X("v8,devtools.timeline," TRACE_DISABLED_BY_DEFAULT("v8.compile")) \ - X("viz,android.adpf") \ - X("viz,benchmark") \ - X("viz,benchmark,graphics.pipeline") \ - X("viz,benchmark,input.scrolling") \ - X("viz,input.scrolling") \ - X("wakeup.flow,toplevel.flow") \ - X("WebCore,benchmark,rail") \ - X(TRACE_DISABLED_BY_DEFAULT("cc.debug") "," TRACE_DISABLED_BY_DEFAULT( \ - "viz.quads") "," TRACE_DISABLED_BY_DEFAULT("devtools.timeline.layers")) \ - X(TRACE_DISABLED_BY_DEFAULT("cc.debug.display_items") "," \ - TRACE_DISABLED_BY_DEFAULT("cc.debug.picture") "," \ - TRACE_DISABLED_BY_DEFAULT("devtools.timeline.picture")) \ - X(TRACE_DISABLED_BY_DEFAULT("v8.inspector") "," TRACE_DISABLED_BY_DEFAULT( \ - "v8.stack_trace")) - -#define INTERNAL_TRACE_INIT_CATEGORY_NAME(name) name, - -#define INTERNAL_TRACE_INIT_CATEGORY(name) {0, 0, name}, - PERFETTO_DEFINE_TEST_CATEGORY_PREFIXES("cat", "foo", "test", @@ -437,47 +21,422 @@ PERFETTO_DEFINE_TEST_CATEGORY_PREFIXES("cat", TRACE_DISABLED_BY_DEFAULT("Testing"), TRACE_DISABLED_BY_DEFAULT("NotTesting")); -#define INTERNAL_CATEGORY(X) perfetto::Category(X), -#define INTERNAL_CATEGORY_GROUP(X) perfetto::Category::Group(X), - -// Define a Perfetto TrackEvent data source using the list of categories defined -// above. See https://perfetto.dev/docs/instrumentation/track-events. +// List of builtin category names. If you want to use a new category name in +// your code and you get a static assert, this is the right place to register +// the name. +// See https://perfetto.dev/docs/instrumentation/track-events. +// +// Since spaces aren't allowed, use '_' to separate words in category names +// (e.g., "content_capture"). +// clang-format off PERFETTO_DEFINE_CATEGORIES_IN_NAMESPACE_WITH_ATTRS( base, BASE_EXPORT, - INTERNAL_TRACE_LIST_BUILTIN_CATEGORIES(INTERNAL_CATEGORY) - INTERNAL_TRACE_LIST_BUILTIN_CATEGORY_GROUPS(INTERNAL_CATEGORY_GROUP)); + /* The rest of the list is in alphabetical order */ + perfetto::Category("__metadata"), + perfetto::Category("accessibility"), + perfetto::Category("AccountFetcherService"), + perfetto::Category("android.adpf"), + perfetto::Category("android.ui.jank"), + perfetto::Category("android_webview"), + perfetto::Category("android_webview.timeline"), + perfetto::Category("aogh").SetDescription( + "Actions on Google Hardware, used in Google-internal code."), + perfetto::Category("audio"), + perfetto::Category("base"), + perfetto::Category("benchmark"), + perfetto::Category("blink"), + perfetto::Category("blink.animations"), + perfetto::Category("blink.bindings"), + perfetto::Category("blink.console"), + perfetto::Category("blink.net"), + perfetto::Category("blink.resource"), + perfetto::Category("blink.user_timing"), + perfetto::Category("blink.worker"), + perfetto::Category("blink_style"), + perfetto::Category("Blob"), + perfetto::Category("browser"), + perfetto::Category("browsing_data"), + perfetto::Category("CacheStorage"), + perfetto::Category("Calculators"), + perfetto::Category("CameraStream"), + perfetto::Category("cppgc"), + perfetto::Category("camera"), + perfetto::Category("cast_app"), + perfetto::Category("cast_perf_test"), + perfetto::Category("cast.mdns"), + perfetto::Category("cast.mdns.socket"), + perfetto::Category("cast.stream"), + perfetto::Category("cc"), + perfetto::Category("cc.debug"), + perfetto::Category("cdp.perf"), + perfetto::Category("chromeos"), + perfetto::Category("cma"), + perfetto::Category("compositor"), + // Config categories do not emit trace events, but are used to configure + // enabling additional information at runtime, which then is emitted in + // other trace events. + perfetto::Category("config.scheduler.record_task_post_time").SetDescription( + "Controls details emitted by TaskAnnotator::EmitTaskTimingDetails"), + perfetto::Category("content"), + perfetto::Category("content_capture"), + perfetto::Category("interactions"), + perfetto::Category("delegated_ink_trails"), + perfetto::Category("device"), + perfetto::Category("devtools"), + perfetto::Category("devtools.contrast"), + perfetto::Category("devtools.timeline"), + perfetto::Category("disk_cache"), + perfetto::Category("download"), + perfetto::Category("download_service"), + perfetto::Category("drm"), + perfetto::Category("drmcursor"), + perfetto::Category("dwrite"), + perfetto::Category("evdev"), + perfetto::Category("event"), + perfetto::Category("exo"), + perfetto::Category("extensions"), + perfetto::Category("explore_sites"), + perfetto::Category("FileSystem"), + perfetto::Category("file_system_provider"), + perfetto::Category("fledge"), + perfetto::Category("fonts"), + perfetto::Category("GAMEPAD"), + perfetto::Category("gpu"), + perfetto::Category("gpu.angle"), + perfetto::Category("gpu.angle.texture_metrics"), + perfetto::Category("gpu.capture"), + perfetto::Category("graphics.pipeline"), + perfetto::Category("headless"), + perfetto::Category("history").SetDescription( + "Traces for //components/history."), + perfetto::Category("hwoverlays"), + perfetto::Category("identity"), + perfetto::Category("ime"), + perfetto::Category("IndexedDB"), + perfetto::Category("input"), + perfetto::Category("input.scrolling"), + perfetto::Category("io"), + perfetto::Category("ipc"), + perfetto::Category("Java"), + perfetto::Category("jni"), + perfetto::Category("jpeg"), + perfetto::Category("latency"), + perfetto::Category("latencyInfo"), + perfetto::Category("leveldb"), + perfetto::Category("loading"), + perfetto::Category("log"), + perfetto::Category("login"), + perfetto::Category("media"), + perfetto::Category("mediastream"), + perfetto::Category("media_router"), + perfetto::Category("memory"), + perfetto::Category("midi"), + perfetto::Category("mojom"), + perfetto::Category("mus"), + perfetto::Category("native"), + perfetto::Category("navigation"), + perfetto::Category("navigation.debug"), + perfetto::Category("net"), + perfetto::Category("network.scheduler"), + perfetto::Category("netlog"), + perfetto::Category("offline_pages"), + perfetto::Category("omnibox"), + perfetto::Category("oobe"), + perfetto::Category("openscreen"), + perfetto::Category("ozone"), + perfetto::Category("partition_alloc"), + perfetto::Category("passwords"), + perfetto::Category("p2p"), + perfetto::Category("page-serialization"), + perfetto::Category("paint_preview"), + perfetto::Category("pepper"), + perfetto::Category("PlatformMalloc"), + perfetto::Category("power"), + perfetto::Category("ppapi"), + perfetto::Category("ppapi_proxy"), + perfetto::Category("print"), + perfetto::Category("raf_investigation"), + perfetto::Category("rail"), + perfetto::Category("renderer"), + perfetto::Category("renderer_host"), + perfetto::Category("renderer.scheduler"), + perfetto::Category("resources"), + perfetto::Category("RLZ"), + perfetto::Category("ServiceWorker"), + perfetto::Category("SiteEngagement"), + perfetto::Category("safe_browsing"), + perfetto::Category("scheduler"), + perfetto::Category("scheduler.flow").SetDescription( + "Includes flow events related to scheduling dependency. Notably, " + "records flows between tasks running in the thread pool on the same " + "sequence."), + perfetto::Category("scheduler.long_tasks"), + perfetto::Category("screenlock_monitor"), + perfetto::Category("segmentation_platform"), + perfetto::Category("sequence_manager"), + perfetto::Category("service_manager"), + perfetto::Category("sharing"), + perfetto::Category("shell"), + perfetto::Category("shutdown"), + perfetto::Category("skia"), + perfetto::Category("sql"), + perfetto::Category("stadia_media"), + perfetto::Category("stadia_rtc"), + perfetto::Category("startup"), + perfetto::Category("sync"), + perfetto::Category("system_apps"), + perfetto::Category("test_gpu"), + perfetto::Category("toplevel"), + perfetto::Category("toplevel.flow"), + perfetto::Category("ui"), + perfetto::Category("v8"), + perfetto::Category("v8.execute"), + perfetto::Category("v8.wasm"), + perfetto::Category("ValueStoreFrontend::Backend"), + perfetto::Category("views"), + perfetto::Category("views.frame"), + perfetto::Category("viz"), + perfetto::Category("vk"), + perfetto::Category("wakeup.flow"), + perfetto::Category("wayland"), + perfetto::Category("webaudio"), + perfetto::Category("webengine.fidl"), + perfetto::Category("weblayer"), + perfetto::Category("WebCore"), + perfetto::Category("webnn"), + perfetto::Category("webrtc"), + perfetto::Category("webrtc_stats"), + perfetto::Category("xr"), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("android_view_hierarchy")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("animation-worklet")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("audio")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("audio.latency")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("audio-worklet")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("base")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("blink.debug")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("blink.debug.display_lock")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("blink.debug.layout")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("blink.debug.layout.trees")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("blink.feature_usage")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("blink.image_decoding")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("blink.invalidation")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("identifiability")), + perfetto::Category( + TRACE_DISABLED_BY_DEFAULT("identifiability.high_entropy_api")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("cc")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("cc.debug")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("cc.debug.cdp-perf")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("cc.debug.display_items")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("cc.debug.lcd_text")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("cc.debug.picture")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler.frames")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler.now")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("content.verbose")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("cpu_profiler")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("cppgc")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("cpu_profiler.debug")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("crypto.dpapi")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("devtools.screenshot")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("devtools.timeline")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("devtools.timeline.frame")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("devtools.timeline.inputs")), + perfetto::Category( + TRACE_DISABLED_BY_DEFAULT("devtools.timeline.invalidationTracking")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("devtools.timeline.layers")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("devtools.timeline.picture")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("devtools.timeline.stack")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("devtools.target-rundown")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("devtools.v8-source-rundown")), + perfetto::Category( + TRACE_DISABLED_BY_DEFAULT("devtools.v8-source-rundown-sources")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("file")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("fonts")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("gpu_cmd_queue")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("gpu.dawn")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("gpu.debug")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("gpu.decoder")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("gpu.device")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("gpu.graphite.dawn")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("gpu.service")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("gpu.vulkan.vma")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("histogram_samples")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("java-heap-profiler")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("layer-element")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("layout_shift.debug")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("lifecycles")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("loading")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("mediastream")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("memory-infra")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("memory-infra.v8.code_stats")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("mojom")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("navigation")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("net")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("network")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("paint-worklet")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("power")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("system_metrics")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler.debug")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("sequence_manager")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("sequence_manager.debug")), + perfetto::Category( + TRACE_DISABLED_BY_DEFAULT("sequence_manager.verbose_snapshots")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("skia")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("skia.gpu")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("skia.gpu.cache")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("skia.shaders")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("skottie")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("SyncFileSystem")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("system_power")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("thread_pool_diagnostics")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("toplevel.ipc")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("user_action_samples")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("v8.compile")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("v8.cpu_profiler")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("v8.gc")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("v8.gc_stats")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("v8.ic_stats")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("v8.inspector")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("v8.runtime")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("v8.runtime_stats")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("v8.runtime_stats_sampling")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("v8.stack_trace")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("v8.turbofan")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("v8.wasm.detailed")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("v8.wasm.turbofan")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("video_and_image_capture")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("display.framedisplayed")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("viz.gpu_composite_time")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("viz.debug.overlay_planes")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("viz.hit_testing_flow")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("viz.overdraw")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("viz.quads")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("viz.surface_id_flow")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("viz.surface_lifetime")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("viz.triangles")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("viz.visual_debugger")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("webaudio.audionode")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("webgpu")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("webnn")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("webrtc")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("worker.scheduler")), + perfetto::Category(TRACE_DISABLED_BY_DEFAULT("xr.debug")), + perfetto::Category::Group("android_webview,toplevel"), + perfetto::Category::Group("android_webview.timeline,android.ui.jank"), + perfetto::Category::Group("base,toplevel"), + perfetto::Category::Group("benchmark,drm"), + perfetto::Category::Group("benchmark,latencyInfo,rail"), + perfetto::Category::Group("benchmark,latencyInfo,rail,input.scrolling"), + perfetto::Category::Group("benchmark,loading"), + perfetto::Category::Group("benchmark,rail"), + perfetto::Category::Group("benchmark,uma"), + perfetto::Category::Group("benchmark,ui"), + perfetto::Category::Group("benchmark,viz"), + perfetto::Category::Group( + "benchmark,viz," TRACE_DISABLED_BY_DEFAULT("display.framedisplayed")), + perfetto::Category::Group("blink,benchmark"), + perfetto::Category::Group("blink,benchmark,rail," TRACE_DISABLED_BY_DEFAULT( + "blink.debug.layout")), + perfetto::Category::Group("blink,blink.resource"), + perfetto::Category::Group("blink,blink_style"), + perfetto::Category::Group("blink,devtools.timeline"), + perfetto::Category::Group("blink,latency"), + perfetto::Category::Group("blink,loading"), + perfetto::Category::Group("blink,rail"), + perfetto::Category::Group( + "blink.animations,devtools.timeline,benchmark,rail"), + perfetto::Category::Group("blink.user_timing,rail"), + perfetto::Category::Group("browser,content,navigation"), + perfetto::Category::Group("browser,navigation"), + perfetto::Category::Group("browser,navigation,benchmark"), + perfetto::Category::Group("browser,startup"), + perfetto::Category::Group("category1,category2"), + perfetto::Category::Group("cc,benchmark"), + perfetto::Category::Group("cc,benchmark,input,input.scrolling"), + perfetto::Category::Group("cc,benchmark,latency"), + perfetto::Category::Group( + "cc,benchmark," TRACE_DISABLED_BY_DEFAULT("devtools.timeline.frame")), + perfetto::Category::Group("cc,input"), + perfetto::Category::Group("cc,raf_investigation"), + perfetto::Category::Group( + "cc," TRACE_DISABLED_BY_DEFAULT("devtools.timeline")), + perfetto::Category::Group("content,navigation"), + perfetto::Category::Group("devtools.timeline,rail"), + perfetto::Category::Group("drm,hwoverlays"), + perfetto::Category::Group("dwrite,fonts"), + perfetto::Category::Group("fonts,ui"), + perfetto::Category::Group("gpu,benchmark"), + perfetto::Category::Group("gpu,benchmark,android_webview"), + perfetto::Category::Group("gpu,benchmark,webview"), + perfetto::Category::Group("gpu,login"), + perfetto::Category::Group("gpu,startup"), + perfetto::Category::Group("gpu,toplevel.flow"), + perfetto::Category::Group("gpu.angle,startup"), + perfetto::Category::Group("input,benchmark"), + perfetto::Category::Group("input,benchmark,devtools.timeline"), + perfetto::Category::Group("input,benchmark,devtools.timeline,latencyInfo"), + perfetto::Category::Group("input,benchmark,latencyInfo"), + perfetto::Category::Group("input,latency"), + perfetto::Category::Group("input,rail"), + perfetto::Category::Group("input,input.scrolling"), + perfetto::Category::Group("input,views"), + perfetto::Category::Group("interactions,input.scrolling"), + perfetto::Category::Group("interactions,startup"), + perfetto::Category::Group("ipc,security"), + perfetto::Category::Group("ipc,toplevel"), + perfetto::Category::Group( + "Java,devtools," TRACE_DISABLED_BY_DEFAULT("devtools.timeline")), + perfetto::Category::Group("loading,interactions"), + perfetto::Category::Group("loading,rail"), + perfetto::Category::Group("loading,rail,devtools.timeline"), + perfetto::Category::Group("login,screenlock_monitor"), + perfetto::Category::Group("media,gpu"), + perfetto::Category::Group("media,rail"), + perfetto::Category::Group("navigation,benchmark,rail"), + perfetto::Category::Group("navigation,rail"), + perfetto::Category::Group("renderer,benchmark,rail"), + perfetto::Category::Group("renderer,benchmark,rail,input.scrolling"), + perfetto::Category::Group("renderer,webkit"), + perfetto::Category::Group("renderer_host,navigation"), + perfetto::Category::Group( + "renderer_host," TRACE_DISABLED_BY_DEFAULT("viz.surface_id_flow")), + perfetto::Category::Group("scheduler,devtools.timeline,loading"), + perfetto::Category::Group("shutdown,viz"), + perfetto::Category::Group("startup,benchmark,rail"), + perfetto::Category::Group("startup,rail"), + perfetto::Category::Group("toplevel,graphics.pipeline"), + perfetto::Category::Group("toplevel,Java"), + perfetto::Category::Group("toplevel,latency"), + perfetto::Category::Group("toplevel,viz"), + perfetto::Category::Group("ui,input"), + perfetto::Category::Group("ui,latency"), + perfetto::Category::Group("ui,toplevel"), + perfetto::Category::Group("v8," TRACE_DISABLED_BY_DEFAULT("v8.compile")), + perfetto::Category::Group("v8,devtools.timeline"), + perfetto::Category::Group( + "v8,devtools.timeline," TRACE_DISABLED_BY_DEFAULT("v8.compile")), + perfetto::Category::Group("viz,android.adpf"), + perfetto::Category::Group("viz,benchmark"), + perfetto::Category::Group("viz,benchmark,graphics.pipeline"), + perfetto::Category::Group("viz,benchmark,input.scrolling"), + perfetto::Category::Group("viz,input.scrolling"), + perfetto::Category::Group("wakeup.flow,toplevel.flow"), + perfetto::Category::Group("WebCore,benchmark,rail"), + perfetto::Category::Group( + TRACE_DISABLED_BY_DEFAULT("cc.debug") "," + TRACE_DISABLED_BY_DEFAULT("viz.quads") "," + TRACE_DISABLED_BY_DEFAULT("devtools.timeline.layers")), + perfetto::Category::Group( + TRACE_DISABLED_BY_DEFAULT("cc.debug.display_items") "," + TRACE_DISABLED_BY_DEFAULT("cc.debug.picture") "," + TRACE_DISABLED_BY_DEFAULT("devtools.timeline.picture")), + perfetto::Category::Group( + TRACE_DISABLED_BY_DEFAULT("v8.inspector") "," + TRACE_DISABLED_BY_DEFAULT("v8.stack_trace"))); +// clang-format on + PERFETTO_USE_CATEGORIES_FROM_NAMESPACE(base); -#undef INTERNAL_CATEGORY -#undef INTERNAL_CATEGORY_GROUP - -namespace base { -namespace trace_event { - -// Constexpr version of string comparison operator. |a| and |b| must be valid -// C-style strings known at compile-time. -constexpr bool StrEqConstexpr(const char* a, const char* b) { - for (; *a != '\0' && *b != '\0'; ++a, ++b) { - if (*a != *b) { - return false; - } - } - return *a == *b; -} - -// Tests for |StrEqConstexpr()|. -static_assert(StrEqConstexpr("foo", "foo"), "strings should be equal"); -static_assert(!StrEqConstexpr("foo", "Foo"), "strings should not be equal"); -static_assert(!StrEqConstexpr("foo", "foo1"), "strings should not be equal"); -static_assert(!StrEqConstexpr("foo2", "foo"), "strings should not be equal"); -static_assert(StrEqConstexpr("", ""), "strings should be equal"); -static_assert(!StrEqConstexpr("foo", ""), "strings should not be equal"); -static_assert(!StrEqConstexpr("", "foo"), "strings should not be equal"); -static_assert(!StrEqConstexpr("ab", "abc"), "strings should not be equal"); -static_assert(!StrEqConstexpr("abc", "ab"), "strings should not be equal"); - -} // namespace trace_event -} // namespace base - #endif // BASE_TRACE_EVENT_BUILTIN_CATEGORIES_H_ diff --git a/naiveproxy/src/base/trace_event/heap_profiler_allocation_context.cc b/naiveproxy/src/base/trace_event/heap_profiler_allocation_context.cc index 62a15ab434..16ce077dad 100644 --- a/naiveproxy/src/base/trace_event/heap_profiler_allocation_context.cc +++ b/naiveproxy/src/base/trace_event/heap_profiler_allocation_context.cc @@ -10,13 +10,13 @@ #include "base/trace_event/heap_profiler_allocation_context.h" #include +#include #include #include "base/containers/span.h" #include "base/hash/hash.h" -namespace base { -namespace trace_event { +namespace base::trace_event { bool operator<(const StackFrame& lhs, const StackFrame& rhs) { return lhs.value < rhs.value; @@ -57,8 +57,7 @@ bool operator!=(const AllocationContext& lhs, const AllocationContext& rhs) { return !(lhs == rhs); } -} // namespace trace_event -} // namespace base +} // namespace base::trace_event namespace std { @@ -71,7 +70,7 @@ size_t hash::operator()(const StackFrame& frame) const { } size_t hash::operator()(const Backtrace& backtrace) const { - const void* values[Backtrace::kMaxFrameCount]; + std::array values; for (size_t i = 0; i != backtrace.frame_count; ++i) { values[i] = backtrace.frames[i].value; } diff --git a/naiveproxy/src/base/trace_event/heap_profiler_allocation_context_tracker.cc b/naiveproxy/src/base/trace_event/heap_profiler_allocation_context_tracker.cc index b011fd457a..4a41bebb51 100644 --- a/naiveproxy/src/base/trace_event/heap_profiler_allocation_context_tracker.cc +++ b/naiveproxy/src/base/trace_event/heap_profiler_allocation_context_tracker.cc @@ -11,8 +11,7 @@ #include "base/notreached.h" #include "base/threading/thread_local_storage.h" -namespace base { -namespace trace_event { +namespace base::trace_event { std::atomic AllocationContextTracker::capture_mode_{ @@ -98,5 +97,4 @@ void AllocationContextTracker::PopCurrentTaskContext(const char* context) { task_contexts_.pop_back(); } -} // namespace trace_event -} // namespace base +} // namespace base::trace_event diff --git a/naiveproxy/src/base/trace_event/interned_args_helper.cc b/naiveproxy/src/base/trace_event/interned_args_helper.cc index 2d3ff0f3c6..b230b97a55 100644 --- a/naiveproxy/src/base/trace_event/interned_args_helper.cc +++ b/naiveproxy/src/base/trace_event/interned_args_helper.cc @@ -11,8 +11,7 @@ #include "third_party/perfetto/protos/perfetto/trace/track_event/source_location.pbzero.h" #include "third_party/perfetto/protos/perfetto/trace/track_event/task_execution.pbzero.h" -namespace base { -namespace trace_event { +namespace base::trace_event { namespace { @@ -153,5 +152,4 @@ void InternedUnsymbolizedSourceLocation::Add( msg->set_rel_pc(location.rel_pc); } -} // namespace trace_event -} // namespace base +} // namespace base::trace_event diff --git a/naiveproxy/src/base/trace_event/log_message.cc b/naiveproxy/src/base/trace_event/log_message.cc index 3c848fd7f1..6839b9484a 100644 --- a/naiveproxy/src/base/trace_event/log_message.cc +++ b/naiveproxy/src/base/trace_event/log_message.cc @@ -13,8 +13,7 @@ #include "base/notreached.h" #include "base/strings/stringprintf.h" -namespace base { -namespace trace_event { +namespace base::trace_event { LogMessage::LogMessage(const char* file, std::string_view message, int line) : file_(file), message_(message), line_number_(line) {} @@ -38,5 +37,4 @@ bool LogMessage::AppendToProto(ProtoAppender* appender) const { NOTREACHED(); } -} // namespace trace_event -} // namespace base +} // namespace base::trace_event diff --git a/naiveproxy/src/base/trace_event/malloc_dump_provider.cc b/naiveproxy/src/base/trace_event/malloc_dump_provider.cc index 7624dd12a2..b7cc40696f 100644 --- a/naiveproxy/src/base/trace_event/malloc_dump_provider.cc +++ b/naiveproxy/src/base/trace_event/malloc_dump_provider.cc @@ -51,8 +51,7 @@ #include "partition_alloc/partition_alloc_constants.h" // nogncheck #endif -namespace base { -namespace trace_event { +namespace base::trace_event { namespace { #if BUILDFLAG(IS_WIN) @@ -595,8 +594,22 @@ void MemoryDumpPartitionStatsDumper::PartitionDumpTotals( auto total_committed_bytes = memory_stats->total_committed_bytes; auto total_active_bytes = memory_stats->total_active_bytes; - size_t wasted = total_committed_bytes - total_active_bytes; - DCHECK_GE(total_committed_bytes, total_active_bytes); + size_t wasted = 0; + // This should always be true, but only if our accounting of committed bytes + // is consistent, which it isn't. Indeed, with + // PartitionAllocFewerMemoryRegions, we may allocate a slot span before the + // feature state is known, in which case we commit less, then decommit it + // after, in which case we subtract the new commit unit, which is larger. + // + // Properly handling this would require remembering how much was committed, + // which complicates bookkeeping, especially as metadata space is + // limited. Since this is only used to report metrics, which are known to + // already be quite flawed, and the feature is meant to be temporary (either + // shipped or abandoned), don't handle this corner case (which should only + // happen for the initial partition, which is tiny anyway). + if (total_committed_bytes >= total_active_bytes) { + wasted = total_committed_bytes - total_active_bytes; + } size_t fragmentation = total_committed_bytes == 0 ? 0 : 100 * wasted / total_committed_bytes; @@ -715,5 +728,4 @@ void MemoryDumpPartitionStatsDumper::PartitionsDumpBucketStats( } #endif // PA_BUILDFLAG(USE_PARTITION_ALLOC) -} // namespace trace_event -} // namespace base +} // namespace base::trace_event diff --git a/naiveproxy/src/base/trace_event/memory_allocator_dump.cc b/naiveproxy/src/base/trace_event/memory_allocator_dump.cc index 018c2fc009..d624c24da0 100644 --- a/naiveproxy/src/base/trace_event/memory_allocator_dump.cc +++ b/naiveproxy/src/base/trace_event/memory_allocator_dump.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "base/trace_event/memory_allocator_dump.h" #include @@ -18,8 +23,7 @@ #include "third_party/perfetto/protos/perfetto/trace/memory_graph.pbzero.h" #include "third_party/perfetto/protos/perfetto/trace/trace_packet.pbzero.h" -namespace base { -namespace trace_event { +namespace base::trace_event { const char MemoryAllocatorDump::kNameSize[] = "size"; const char MemoryAllocatorDump::kNameObjectCount[] = "object_count"; @@ -192,5 +196,4 @@ void PrintTo(const MemoryAllocatorDump::Entry& entry, std::ostream* out) { NOTREACHED(); } -} // namespace trace_event -} // namespace base +} // namespace base::trace_event diff --git a/naiveproxy/src/base/trace_event/memory_allocator_dump_guid.cc b/naiveproxy/src/base/trace_event/memory_allocator_dump_guid.cc index 16a0c04867..468a8df891 100644 --- a/naiveproxy/src/base/trace_event/memory_allocator_dump_guid.cc +++ b/naiveproxy/src/base/trace_event/memory_allocator_dump_guid.cc @@ -9,8 +9,7 @@ #include "base/numerics/byte_conversions.h" #include "base/strings/stringprintf.h" -namespace base { -namespace trace_event { +namespace base::trace_event { namespace { @@ -33,5 +32,4 @@ std::string MemoryAllocatorDumpGuid::ToString() const { return StringPrintf("%" PRIx64, guid_); } -} // namespace trace_event -} // namespace base +} // namespace base::trace_event diff --git a/naiveproxy/src/base/trace_event/memory_dump_manager.cc b/naiveproxy/src/base/trace_event/memory_dump_manager.cc index 0f6ec223ed..ce32a645b9 100644 --- a/naiveproxy/src/base/trace_event/memory_dump_manager.cc +++ b/naiveproxy/src/base/trace_event/memory_dump_manager.cc @@ -45,8 +45,7 @@ #include "base/trace_event/address_space_dump_provider.h" #endif -namespace base { -namespace trace_event { +namespace base::trace_event { namespace { @@ -551,5 +550,4 @@ MemoryDumpManager::ProcessMemoryDumpAsyncState::ProcessMemoryDumpAsyncState( MemoryDumpManager::ProcessMemoryDumpAsyncState::~ProcessMemoryDumpAsyncState() = default; -} // namespace trace_event -} // namespace base +} // namespace base::trace_event diff --git a/naiveproxy/src/base/trace_event/memory_dump_provider_info.cc b/naiveproxy/src/base/trace_event/memory_dump_provider_info.cc index a079a65fd7..5c45759ef0 100644 --- a/naiveproxy/src/base/trace_event/memory_dump_provider_info.cc +++ b/naiveproxy/src/base/trace_event/memory_dump_provider_info.cc @@ -8,8 +8,7 @@ #include "base/task/sequenced_task_runner.h" -namespace base { -namespace trace_event { +namespace base::trace_event { MemoryDumpProviderInfo::MemoryDumpProviderInfo( MemoryDumpProvider* dump_provider, @@ -40,5 +39,4 @@ bool MemoryDumpProviderInfo::Comparator::operator()( std::tie(b->task_runner, b->dump_provider); } -} // namespace trace_event -} // namespace base +} // namespace base::trace_event diff --git a/naiveproxy/src/base/trace_event/memory_dump_request_args.cc b/naiveproxy/src/base/trace_event/memory_dump_request_args.cc index 4342c13aa4..c4e4a53cf9 100644 --- a/naiveproxy/src/base/trace_event/memory_dump_request_args.cc +++ b/naiveproxy/src/base/trace_event/memory_dump_request_args.cc @@ -6,8 +6,7 @@ #include "base/notreached.h" -namespace base { -namespace trace_event { +namespace base::trace_event { // static const char* MemoryDumpTypeToString(const MemoryDumpType& dump_type) { @@ -62,5 +61,4 @@ MemoryDumpLevelOfDetail StringToMemoryDumpLevelOfDetail( NOTREACHED(); } -} // namespace trace_event -} // namespace base +} // namespace base::trace_event diff --git a/naiveproxy/src/base/trace_event/memory_dump_scheduler.cc b/naiveproxy/src/base/trace_event/memory_dump_scheduler.cc index 66af72d7d3..9ccc38d178 100644 --- a/naiveproxy/src/base/trace_event/memory_dump_scheduler.cc +++ b/naiveproxy/src/base/trace_event/memory_dump_scheduler.cc @@ -12,8 +12,7 @@ #include "base/task/sequenced_task_runner.h" #include "base/time/time.h" -namespace base { -namespace trace_event { +namespace base::trace_event { // static MemoryDumpScheduler* MemoryDumpScheduler::GetInstance() { @@ -120,5 +119,4 @@ MemoryDumpScheduler::Config::~Config() = default; MemoryDumpScheduler::Config::Config(const MemoryDumpScheduler::Config&) = default; -} // namespace trace_event -} // namespace base +} // namespace base::trace_event diff --git a/naiveproxy/src/base/trace_event/memory_pressure_level_proto.cc b/naiveproxy/src/base/trace_event/memory_pressure_level_proto.cc index ff4c7c146b..f1f7efbb99 100644 --- a/naiveproxy/src/base/trace_event/memory_pressure_level_proto.cc +++ b/naiveproxy/src/base/trace_event/memory_pressure_level_proto.cc @@ -11,8 +11,7 @@ #include "base/tracing/protos/chrome_track_event.pbzero.h" // nogncheck -namespace base { -namespace trace_event { +namespace base::trace_event { perfetto::protos::pbzero::MemoryPressureLevel MemoryPressureLevelToTraceEnum( MemoryPressureListener::MemoryPressureLevel memory_pressure_level) { @@ -27,5 +26,4 @@ perfetto::protos::pbzero::MemoryPressureLevel MemoryPressureLevelToTraceEnum( } } -} // namespace trace_event -} // namespace base +} // namespace base::trace_event diff --git a/naiveproxy/src/base/trace_event/memory_usage_estimator.cc b/naiveproxy/src/base/trace_event/memory_usage_estimator.cc index 017f6edd17..5634b86482 100644 --- a/naiveproxy/src/base/trace_event/memory_usage_estimator.cc +++ b/naiveproxy/src/base/trace_event/memory_usage_estimator.cc @@ -4,11 +4,9 @@ #include "base/trace_event/memory_usage_estimator.h" -namespace base { -namespace trace_event { +namespace base::trace_event { template size_t EstimateMemoryUsage(const std::string&); template size_t EstimateMemoryUsage(const std::u16string&); -} // namespace trace_event -} // namespace base +} // namespace base::trace_event diff --git a/naiveproxy/src/base/trace_event/process_memory_dump.cc b/naiveproxy/src/base/trace_event/process_memory_dump.cc index 05ab9a1599..c1896eb523 100644 --- a/naiveproxy/src/base/trace_event/process_memory_dump.cc +++ b/naiveproxy/src/base/trace_event/process_memory_dump.cc @@ -56,8 +56,7 @@ using ProcessSnapshot = ::perfetto::protos::pbzero::MemoryTrackerSnapshot_ProcessSnapshot; -namespace base { -namespace trace_event { +namespace base::trace_event { namespace { @@ -565,5 +564,4 @@ MemoryAllocatorDumpGuid ProcessMemoryDump::GetDumpId( "%s:%s", process_token().ToString().c_str(), absolute_name.c_str())); } -} // namespace trace_event -} // namespace base +} // namespace base::trace_event diff --git a/naiveproxy/src/base/trace_event/trace_arguments.cc b/naiveproxy/src/base/trace_event/trace_arguments.cc index 63f336cbec..9a1d44d73e 100644 --- a/naiveproxy/src/base/trace_event/trace_arguments.cc +++ b/naiveproxy/src/base/trace_event/trace_arguments.cc @@ -28,8 +28,7 @@ #include "base/strings/utf_string_conversions.h" #include "base/trace_event/perfetto_proto_appender.h" -namespace base { -namespace trace_event { +namespace base::trace_event { namespace { @@ -323,5 +322,4 @@ void ConvertableToTraceFormat::Add( annotation->set_legacy_json_value(std::move(json)); } -} // namespace trace_event -} // namespace base +} // namespace base::trace_event diff --git a/naiveproxy/src/base/trace_event/trace_buffer.cc b/naiveproxy/src/base/trace_event/trace_buffer.cc index 7c2b8bc547..d58d46c9ef 100644 --- a/naiveproxy/src/base/trace_event/trace_buffer.cc +++ b/naiveproxy/src/base/trace_event/trace_buffer.cc @@ -14,8 +14,7 @@ #include "base/functional/bind.h" -namespace base { -namespace trace_event { +namespace base::trace_event { TraceResultBuffer::OutputCallback TraceResultBuffer::SimpleOutput::GetCallback() { @@ -52,5 +51,4 @@ void TraceResultBuffer::Finish() { output_callback_.Run("]"); } -} // namespace trace_event -} // namespace base +} // namespace base::trace_event diff --git a/naiveproxy/src/base/trace_event/trace_event_impl.cc b/naiveproxy/src/base/trace_event/trace_event_impl.cc index 81517b8a0f..e86c41c74d 100644 --- a/naiveproxy/src/base/trace_event/trace_event_impl.cc +++ b/naiveproxy/src/base/trace_event/trace_event_impl.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "base/trace_event/trace_event_impl.h" #include @@ -58,8 +63,7 @@ void WriteDebugAnnotation(protos::pbzero::DebugAnnotation* annotation, } // namespace internal } // namespace perfetto -namespace base { -namespace trace_event { +namespace base::trace_event { bool ConvertableToTraceFormat::AppendToProto(ProtoAppender* appender) const { return false; @@ -323,5 +327,4 @@ void TraceEvent::AppendPrettyPrinted(std::ostringstream* out) const { } } -} // namespace trace_event -} // namespace base +} // namespace base::trace_event diff --git a/naiveproxy/src/base/trace_event/trace_event_impl.h b/naiveproxy/src/base/trace_event/trace_event_impl.h index 9c21dcd723..892847d58f 100644 --- a/naiveproxy/src/base/trace_event/trace_event_impl.h +++ b/naiveproxy/src/base/trace_event/trace_event_impl.h @@ -42,12 +42,7 @@ typedef base::RepeatingCallback MetadataFilterPredicate; struct TraceEventHandle { - uint32_t chunk_seq; - // These numbers of bits must be kept consistent with - // TraceBufferChunk::kMaxTrunkIndex and - // TraceBufferChunk::kTraceBufferChunkSize (in trace_buffer.h). - unsigned chunk_index : 26; - unsigned event_index : 6; + uint64_t dummy; }; class BASE_EXPORT TraceEvent { diff --git a/naiveproxy/src/base/trace_event/trace_id_helper.cc b/naiveproxy/src/base/trace_event/trace_id_helper.cc index 66f3a159bc..926b1479e4 100644 --- a/naiveproxy/src/base/trace_event/trace_id_helper.cc +++ b/naiveproxy/src/base/trace_event/trace_id_helper.cc @@ -7,8 +7,7 @@ #include "base/atomic_sequence_num.h" #include "base/rand_util.h" -namespace base { -namespace trace_event { +namespace base::trace_event { uint64_t GetNextGlobalTraceId() { static const uint64_t kPerProcessRandomValue = base::RandUint64(); @@ -16,5 +15,4 @@ uint64_t GetNextGlobalTraceId() { return kPerProcessRandomValue ^ static_cast(counter.GetNext()); } -} // namespace trace_event -} // namespace base +} // namespace base::trace_event diff --git a/naiveproxy/src/base/trace_event/trace_log.cc b/naiveproxy/src/base/trace_event/trace_log.cc index 43204b1f01..1b58dffbeb 100644 --- a/naiveproxy/src/base/trace_event/trace_log.cc +++ b/naiveproxy/src/base/trace_event/trace_log.cc @@ -9,6 +9,7 @@ #include "base/trace_event/trace_log.h" +#include #include #include #include @@ -28,7 +29,6 @@ #include "base/numerics/safe_conversions.h" #include "base/process/process.h" #include "base/process/process_metrics.h" -#include "base/ranges/algorithm.h" #include "base/run_loop.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_split.h" @@ -58,8 +58,7 @@ extern char __executable_start; #endif -namespace base { -namespace trace_event { +namespace base::trace_event { namespace { @@ -73,28 +72,6 @@ ThreadTicks ThreadNow() { : ThreadTicks(); } -template -void InitializeMetadataEvent(TraceEvent* trace_event, - PlatformThreadId thread_id, - const char* metadata_name, - const char* arg_name, - const T& value) { - if (!trace_event) { - return; - } - - TraceArguments args(arg_name, value); - base::TimeTicks now = TRACE_TIME_TICKS_NOW(); - ThreadTicks thread_now; - trace_event->Reset( - thread_id, now, thread_now, TRACE_EVENT_PHASE_METADATA, - TraceLog::GetInstance()->GetCategoryGroupEnabled("__metadata"), - metadata_name, - trace_event_internal::kGlobalScope, // scope - trace_event_internal::kNoId, // id - &args, TRACE_EVENT_FLAG_NONE); -} - void AddConvertableToTraceFormat( base::trace_event::ConvertableToTraceFormat* value, perfetto::protos::pbzero::DebugAnnotation* annotation) { @@ -258,6 +235,31 @@ void OnUpdateLegacyTraceEventDuration( perfetto::internal::TrackEventInternal::kDefaultTrack, timestamp); } +base::trace_event::TraceEventHandle AddTraceEventWithThreadIdAndTimestamps( + char phase, + const unsigned char* category_group_enabled, + const char* name, + const char* scope, + uint64_t id, + base::PlatformThreadId thread_id, + const base::TimeTicks& timestamp, + const base::ThreadTicks& thread_timestamp, + base::trace_event::TraceArguments* args, + unsigned int flags) { + base::trace_event::TraceEventHandle handle = {}; + if (!*category_group_enabled) { + return handle; + } + DCHECK(!timestamp.is_null()); + + base::trace_event::TraceEvent new_trace_event( + thread_id, timestamp, thread_timestamp, phase, category_group_enabled, + name, scope, id, args, flags); + + base::trace_event::OnAddLegacyTraceEvent(&new_trace_event); + return handle; +} + } // namespace #if BUILDFLAG(USE_PERFETTO_TRACE_PROCESSOR) @@ -359,8 +361,7 @@ void TraceLog::ResetForTesting() { self->InitializePerfettoIfNeeded(); } -TraceLog::TraceLog(int generation) - : process_sort_index_(0), process_id_(base::kNullProcessId) { +TraceLog::TraceLog(int generation) : process_id_(base::kNullProcessId) { #if BUILDFLAG(IS_NACL) // NaCl shouldn't expose the process id. SetProcessID(0); #else @@ -591,8 +592,6 @@ void TraceLog::SetDisabledWhileLocked() { return; } - AddMetadataEventsWhileLocked(); - TrackEvent::Flush(); // If the current thread has an active task runner, allow nested tasks to run // while stopping the session. This is needed by some tests, e.g., to allow @@ -617,9 +616,8 @@ void TraceLog::AddEnabledStateObserver(EnabledStateObserver* listener) { void TraceLog::RemoveEnabledStateObserver(EnabledStateObserver* listener) { AutoLock lock(observers_lock_); - enabled_state_observers_.erase( - ranges::remove(enabled_state_observers_, listener), - enabled_state_observers_.end()); + auto removed = std::ranges::remove(enabled_state_observers_, listener); + enabled_state_observers_.erase(removed.begin(), removed.end()); } void TraceLog::AddOwnedEnabledStateObserver( @@ -700,10 +698,10 @@ void TraceLog::FlushInternal(const TraceLog::OutputCallback& cb, trace_processor_ = perfetto::trace_processor::TraceProcessorStorage::CreateInstance( processor_config); - json_output_writer_.reset(new JsonStringOutputWriter( + json_output_writer_ = std::make_unique( use_worker_thread ? SingleThreadTaskRunner::GetCurrentDefault() : nullptr, - cb)); + cb); } else { proto_output_callback_ = std::move(cb); } @@ -760,178 +758,10 @@ void TraceLog::OnTraceData(const char* data, size_t size, bool has_more) { } #endif // BUILDFLAG(USE_PERFETTO_TRACE_PROCESSOR) -TraceEventHandle TraceLog::AddTraceEvent( - char phase, - const unsigned char* category_group_enabled, - const char* name, - const char* scope, - uint64_t id, - TraceArguments* args, - unsigned int flags) { - auto thread_id = base::PlatformThread::CurrentId(); - base::TimeTicks now = TRACE_TIME_TICKS_NOW(); - return AddTraceEventWithThreadIdAndTimestamp( - phase, category_group_enabled, name, scope, id, - trace_event_internal::kNoId, // bind_id - thread_id, now, args, flags); -} - -TraceEventHandle TraceLog::AddTraceEventWithProcessId( - char phase, - const unsigned char* category_group_enabled, - const char* name, - const char* scope, - uint64_t id, - ProcessId process_id, - TraceArguments* args, - unsigned int flags) { - base::TimeTicks now = TRACE_TIME_TICKS_NOW(); - return AddTraceEventWithThreadIdAndTimestamp( - phase, category_group_enabled, name, scope, id, - trace_event_internal::kNoId, // bind_id - static_cast(process_id), now, args, - flags | TRACE_EVENT_FLAG_HAS_PROCESS_ID); -} - -TraceEventHandle TraceLog::AddTraceEventWithThreadIdAndTimestamp( - char phase, - const unsigned char* category_group_enabled, - const char* name, - const char* scope, - uint64_t id, - uint64_t bind_id, - PlatformThreadId thread_id, - const TimeTicks& timestamp, - TraceArguments* args, - unsigned int flags) { - ThreadTicks thread_now; - // If timestamp is provided explicitly, don't record thread time as it would - // be for the wrong timestamp. Similarly, if we record an event for another - // process or thread, we shouldn't report the current thread's thread time. - if (!(flags & TRACE_EVENT_FLAG_EXPLICIT_TIMESTAMP || - flags & TRACE_EVENT_FLAG_HAS_PROCESS_ID || - thread_id != PlatformThread::CurrentId())) { - thread_now = ThreadNow(); - } - return AddTraceEventWithThreadIdAndTimestamps( - phase, category_group_enabled, name, scope, id, bind_id, thread_id, - timestamp, thread_now, args, flags); -} - -TraceEventHandle TraceLog::AddTraceEventWithThreadIdAndTimestamps( - char phase, - const unsigned char* category_group_enabled, - const char* name, - const char* scope, - uint64_t id, - uint64_t bind_id, - PlatformThreadId thread_id, - const TimeTicks& timestamp, - const ThreadTicks& thread_timestamp, - TraceArguments* args, - unsigned int flags) NO_THREAD_SAFETY_ANALYSIS { - TraceEventHandle handle = {0, 0, 0}; - if (!*category_group_enabled) { - return handle; - } - DCHECK(!timestamp.is_null()); - - TraceEvent new_trace_event(thread_id, timestamp, thread_timestamp, phase, - category_group_enabled, name, scope, id, args, - flags); - - OnAddLegacyTraceEvent(&new_trace_event); - return handle; -} - -void TraceLog::UpdateTraceEventDuration( - const unsigned char* category_group_enabled, - const char* name, - TraceEventHandle handle) { - if (!*category_group_enabled) { - return; - } - - OnUpdateLegacyTraceEventDuration( - category_group_enabled, name, base::PlatformThread::CurrentId(), - /*explicit_timestamps=*/false, - base::subtle::TimeTicksNowIgnoringOverride(), ThreadNow()); -} - -template -void TraceLog::AddMetadataEventWhileLocked(PlatformThreadId thread_id, - const char* metadata_name, - const char* arg_name, - const T& value) { - TraceEvent trace_event; - InitializeMetadataEvent(&trace_event, thread_id, metadata_name, arg_name, - value); - OnAddLegacyTraceEvent(&trace_event); -} - -void TraceLog::AddMetadataEventsWhileLocked() { -#if !BUILDFLAG(IS_NACL) // NaCl shouldn't expose the process id. - AddMetadataEventWhileLocked(0, "num_cpus", "number", - base::SysInfo::NumberOfProcessors()); -#endif - - auto current_thread_id = base::PlatformThread::CurrentId(); - if (process_sort_index_ != 0) { - AddMetadataEventWhileLocked(current_thread_id, "process_sort_index", - "sort_index", process_sort_index_); - } - -#if BUILDFLAG(IS_ANDROID) - AddMetadataEventWhileLocked(current_thread_id, "chrome_library_address", - "start_address", - base::StringPrintf("%p", &__executable_start)); - base::debug::ElfBuildIdBuffer build_id; - size_t build_id_length = - base::debug::ReadElfBuildId(&__executable_start, true, build_id); - if (build_id_length > 0) { - AddMetadataEventWhileLocked(current_thread_id, "chrome_library_module", - "id", std::string(build_id)); - } -#endif - - if (!process_labels_.empty()) { - std::vector labels; - for (const auto& it : process_labels_) { - labels.push_back(it.second); - } - AddMetadataEventWhileLocked(current_thread_id, "process_labels", "labels", - base::JoinString(labels, ",")); - } - - // Thread sort indices. - for (const auto& it : thread_sort_indices_) { - if (it.second == 0) { - continue; - } - AddMetadataEventWhileLocked(it.first, "thread_sort_index", "sort_index", - it.second); - } -} - void TraceLog::SetProcessID(ProcessId process_id) { process_id_ = process_id; } -void TraceLog::SetProcessSortIndex(int sort_index) { - AutoLock lock(lock_); - process_sort_index_ = sort_index; -} - -void TraceLog::OnSetProcessName(const std::string& process_name) { - if (perfetto::Tracing::IsInitialized()) { - auto track = perfetto::ProcessTrack::Current(); - auto desc = track.Serialize(); - desc.mutable_process()->set_process_name(process_name); - desc.mutable_process()->set_pid(static_cast(process_id_)); - TrackEvent::SetTrackDescriptor(track, std::move(desc)); - } -} - int TraceLog::GetNewProcessLabelId() { AutoLock lock(lock_); return next_process_label_id_++; @@ -943,13 +773,6 @@ void TraceLog::UpdateProcessLabel(int label_id, return RemoveProcessLabel(label_id); } - if (perfetto::Tracing::IsInitialized()) { - auto track = perfetto::ProcessTrack::Current(); - auto desc = track.Serialize(); - desc.mutable_process()->add_process_labels(current_label); - TrackEvent::SetTrackDescriptor(track, std::move(desc)); - } - AutoLock lock(lock_); process_labels_[label_id] = current_label; } @@ -959,11 +782,6 @@ void TraceLog::RemoveProcessLabel(int label_id) { process_labels_.erase(label_id); } -void TraceLog::SetThreadSortIndex(PlatformThreadId thread_id, int sort_index) { - AutoLock lock(lock_); - thread_sort_indices_[thread_id] = sort_index; -} - size_t TraceLog::GetObserverCountForTest() const { AutoLock lock(observers_lock_); return enabled_state_observers_.size(); @@ -1032,8 +850,7 @@ void TraceLog::OnStop(const perfetto::DataSourceBase::StopArgs& args) { } } -} // namespace trace_event -} // namespace base +} // namespace base::trace_event namespace trace_event_internal { @@ -1045,8 +862,12 @@ base::trace_event::TraceEventHandle AddTraceEvent( uint64_t id, base::trace_event::TraceArguments* args, unsigned int flags) { - return base::trace_event::TraceLog::GetInstance()->AddTraceEvent( - phase, category_group_enabled, name, scope, id, args, flags); + auto thread_id = base::PlatformThread::CurrentId(); + base::TimeTicks now = TRACE_TIME_TICKS_NOW(); + return AddTraceEventWithThreadIdAndTimestamp( + phase, category_group_enabled, name, scope, id, + trace_event_internal::kNoId, // bind_id + thread_id, now, args, flags); } base::trace_event::TraceEventHandle AddTraceEventWithProcessId( @@ -1058,8 +879,12 @@ base::trace_event::TraceEventHandle AddTraceEventWithProcessId( base::ProcessId process_id, base::trace_event::TraceArguments* args, unsigned int flags) { - return base::trace_event::TraceLog::GetInstance()->AddTraceEventWithProcessId( - phase, category_group_enabled, name, scope, id, process_id, args, flags); + base::TimeTicks now = TRACE_TIME_TICKS_NOW(); + return AddTraceEventWithThreadIdAndTimestamp( + phase, category_group_enabled, name, scope, id, + trace_event_internal::kNoId, // bind_id + static_cast(process_id), now, args, + flags | TRACE_EVENT_FLAG_HAS_PROCESS_ID); } base::trace_event::TraceEventHandle AddTraceEventWithThreadIdAndTimestamp( @@ -1073,10 +898,18 @@ base::trace_event::TraceEventHandle AddTraceEventWithThreadIdAndTimestamp( const base::TimeTicks& timestamp, base::trace_event::TraceArguments* args, unsigned int flags) { - return base::trace_event::TraceLog::GetInstance() - ->AddTraceEventWithThreadIdAndTimestamp( - phase, category_group_enabled, name, scope, id, bind_id, thread_id, - timestamp, args, flags); + base::ThreadTicks thread_now; + // If timestamp is provided explicitly, don't record thread time as it would + // be for the wrong timestamp. Similarly, if we record an event for another + // process or thread, we shouldn't report the current thread's thread time. + if (!(flags & TRACE_EVENT_FLAG_EXPLICIT_TIMESTAMP || + flags & TRACE_EVENT_FLAG_HAS_PROCESS_ID || + thread_id != base::PlatformThread::CurrentId())) { + thread_now = base::trace_event::ThreadNow(); + } + return base::trace_event::AddTraceEventWithThreadIdAndTimestamps( + phase, category_group_enabled, name, scope, id, thread_id, timestamp, + thread_now, args, flags); } base::trace_event::TraceEventHandle AddTraceEventWithThreadIdAndTimestamps( @@ -1089,18 +922,23 @@ base::trace_event::TraceEventHandle AddTraceEventWithThreadIdAndTimestamps( const base::TimeTicks& timestamp, const base::ThreadTicks& thread_timestamp, unsigned int flags) { - return base::trace_event::TraceLog::GetInstance() - ->AddTraceEventWithThreadIdAndTimestamps( - phase, category_group_enabled, name, scope, id, - trace_event_internal::kNoId, // bind_id, - thread_id, timestamp, thread_timestamp, nullptr, flags); + return base::trace_event::AddTraceEventWithThreadIdAndTimestamps( + phase, category_group_enabled, name, scope, id, thread_id, timestamp, + thread_timestamp, nullptr, flags); } void UpdateTraceEventDuration(const unsigned char* category_group_enabled, const char* name, base::trace_event::TraceEventHandle handle) { - return base::trace_event::TraceLog::GetInstance()->UpdateTraceEventDuration( - category_group_enabled, name, handle); + if (!*category_group_enabled) { + return; + } + + base::trace_event::OnUpdateLegacyTraceEventDuration( + category_group_enabled, name, base::PlatformThread::CurrentId(), + /*explicit_timestamps=*/false, + base::subtle::TimeTicksNowIgnoringOverride(), + base::trace_event::ThreadNow()); } } // namespace trace_event_internal diff --git a/naiveproxy/src/base/trace_event/trace_log.h b/naiveproxy/src/base/trace_event/trace_log.h index 9e3cd28cab..45c87e9dd1 100644 --- a/naiveproxy/src/base/trace_event/trace_log.h +++ b/naiveproxy/src/base/trace_event/trace_log.h @@ -172,53 +172,6 @@ class BASE_EXPORT TraceLog : public perfetto::TrackEventSessionObserver { static const char* GetCategoryGroupName( const unsigned char* category_group_enabled); - // Called by TRACE_EVENT* macros, don't call this directly. - // If |copy| is set, |name|, |arg_name1| and |arg_name2| will be deep copied - // into the event; see "Memory scoping note" and TRACE_EVENT_COPY_XXX above. - TraceEventHandle AddTraceEvent(char phase, - const unsigned char* category_group_enabled, - const char* name, - const char* scope, - uint64_t id, - TraceArguments* args, - unsigned int flags); - TraceEventHandle AddTraceEventWithProcessId( - char phase, - const unsigned char* category_group_enabled, - const char* name, - const char* scope, - uint64_t id, - ProcessId process_id, - TraceArguments* args, - unsigned int flags); - TraceEventHandle AddTraceEventWithThreadIdAndTimestamp( - char phase, - const unsigned char* category_group_enabled, - const char* name, - const char* scope, - uint64_t id, - uint64_t bind_id, - PlatformThreadId thread_id, - const TimeTicks& timestamp, - TraceArguments* args, - unsigned int flags); - TraceEventHandle AddTraceEventWithThreadIdAndTimestamps( - char phase, - const unsigned char* category_group_enabled, - const char* name, - const char* scope, - uint64_t id, - uint64_t bind_id, - PlatformThreadId thread_id, - const TimeTicks& timestamp, - const ThreadTicks& thread_timestamp, - TraceArguments* args, - unsigned int flags); - - void UpdateTraceEventDuration(const unsigned char* category_group_enabled, - const char* name, - TraceEventHandle handle); - ProcessId process_id() const { return process_id_; } std::unordered_map process_labels() const { @@ -232,25 +185,12 @@ class BASE_EXPORT TraceLog : public perfetto::TrackEventSessionObserver { void SetProcessID(ProcessId process_id); - // Process sort indices, if set, override the order of a process will appear - // relative to other processes in the trace viewer. Processes are sorted first - // on their sort index, ascending, then by their name, and then tid. - void SetProcessSortIndex(int sort_index); - - // Helper function to set process_name in base::CurrentProcess. - void OnSetProcessName(const std::string& process_name); - // Processes can have labels in addition to their names. Use labels, for // instance, to list out the web page titles that a process is handling. int GetNewProcessLabelId(); void UpdateProcessLabel(int label_id, const std::string& current_label); void RemoveProcessLabel(int label_id); - // Thread sort indices, if set, override the order of a thread will appear - // within its process in the trace viewer. Threads are sorted first on their - // sort index, ascending, then by their name, and then tid. - void SetThreadSortIndex(PlatformThreadId thread_id, int sort_index); - size_t GetObserverCountForTest() const; struct TrackEventSession { @@ -283,13 +223,6 @@ class BASE_EXPORT TraceLog : public perfetto::TrackEventSessionObserver { explicit TraceLog(int generation); ~TraceLog() override; - void AddMetadataEventsWhileLocked() EXCLUSIVE_LOCKS_REQUIRED(lock_); - template - void AddMetadataEventWhileLocked(PlatformThreadId thread_id, - const char* metadata_name, - const char* arg_name, - const T& value) - EXCLUSIVE_LOCKS_REQUIRED(lock_); void SetDisabledWhileLocked() EXCLUSIVE_LOCKS_REQUIRED(lock_); @@ -317,8 +250,6 @@ class BASE_EXPORT TraceLog : public perfetto::TrackEventSessionObserver { int next_process_label_id_ GUARDED_BY(lock_) = 0; std::unordered_map process_labels_; - int process_sort_index_; - std::unordered_map thread_sort_indices_; ProcessId process_id_; diff --git a/naiveproxy/src/base/trace_event/tracing_agent.cc b/naiveproxy/src/base/trace_event/tracing_agent.cc index 34214fde9d..0999295eba 100644 --- a/naiveproxy/src/base/trace_event/tracing_agent.cc +++ b/naiveproxy/src/base/trace_event/tracing_agent.cc @@ -4,8 +4,7 @@ #include "base/trace_event/tracing_agent.h" -namespace base { -namespace trace_event { +namespace base::trace_event { TracingAgent::~TracingAgent() = default; @@ -19,5 +18,4 @@ void TracingAgent::RecordClockSyncMarker( DCHECK(SupportsExplicitClockSync()); } -} // namespace trace_event -} // namespace base +} // namespace base::trace_event diff --git a/naiveproxy/src/base/tracing/README.md b/naiveproxy/src/base/tracing/README.md index da24d17f1d..70cdc455fb 100644 --- a/naiveproxy/src/base/tracing/README.md +++ b/naiveproxy/src/base/tracing/README.md @@ -8,8 +8,7 @@ recording and a more compact, efficient, and stable trace encoding. The Perfetto library itself lives in [AOSP](https://android.googlesource.com/platform/external/perfetto/) and is rolled in -[/third_party/chrome/](https://cs.chromium.org/chromium/src/third_party/perfetto/). Progress is -tracked on https://crbug.com/1006541. +[/third_party/perfetto/](https://cs.chromium.org/chromium/src/third_party/perfetto/). The code in this directory connects Chrome to Perfetto's [tracing SDK](https://perfetto.dev/docs/instrumentation/tracing-sdk), which implements trace event macros on @@ -21,3 +20,6 @@ For more details, see [Perfetto's documentation](https://docs.perfetto.dev), [Ty Chrome](https://docs.google.com/document/d/1f7tt4cb-JcA5bQFR1oXk60ncJPpkL02_Hi_Bc6MfTQk/edit#), and [Typed trace events in //base](https://docs.google.com/document/d/1UQ4Ez7B-TeowijOUuMXuoWj1amZcQ7E2abt3s4jaAEY/edit#). + +For a list of Chromium's tracing categories, see +[base/trace_event/builtin_categories.h](https://cs.chromium.org/chromium/src/base/trace_event/builtin_categories.h). diff --git a/naiveproxy/src/base/tracing/perfetto_platform.cc b/naiveproxy/src/base/tracing/perfetto_platform.cc index dc7fee354c..513edb7e01 100644 --- a/naiveproxy/src/base/tracing/perfetto_platform.cc +++ b/naiveproxy/src/base/tracing/perfetto_platform.cc @@ -21,8 +21,7 @@ #include "third_party/perfetto/include/perfetto/ext/base/thread_task_runner.h" #endif -namespace base { -namespace tracing { +namespace base::tracing { namespace { constexpr char kProcessNamePrefix[] = "org.chromium-"; @@ -94,5 +93,4 @@ perfetto::base::PlatformThreadId PerfettoPlatform::GetCurrentThreadId() { return base::PlatformThread::CurrentId(); } -} // namespace tracing -} // namespace base +} // namespace base::tracing diff --git a/naiveproxy/src/base/tracing/perfetto_task_runner.cc b/naiveproxy/src/base/tracing/perfetto_task_runner.cc index 4eb32e2b39..e90ca9275e 100644 --- a/naiveproxy/src/base/tracing/perfetto_task_runner.cc +++ b/naiveproxy/src/base/tracing/perfetto_task_runner.cc @@ -19,8 +19,7 @@ #include "base/tracing/tracing_tls.h" #include "build/build_config.h" -namespace base { -namespace tracing { +namespace base::tracing { PerfettoTaskRunner::PerfettoTaskRunner( scoped_refptr task_runner) @@ -128,5 +127,4 @@ PerfettoTaskRunner::FDControllerAndCallback::~FDControllerAndCallback() = default; #endif // (BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_NACL)) || BUILDFLAG(IS_FUCHSIA) -} // namespace tracing -} // namespace base +} // namespace base::tracing diff --git a/naiveproxy/src/base/tracing/protos/chrome_track_event.proto b/naiveproxy/src/base/tracing/protos/chrome_track_event.proto index 3d57caa6e2..72f2a4eb35 100644 --- a/naiveproxy/src/base/tracing/protos/chrome_track_event.proto +++ b/naiveproxy/src/base/tracing/protos/chrome_track_event.proto @@ -795,6 +795,7 @@ message RendererMainThreadTaskExecution { TASK_TYPE_CLIPBOARD = 85; TASK_TYPE_MACHINE_LEARNING = 86; TASK_TYPE_MAIN_THREAD_TASK_QUEUE_V8_BEST_EFFORT = 87; + TASK_TYPE_INTERNAL_AUTOFILL = 88; } enum FrameType { @@ -1004,8 +1005,8 @@ message SequenceManagerTask { WORKER_UNPAUSABLE_TQ = 50; WORKER_WEB_SCHEDULING_TQ = 51; - UI_USER_BLOCKING_DEFERRABLE_TQ = 52; - IO_USER_BLOCKING_DEFERRABLE_TQ = 53; + UI_USER_BLOCKING_DEFERRABLE_TQ = 52 [deprecated = true]; + IO_USER_BLOCKING_DEFERRABLE_TQ = 53 [deprecated = true]; UI_BEFORE_UNLOAD_BROWSER_RESPONSE_TQ = 54; IO_BEFORE_UNLOAD_BROWSER_RESPONSE_TQ = 55; @@ -1280,6 +1281,13 @@ message ScrollDeltas { // The array of predicted deltas of inputs which were shown together in one // GPU frame. repeated float segregated_predicted_deltas_in_gpu_frame_y = 14; + + // Data for overscrolls. + // Whether any of the scroll delta was unused. + optional bool did_overscroll_root = 15; + // The amount of the scroll delta that was not used for scrolling. + optional float unused_delta_x = 16; + optional float unused_delta_y = 17; } // Debug information for system layer of audio rendering on Windows. diff --git a/naiveproxy/src/base/tracing/stdlib/chrome/chrome_scrolls.sql b/naiveproxy/src/base/tracing/stdlib/chrome/chrome_scrolls.sql index 7d4095885e..6ed57be964 100644 --- a/naiveproxy/src/base/tracing/stdlib/chrome/chrome_scrolls.sql +++ b/naiveproxy/src/base/tracing/stdlib/chrome/chrome_scrolls.sql @@ -10,7 +10,7 @@ INCLUDE PERFETTO MODULE chrome.scroll_jank.utils; -- Ties together input (`LatencyInfo.Flow`) and frame (`Graphics.Pipeline`) -- trace events. Only covers input events of the `GESTURE_SCROLL_UPDATE_EVENT` -- type. -CREATE PERFETTO TABLE _chrome_scroll_update_refs( +CREATE PERFETTO TABLE chrome_scroll_update_refs( -- Id of the Chrome input pipeline (`LatencyInfo.Flow`). scroll_update_latency_id LONG, -- Id of the touch move input corresponding to this scroll update. @@ -20,7 +20,8 @@ CREATE PERFETTO TABLE _chrome_scroll_update_refs( -- Id of the frame pipeline (`Graphics.Pipeline`), pre-surface aggregation. surface_frame_id LONG, -- Id of the frame pipeline (`Graphics.Pipeline`), post-surface aggregation. - display_trace_id LONG) + display_trace_id LONG +) AS SELECT scroll_update.latency_id AS scroll_update_latency_id, @@ -31,14 +32,14 @@ SELECT ) AS presentation_latency_id, chrome_graphics_pipeline_inputs_to_surface_frames.surface_frame_trace_id AS surface_frame_id, - chrome_graphics_pipeline_aggregated_frames.display_trace_id + chrome_surface_frame_id_to_first_display_id.display_trace_id FROM chrome_inputs scroll_update LEFT JOIN chrome_graphics_pipeline_inputs_to_surface_frames USING (latency_id) -LEFT JOIN chrome_graphics_pipeline_aggregated_frames +LEFT JOIN chrome_surface_frame_id_to_first_display_id ON - chrome_graphics_pipeline_aggregated_frames.surface_frame_trace_id + chrome_surface_frame_id_to_first_display_id.surface_frame_trace_id = chrome_graphics_pipeline_inputs_to_surface_frames.surface_frame_trace_id LEFT JOIN chrome_touch_move_to_scroll_update ON @@ -57,8 +58,9 @@ SELECT refs.scroll_update_latency_id AS id, refs.presentation_latency_id AS presented_in_frame_id, -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - chrome_event_latency.is_presented AS is_presented, - chrome_event_latency.is_janky_scrolled_frame AS is_janky, + chrome_event_latency.scroll_id, + chrome_event_latency.is_presented, + chrome_event_latency.is_janky, chrome_event_latency.event_type = 'INERTIAL_GESTURE_SCROLL_UPDATE' AS is_inertial, chrome_event_latency.event_type @@ -92,9 +94,9 @@ SELECT compositor_coalesced_input_handled_step.ts + compositor_coalesced_input_handled_step.dur AS compositor_coalesced_input_handled_end_ts -FROM _chrome_scroll_update_refs refs +FROM chrome_scroll_update_refs refs -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -LEFT JOIN chrome_event_latencies chrome_event_latency +LEFT JOIN chrome_gesture_scroll_updates chrome_event_latency ON chrome_event_latency.scroll_update_id = refs.scroll_update_latency_id -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- LEFT JOIN chrome_input_pipeline_steps touch_move_received_step @@ -134,11 +136,13 @@ LEFT JOIN chrome_input_pipeline_steps compositor_coalesced_input_handled_step -- Timestamps and durations for the input-associated (before coalescing inputs -- into a frame) stages of a scroll. -CREATE PERFETTO TABLE chrome_scroll_update_input_info( +CREATE PERFETTO TABLE chrome_scroll_update_input_pipeline( -- Id of the `LatencyInfo.Flow` slices corresponding to this scroll event. id LONG, + -- Id of the scroll this scroll update belongs to. + scroll_id LONG, -- Id of the frame that this input was presented in. Can be joined with - -- `chrome_scroll_update_frame_info.id`. + -- `chrome_scroll_update_frame_pipeline.id`. presented_in_frame_id LONG, -- Whether this input event was presented. is_presented BOOL, @@ -203,6 +207,7 @@ WITH processed_timestamps_and_metadata AS ( SELECT id, + scroll_id, presented_in_frame_id, is_presented, is_janky, @@ -218,6 +223,16 @@ processed_timestamps_and_metadata AS ( -- Timestamps generation_ts, touch_move_received_ts, + -- TODO(b:385160424): this is a workaround for cases when + -- generation time is later than the input time. + MAX( + IIF( + is_inertial AND touch_move_received_ts IS NULL, + scroll_update_created_ts, + touch_move_received_ts + ), + generation_ts) + AS browser_main_received_ts, -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Ids scroll_update_created_slice_id, @@ -242,6 +257,7 @@ processed_timestamps_and_metadata AS ( ) SELECT id, + scroll_id, presented_in_frame_id, is_presented, is_janky, @@ -254,16 +270,12 @@ SELECT generation_ts, -- Flings don't have a touch move event so make GenerationToBrowserMain span -- all the way to the creation of the gesture scroll update. - IIF( - is_inertial AND touch_move_received_ts IS NULL, - scroll_update_created_ts, - touch_move_received_ts - ) - generation_ts AS generation_to_browser_main_dur, + browser_main_received_ts - generation_ts AS generation_to_browser_main_dur, -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- browser_utid, touch_move_received_slice_id, touch_move_received_ts, - scroll_update_created_ts - touch_move_received_ts + scroll_update_created_ts - MAX(touch_move_received_ts, generation_ts) AS touch_move_processing_dur, -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- On `browser_utid`. @@ -275,8 +287,11 @@ SELECT -- No applicable utid (duration between two threads). -- No applicable slice id (duration between two threads). scroll_update_created_end_ts, - -- TODO(b:380868337): This is sometimes negative; check/fix this. - compositor_dispatch_ts - scroll_update_created_end_ts + -- TODO(b:385161677): use the start + -- of the STEP_SEND_DISPATCH_EVENT_MOJO_MESSAGE step + -- instead of scroll_update_created_end_ts. + MAX(compositor_dispatch_ts, scroll_update_created_end_ts) + - scroll_update_created_end_ts AS browser_to_compositor_delay_dur, -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- compositor_utid, @@ -309,6 +324,7 @@ CREATE PERFETTO TABLE _scroll_update_frame_timestamps_and_metadata AS SELECT refs.scroll_update_latency_id AS id, + refs.display_trace_id, -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- chrome_event_latency.vsync_interval_ms AS vsync_interval_ms, -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- @@ -317,6 +333,13 @@ SELECT AS compositor_resample_task_ts, compositor_resample_step.ts AS compositor_resample_ts, -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + compositor_receive_begin_frame_step.id + AS compositor_receive_begin_frame_slice_id, + compositor_receive_begin_frame_step.task_start_time_ts + AS compositor_receive_begin_frame_task_ts, + compositor_receive_begin_frame_step.ts + AS compositor_receive_begin_frame_ts, + -- compositor_generate_compositor_frame_step.id AS compositor_generate_compositor_frame_slice_id, compositor_generate_compositor_frame_step.task_start_time_ts @@ -361,9 +384,8 @@ SELECT chrome_event_latency.buffer_available_timestamp, chrome_event_latency.buffer_ready_timestamp, chrome_event_latency.latch_timestamp, - chrome_event_latency.swap_end_timestamp, chrome_event_latency.presentation_timestamp -FROM _chrome_scroll_update_refs refs +FROM chrome_scroll_update_refs refs LEFT JOIN chrome_event_latencies chrome_event_latency ON chrome_event_latency.scroll_update_id = refs.presentation_latency_id -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- @@ -374,6 +396,15 @@ LEFT JOIN chrome_input_pipeline_steps compositor_resample_step AND compositor_resample_step.input_type = 'GESTURE_SCROLL_UPDATE_EVENT' -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +LEFT JOIN + chrome_graphics_pipeline_surface_frame_steps + compositor_receive_begin_frame_step + ON + compositor_receive_begin_frame_step.surface_frame_trace_id + = refs.surface_frame_id + AND compositor_receive_begin_frame_step.step + = 'STEP_RECEIVE_BEGIN_FRAME' +-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- LEFT JOIN chrome_graphics_pipeline_surface_frame_steps compositor_generate_compositor_frame_step @@ -423,15 +454,20 @@ WHERE refs.scroll_update_latency_id = refs.presentation_latency_id; -- Timestamps and durations for the frame-associated (after coalescing inputs -- into a frame) stages of a scroll. -CREATE PERFETTO TABLE chrome_scroll_update_frame_info( +CREATE PERFETTO TABLE chrome_scroll_update_frame_pipeline( -- Id of the `LatencyInfo.Flow` slices corresponding to this scroll event. id LONG, + -- Id of the aggregated frame this scroll update was presented in. + display_trace_id LONG, -- Vsync interval (in milliseconds). vsync_interval_ms DOUBLE, -- Slice id for the `STEP_RESAMPLE_SCROLL_EVENTS` slice. compositor_resample_slice_id LONG, -- Timestamp for the `STEP_RESAMPLE_SCROLL_EVENTS` slice. compositor_resample_ts TIMESTAMP, + -- Timestamp for the `STEP_RECEIVE_BEGIN_FRAME` slice or the + -- containing task (if available). + compositor_receive_begin_frame_ts TIMESTAMP, -- Slice id for the `STEP_GENERATE_COMPOSITOR_FRAME` slice. compositor_generate_compositor_frame_slice_id LONG, -- Timestamp for the `STEP_GENERATE_COMPOSITOR_FRAME` slice or the @@ -490,12 +526,10 @@ CREATE PERFETTO TABLE chrome_scroll_update_frame_info( viz_swap_buffers_to_latch_dur DURATION, -- Timestamp for `EventLatency`'s `LatchToSwapEnd` step. latch_timestamp TIMESTAMP, - -- Duration of `EventLatency`'s `LatchToSwapEnd` step. - viz_latch_to_swap_end_dur DURATION, - -- Timestamp for `EventLatency`'s `SwapEndToPresentationCompositorFrame` step. - swap_end_timestamp TIMESTAMP, - -- Duration of `EventLatency`'s `SwapEndToPresentationCompositorFrame` step. - swap_end_to_presentation_dur DURATION, + -- Duration of either `EventLatency`'s `LatchToSwapEnd` + + -- `SwapEndToPresentationCompositorFrame` steps or its `LatchToPresentation` + -- step. + viz_latch_to_presentation_dur DURATION, -- Presentation timestamp for the frame. presentation_timestamp TIMESTAMP ) AS @@ -503,6 +537,7 @@ WITH processed_timestamps_and_metadata AS ( SELECT id, + display_trace_id, vsync_interval_ms, -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Ids @@ -513,6 +548,14 @@ processed_timestamps_and_metadata AS ( compositor_resample_ts) AS compositor_resample_ts, -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Ids + compositor_receive_begin_frame_slice_id, + -- Timestamps + COALESCE( + compositor_receive_begin_frame_task_ts, + compositor_receive_begin_frame_ts) + AS compositor_receive_begin_frame_ts, + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- Ids compositor_generate_compositor_frame_slice_id, -- Timestamps COALESCE( @@ -556,12 +599,12 @@ processed_timestamps_and_metadata AS ( -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Timestamps latch_timestamp, - swap_end_timestamp, presentation_timestamp FROM _scroll_update_frame_timestamps_and_metadata ) SELECT id, + display_trace_id, -- TODO(b:381062412): This is sometimes unexpectedly 0; check/fix this. vsync_interval_ms, -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- @@ -570,6 +613,9 @@ SELECT compositor_resample_ts, -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- On `compositor_utid`. + compositor_receive_begin_frame_ts, + -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + -- On `compositor_utid`. compositor_generate_compositor_frame_slice_id, -- TODO(b:380868337): This is sometimes unexpectedly null; check/fix this. compositor_generate_compositor_frame_ts, @@ -621,10 +667,7 @@ SELECT latch_timestamp - viz_swap_buffers_end_ts AS viz_swap_buffers_to_latch_dur, -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- latch_timestamp, - swap_end_timestamp - latch_timestamp AS viz_latch_to_swap_end_dur, - -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - swap_end_timestamp, - presentation_timestamp - swap_end_timestamp AS swap_end_to_presentation_dur, + presentation_timestamp - latch_timestamp AS viz_latch_to_presentation_dur, -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- presentation_timestamp FROM processed_timestamps_and_metadata; @@ -654,47 +697,15 @@ CREATE PERFETTO TABLE chrome_scrolls( -- corresponding scroll id. gesture_scroll_end_ts TIMESTAMP ) AS -WITH all_scrolls AS ( - SELECT - event_type AS name, - ts, - dur, - scroll_id - FROM chrome_gesture_scroll_events -), -scroll_starts AS ( - SELECT - scroll_id, - MIN(ts) AS gesture_scroll_begin_ts - FROM all_scrolls - WHERE name = 'GESTURE_SCROLL_BEGIN' - GROUP BY scroll_id -), -scroll_ends AS ( - SELECT - scroll_id, - MAX(ts) AS gesture_scroll_end_ts - FROM all_scrolls - WHERE name IN ( - 'GESTURE_SCROLL_UPDATE', - 'FIRST_GESTURE_SCROLL_UPDATE', - 'INERTIAL_GESTURE_SCROLL_UPDATE', - 'GESTURE_SCROLL_END' - ) - GROUP BY scroll_id -) SELECT - sa.scroll_id AS id, + scroll_id AS id, MIN(ts) AS ts, cast_int!(MAX(ts + dur) - MIN(ts)) AS dur, - ss.gesture_scroll_begin_ts AS gesture_scroll_begin_ts, - se.gesture_scroll_end_ts AS gesture_scroll_end_ts -FROM all_scrolls sa - LEFT JOIN scroll_starts ss ON - sa.scroll_id = ss.scroll_id - LEFT JOIN scroll_ends se ON - sa.scroll_id = se.scroll_id -GROUP BY sa.scroll_id; + -- TODO(b:389055670): Remove this once the UI doesn't rely on it. + NULL AS gesture_scroll_begin_ts, + NULL AS gesture_scroll_end_ts +FROM chrome_gesture_scroll_updates +GROUP BY scroll_id; -- Timestamps and durations for the critical path stages during scrolling. -- This table covers both the input-associated (before coalescing inputs into a @@ -714,7 +725,7 @@ GROUP BY sa.scroll_id; -- V V -- +-----------------------+ +-----------------------+ -- | chrome_scroll_update_ | | chrome_scroll_update_ | --- | INPUT_info | | FRAME_info | +-- | INPUT_pipeline | | FRAME_pipeline | -- +-----------+-----------+ +-----------+-----------+ -- | | -- +--------------+--------------+ @@ -726,6 +737,9 @@ GROUP BY sa.scroll_id; CREATE PERFETTO TABLE chrome_scroll_update_info( -- Id of the `LatencyInfo.Flow` slices corresponding to this scroll event. id LONG, + -- Id (`display_trace_id`) of the aggregated frame which this scroll update + -- was presented in. + frame_display_id LONG, -- Vsync interval (in milliseconds). vsync_interval_ms DOUBLE, -- Whether this input event was presented. @@ -847,17 +861,16 @@ CREATE PERFETTO TABLE chrome_scroll_update_info( viz_swap_buffers_to_latch_dur DURATION, -- Timestamp for `EventLatency`'s `LatchToSwapEnd` step. latch_timestamp TIMESTAMP, - -- Duration of `EventLatency`'s `LatchToSwapEnd` step. - viz_latch_to_swap_end_dur DURATION, - -- Timestamp for `EventLatency`'s `SwapEndToPresentationCompositorFrame` step. - swap_end_timestamp TIMESTAMP, - -- Duration of `EventLatency`'s `SwapEndToPresentationCompositorFrame` step. - swap_end_to_presentation_dur DURATION, + -- Duration of either `EventLatency`'s `LatchToSwapEnd` + + -- `SwapEndToPresentationCompositorFrame` steps or its `LatchToPresentation` + -- step. + viz_latch_to_presentation_dur DURATION, -- Presentation timestamp for the frame. presentation_timestamp TIMESTAMP) AS SELECT input.id, + frame.display_trace_id AS frame_display_id, -- TODO(b:381062412): This is sometimes unexpectedly 0; check/fix this. frame.vsync_interval_ms, input.is_presented, @@ -896,6 +909,8 @@ SELECT -- No applicable slice id (duration between two slices). input.compositor_dispatch_end_ts, -- TODO(b:380868337): This is sometimes negative; check/fix this. + -- TODO(b:381273884): use frame.compositor_receive_begin_frame_ts instead of + -- input.compositor_dispatch_end_ts. COALESCE( frame.compositor_resample_ts, input.compositor_coalesced_input_handled_ts @@ -967,16 +982,206 @@ SELECT frame.viz_swap_buffers_to_latch_dur, -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- frame.latch_timestamp, - frame.viz_latch_to_swap_end_dur, - -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - frame.swap_end_timestamp, - frame.swap_end_to_presentation_dur, + frame.viz_latch_to_presentation_dur, -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- frame.presentation_timestamp -FROM chrome_scroll_update_input_info AS input -LEFT JOIN chrome_scroll_update_frame_info AS frame +FROM chrome_scroll_update_input_pipeline AS input +LEFT JOIN chrome_scroll_update_frame_pipeline AS frame ON input.presented_in_frame_id = frame.id; + +-- Helper macro to compute the stage delta. +-- Should be used only as a part of `chrome_scroll_frame_info`. +CREATE PERFETTO MACRO _chrome_scroll_frame_stage_delta(name ColumnName) +RETURNS Expr AS +IIF(info.is_first_scroll_update_in_scroll, + NULL, + $name - LAG($name) OVER (ORDER BY generation_ts) +); + +-- A list of all presented Chrome frames which contain scroll updates and associated +-- metadata. +CREATE PERFETTO TABLE chrome_scroll_frame_info( + -- Id (frame's display_trace_id) for the given frame. + id LONG, + -- Vsync interval (in milliseconds). + vsync_interval_ms DOUBLE, + -- Whether the corresponding frame is janky. This comes directly from + -- `perfetto.protos.EventLatency`. + is_janky BOOL, + -- Whether the corresponding scroll is inertial (fling). + is_inertial BOOL, + -- Input generation timestamp (from the Android system) for the first input. + first_input_generation_ts TIMESTAMP, + -- Presentation timestamp for the frame. + presentation_ts TIMESTAMP, + -- Utid for the browser main thread. + browser_utid JOINID(thread.id), + -- Duration from input generation to when the browser received the first input + -- in this frame. + first_input_generation_to_browser_main_dur DURATION, + -- Difference between `first_input_generation_to_browser_main_dur` for this + -- frame and the previous frame in the same scroll. + first_input_generation_to_browser_main_delta_dur DURATION, + -- Duration for processing a `TouchMove` event for the first input in this + -- frame. + first_input_touch_move_processing_dur DURATION, + -- Difference between `first_input_touch_move_processing_dur` for this + -- frame and the previous frame in the same scroll. + first_input_touch_move_processing_delta_dur DURATION, + -- Utid for the renderer compositor thread. + compositor_utid JOINID(thread.id), + -- Duration between the browser and compositor dispatch for the first input + -- in this frame. + first_input_browser_to_compositor_delay_dur DURATION, + -- Difference between `first_input_browser_to_compositor_delay_dur` for this + -- frame and the previous frame in the same scroll. + first_input_browser_to_compositor_delay_delta_dur DURATION, + -- Duration for the compositor dispatch for the first input in this frame. + first_input_compositor_dispatch_dur DURATION, + -- Difference between `first_input_compositor_dispatch_dur` for this frame and + -- the previous frame in the same scroll. + first_input_compositor_dispatch_delta_dur DURATION, + -- Duration between the compositor dispatch and the "OnBeginFrame" work for the + -- first input in this frame. + first_input_compositor_dispatch_to_on_begin_frame_delay_dur DURATION, + -- Difference between `first_input_compositor_dispatch_to_on_begin_frame_delay_dur` + -- for this frame and the previous frame in the same scroll. + first_input_compositor_dispatch_to_on_begin_frame_delay_delta_dur DURATION, + -- Duration of the "OnBeginFrame" work for this frame. + compositor_on_begin_frame_dur DURATION, + -- Difference between `compositor_on_begin_frame_dur` for this frame and the + -- previous frame in the same scroll. + compositor_on_begin_frame_delta_dur DURATION, + -- Duration between the "OnBeginFrame" work and the generation of this frame. + compositor_on_begin_frame_to_generation_delay_dur DURATION, + -- Difference between `compositor_on_begin_frame_to_generation_delay_dur` for + -- this frame and the previous frame in the same scroll. + compositor_on_begin_frame_to_generation_delay_delta_dur DURATION, + -- Duration between the generation and submission of this frame. + compositor_generate_frame_to_submit_frame_dur DURATION, + -- Difference between `compositor_generate_frame_to_submit_frame_dur` for this + -- frame and the previous frame in the same scroll. + compositor_generate_frame_to_submit_frame_delta_dur DURATION, + -- Duration for submitting this frame. + compositor_submit_frame_dur DURATION, + -- Difference between `compositor_submit_frame_dur` for this frame and the + -- previous frame in the same scroll. + compositor_submit_frame_delta_dur DURATION, + -- Utid for the viz compositor thread. + viz_compositor_utid JOINID(thread.id), + -- Delay when a compositor frame is sent from the renderer to viz. + compositor_to_viz_delay_dur DURATION, + -- Difference between `compositor_to_viz_delay_dur` for this frame and the + -- previous frame in the same scroll. + compositor_to_viz_delay_delta_dur DURATION, + -- Duration of the viz work done on receiving the compositor frame. + viz_receive_compositor_frame_dur DURATION, + -- Difference between `viz_receive_compositor_frame_dur` for this frame and the + -- previous frame in the same scroll. + viz_receive_compositor_frame_delta_dur DURATION, + -- Duration between viz receiving the compositor frame to frame draw. + viz_wait_for_draw_dur DURATION, + -- Difference between `viz_wait_for_draw_dur` for this frame and the previous + -- frame in the same scroll. + viz_wait_for_draw_delta_dur DURATION, + -- Duration of the viz drawing/swapping work for this frame. + viz_draw_and_swap_dur DURATION, + -- Difference between `viz_draw_and_swap_dur` for this frame and the previous + -- frame in the same scroll. + viz_draw_and_swap_delta_dur DURATION, + -- Utid for the viz `CompositorGpuThread`. + viz_gpu_thread_utid JOINID(thread.id), + -- Delay between viz work on compositor thread and `CompositorGpuThread`. + viz_to_gpu_delay_dur DURATION, + -- Difference between `viz_to_gpu_delay_dur` for this frame and the previous + -- frame in the same scroll. + viz_to_gpu_delay_delta_dur DURATION, + -- Duration of frame buffer swapping work on viz. + viz_swap_buffers_dur DURATION, + -- Difference between `viz_swap_buffers_dur` for this frame and the previous + -- frame in the same scroll. + viz_swap_buffers_delta_dur DURATION, + -- Time between buffers ready until Choreographer's latch. + viz_swap_buffers_to_latch_dur DURATION, + -- Difference between `viz_swap_buffers_to_latch_dur` for this frame and the + -- previous frame in the same scroll. + viz_swap_buffers_to_latch_delta_dur DURATION, + -- Duration between Choreographer's latch and presentation. + viz_latch_to_presentation_dur DURATION, + -- Difference between `viz_latch_to_presentation_dur` for this frame and the + -- previous frame in the same scroll. + viz_latch_to_presentation_delta_dur DURATION +) AS +SELECT + frame_display_id AS id, + vsync_interval_ms, + is_janky, + is_inertial, + info.generation_ts AS first_input_generation_ts, + info.browser_utid, + info.generation_to_browser_main_dur AS first_input_generation_to_browser_main_dur, + presentation_timestamp AS presentation_ts, + _chrome_scroll_frame_stage_delta!(generation_to_browser_main_dur) + AS first_input_generation_to_browser_main_delta_dur, + info.touch_move_processing_dur AS first_input_touch_move_processing_dur, + _chrome_scroll_frame_stage_delta!(touch_move_processing_dur) + AS first_input_touch_move_processing_delta_dur, + info.compositor_utid, + info.browser_to_compositor_delay_dur + AS first_input_browser_to_compositor_delay_dur, + _chrome_scroll_frame_stage_delta!(browser_to_compositor_delay_dur) + AS first_input_browser_to_compositor_delay_delta_dur, + info.compositor_dispatch_dur AS first_input_compositor_dispatch_dur, + _chrome_scroll_frame_stage_delta!(compositor_dispatch_dur) + AS first_input_compositor_dispatch_delta_dur, + info.compositor_dispatch_to_on_begin_frame_delay_dur + AS first_input_compositor_dispatch_to_on_begin_frame_delay_dur, + _chrome_scroll_frame_stage_delta!(compositor_dispatch_to_on_begin_frame_delay_dur) + AS first_input_compositor_dispatch_to_on_begin_frame_delay_delta_dur, + info.compositor_on_begin_frame_dur, + _chrome_scroll_frame_stage_delta!(compositor_on_begin_frame_dur) + AS compositor_on_begin_frame_delta_dur, + info.compositor_on_begin_frame_to_generation_delay_dur, + _chrome_scroll_frame_stage_delta!(compositor_on_begin_frame_to_generation_delay_dur) + AS compositor_on_begin_frame_to_generation_delay_delta_dur, + info.compositor_generate_frame_to_submit_frame_dur, + _chrome_scroll_frame_stage_delta!(compositor_generate_frame_to_submit_frame_dur) + AS compositor_generate_frame_to_submit_frame_delta_dur, + info.compositor_submit_frame_dur, + _chrome_scroll_frame_stage_delta!(compositor_submit_frame_dur) + AS compositor_submit_frame_delta_dur, + viz_compositor_utid, + info.compositor_to_viz_delay_dur, + _chrome_scroll_frame_stage_delta!(compositor_to_viz_delay_dur) + AS compositor_to_viz_delay_delta_dur, + info.viz_receive_compositor_frame_dur, + _chrome_scroll_frame_stage_delta!(viz_receive_compositor_frame_dur) + AS viz_receive_compositor_frame_delta_dur, + info.viz_wait_for_draw_dur, + _chrome_scroll_frame_stage_delta!(viz_wait_for_draw_dur) + AS viz_wait_for_draw_delta_dur, + info.viz_draw_and_swap_dur, + _chrome_scroll_frame_stage_delta!(viz_draw_and_swap_dur) + AS viz_draw_and_swap_delta_dur, + viz_gpu_thread_utid, + info.viz_to_gpu_delay_dur, + _chrome_scroll_frame_stage_delta!(viz_to_gpu_delay_dur) + AS viz_to_gpu_delay_delta_dur, + info.viz_swap_buffers_dur, + _chrome_scroll_frame_stage_delta!(viz_swap_buffers_dur) + AS viz_swap_buffers_delta_dur, + info.viz_swap_buffers_to_latch_dur, + _chrome_scroll_frame_stage_delta!(viz_swap_buffers_to_latch_dur) + AS viz_swap_buffers_to_latch_delta_dur, + info.viz_latch_to_presentation_dur, + _chrome_scroll_frame_stage_delta!(viz_latch_to_presentation_dur) + AS viz_latch_to_presentation_delta_dur +FROM chrome_scroll_update_info info +WHERE is_first_scroll_update_in_frame +-- TODO(b:380286381, b:393051057): remove this when dropped frames are handled. +AND info.frame_display_id IS NOT NULL; + -- Source of truth for the definition of the stages of a scroll. Mainly intended -- for visualization purposes (e.g. in Chrome Scroll Jank plugin). CREATE PERFETTO TABLE chrome_scroll_update_info_step_templates( @@ -1078,14 +1283,9 @@ AS ( 'viz_swap_buffers_to_latch_dur' ), ( - 'VizLatchToSwapEnd', + 'VizLatchToPresentation', 'latch_timestamp', - 'viz_latch_to_swap_end_dur' - ), - ( - 'VizSwapEndToPresentation', - 'swap_end_timestamp', - 'swap_end_to_presentation_dur' + 'viz_latch_to_presentation_dur' ), ( 'Presentation', diff --git a/naiveproxy/src/base/tracing/stdlib/chrome/cpu_powerups.sql b/naiveproxy/src/base/tracing/stdlib/chrome/cpu_powerups.sql deleted file mode 100644 index 685a6e04f0..0000000000 --- a/naiveproxy/src/base/tracing/stdlib/chrome/cpu_powerups.sql +++ /dev/null @@ -1,189 +0,0 @@ --- Copyright 2023 The Chromium Authors --- Use of this source code is governed by a BSD-style license that can be --- found in the LICENSE file. - --- Find causes for CPUs powering up. --- --- The scripts below analyse traces with the following tracing options --- enabled: --- --- - Linux kernel: ---- "power/*", "sched/*", "task/*", --- - Chromium: --- "toplevel", "toplevel.flow". - --- Noteworthy tables: --- --- chrome_cpu_power_first_toplevel_slice_after_powerup :: The top-level --- slices that ran after a CPU power-up. - --- The CPU power transitions in the trace. --- Power states are encoded as non-negative integers, with zero representing --- full-power operation and positive values representing increasingly deep --- sleep states. --- --- On ARM systems, power state 1 represents the WFI (Wait For Interrupt) sleep --- state that the CPU enters while idle. -CREATE PERFETTO VIEW chrome_cpu_power_slice( - -- The timestamp at the start of the slice. - ts TIMESTAMP, - -- The duration of the slice. - dur DURATION, - -- The CPU on which the transition occurred - cpu LONG, - -- The power state that the CPU was in at time 'ts' for duration 'dur'. - power_state LONG, - -- The power state that the CPU was previously in. - previous_power_state LONG, - -- A unique ID for the CPU power-up. - powerup_id LONG -) AS - WITH cpu_power_states AS ( - SELECT - c.id AS id, - cct.cpu AS cpu, - c.ts, - -- Encode the 'value' field as a power state. - cast_int!((CASE c.value WHEN 4294967295 THEN 0 ELSE c.value + 1 END)) AS power_state - FROM counter AS c - JOIN cpu_counter_track AS cct - ON c.track_id = cct.id - WHERE cct.name = 'cpuidle' - ) - SELECT * - FROM ( - SELECT - ts, - LEAD(ts) OVER (PARTITION BY cpu ORDER BY ts ASC) - ts - AS dur, - cpu, - power_state, - LAG(power_state) OVER (PARTITION BY cpu ORDER BY ts ASC) - AS previous_power_state, - id AS powerup_id - FROM cpu_power_states - ) - WHERE dur IS NOT NULL - AND previous_power_state IS NOT NULL - AND power_state = 0 -- Track full-power states. - AND power_state != previous_power_state -- Skip missing spans. - ORDER BY ts ASC; - --- We do not want scheduler slices with utid = 0 (the 'swapper' kernel thread). -CREATE PERFETTO VIEW _cpu_power_valid_sched_slice AS - SELECT * - FROM sched_slice - WHERE utid != 0; - --- Join scheduler slices with the spans with CPU power slices. --- --- There multiple scheduler slices could fall into one CPU power slice. --- ---- CPU Power: --- |----------------------------|....................|---------| --- A B C D - --- Scheduler slices on that CPU: --- |-----T1-----| |....T2....| |---T3--| --- E F G H I J --- --- Here threads T1 and T2 executed in CPU power slice [A,B]. The --- time between F and G represents time between threads in the kernel. -CREATE VIRTUAL TABLE _cpu_power_and_sched_slice -USING - SPAN_JOIN(chrome_cpu_power_slice PARTITIONED cpu, - _cpu_power_valid_sched_slice PARTITIONED cpu); - --- The Linux scheduler slices that executed immediately after a --- CPU power up. -CREATE PERFETTO TABLE chrome_cpu_power_first_sched_slice_after_powerup( - -- The timestamp at the start of the slice. - ts TIMESTAMP, - -- The duration of the slice. - dur DURATION, - -- The cpu on which the slice executed. - cpu LONG, - -- Id for the sched_slice table. - sched_id LONG, - -- Unique id for the thread that ran within the slice. - utid LONG, - -- The CPU's power state before this slice. - previous_power_state LONG, - -- A unique ID for the CPU power-up. - powerup_id LONG -) AS -SELECT - ts, - dur, - cpu, - id AS sched_id, - utid, - previous_power_state, - powerup_id -FROM _cpu_power_and_sched_slice -WHERE power_state = 0 -- Power-ups only. -GROUP BY cpu, powerup_id -HAVING ts = MIN(ts) -- There will only be one MIN sched slice - -- per CPU power up. -ORDER BY ts ASC; - --- A view joining thread tracks and top-level slices. --- --- This view is intended to be intersected by time with the scheduler --- slices scheduled after a CPU power up. --- --- utid Thread unique id. --- slice_id The slice_id for the top-level slice. --- ts Starting timestamp for the slice. --- dur The duration for the slice. -CREATE PERFETTO VIEW _cpu_power_thread_and_toplevel_slice AS - SELECT - t.utid AS utid, - s.id AS slice_id, - s.ts, - s.dur - FROM slice AS s - JOIN thread_track AS t - ON s.track_id = t.id - WHERE s.depth = 0 -- Top-level slices only. - ORDER BY ts ASC; - -CREATE VIRTUAL TABLE _chrome_cpu_power_post_powerup_slice_sj -USING - SPAN_JOIN(chrome_cpu_power_first_sched_slice_after_powerup PARTITIONED utid, - _cpu_power_thread_and_toplevel_slice PARTITIONED utid); - --- A table holding the slices that executed within the scheduler --- slice that ran on a CPU immediately after power-up. -CREATE PERFETTO TABLE chrome_cpu_power_post_powerup_slice( - -- Timestamp of the resulting slice - ts TIMESTAMP, - -- Duration of the slice. - dur DURATION, - -- The CPU the sched slice ran on. - cpu LONG, - -- Unique thread id for the slice. - utid LONG, - -- 'id' field from the sched_slice table. - sched_id LONG, - -- Id of the top-level slice for this (sched) slice. - slice_id LONG, - -- Previous power state. - previous_power_state LONG, - -- Id of the powerup. - powerup_id LONG -) AS -SELECT * FROM _chrome_cpu_power_post_powerup_slice_sj; - --- The first top-level slice that ran after a CPU power-up. -CREATE PERFETTO VIEW chrome_cpu_power_first_toplevel_slice_after_powerup( - -- ID of the slice in the slice table. - slice_id LONG, - -- The power state of the CPU prior to power-up. - previous_power_state LONG -) AS - SELECT slice_id, previous_power_state - FROM chrome_cpu_power_post_powerup_slice - GROUP BY cpu, powerup_id - HAVING ts = MIN(ts) - ORDER BY ts ASC; diff --git a/naiveproxy/src/base/tracing/stdlib/chrome/event_latency.sql b/naiveproxy/src/base/tracing/stdlib/chrome/event_latency.sql index d2e63306af..24179d93dd 100644 --- a/naiveproxy/src/base/tracing/stdlib/chrome/event_latency.sql +++ b/naiveproxy/src/base/tracing/stdlib/chrome/event_latency.sql @@ -83,8 +83,28 @@ CREATE PERFETTO TABLE chrome_event_latencies( ts TIMESTAMP, -- The duration of the scroll. dur DURATION, - -- The id of the scroll update event. + -- The id of the scroll update event (aka LatencyInfo.ID). scroll_update_id LONG, + -- The id of the first frame (pre-surface aggregation) which included the + -- scroll update and was presented. NULL if: + -- (1) the event is not a scroll update (`event_type` is NOT + -- GESTURE_SCROLL_UPDATE, FIRST_GESTURE_SCROLL_UPDATE, or + -- INERTIAL_GESTURE_SCROLL_UPDATE), + -- (2) the scroll update wasn't presented (e.g. it was an overscroll) or + -- (3) the trace comes from an old Chrome version (https://crrev.com/c/6185817 + -- was first included in version 134.0.6977.0 and was cherry-picked in + -- version 133.0.6943.33). + surface_frame_trace_id LONG, + -- The id of the first frame (post-surface aggregation) which included the + -- scroll update and was presented. NULL if: + -- (1) the event is not a scroll update (`event_type` is NOT + -- GESTURE_SCROLL_UPDATE, FIRST_GESTURE_SCROLL_UPDATE, or + -- INERTIAL_GESTURE_SCROLL_UPDATE), + -- (2) the scroll update wasn't presented (e.g. it was an overscroll) or + -- (3) the trace comes from an old Chrome version (https://crrev.com/c/6185817 + -- was first included in version 134.0.6977.0 and was cherry-picked in + -- version 133.0.6943.33). + display_trace_id LONG, -- Whether this input event was presented. is_presented BOOL, -- EventLatency event type. @@ -99,7 +119,8 @@ CREATE PERFETTO TABLE chrome_event_latencies( buffer_available_timestamp LONG, -- Timestamp of the BufferReadyToLatch substage. buffer_ready_timestamp LONG, - -- Timestamp of the LatchToSwapEnd substage. + -- Timestamp of the LatchToSwapEnd substage (or LatchToPresentation as a + -- fallback). latch_timestamp LONG, -- Timestamp of the SwapEndToPresentationCompositorFrame substage. swap_end_timestamp LONG, @@ -115,6 +136,9 @@ SELECT slice.ts, slice.dur, EXTRACT_arg(arg_set_id, 'event_latency.event_latency_id') AS scroll_update_id, + EXTRACT_arg(arg_set_id, 'event_latency.surface_frame_trace_id') + AS surface_frame_trace_id, + EXTRACT_arg(arg_set_id, 'event_latency.display_trace_id') AS display_trace_id, _has_descendant_slice_with_name( slice.id, 'SubmitCompositorFrameToPresentationCompositorFrame') @@ -129,58 +153,21 @@ SELECT AS buffer_available_timestamp, _descendant_slice_begin(slice.id, 'BufferReadyToLatch') AS buffer_ready_timestamp, - _descendant_slice_begin(slice.id, 'LatchToSwapEnd') AS latch_timestamp, + COALESCE( + _descendant_slice_begin(slice.id, 'LatchToSwapEnd'), + _descendant_slice_begin(slice.id, 'LatchToPresentation') + ) AS latch_timestamp, _descendant_slice_begin(slice.id, 'SwapEndToPresentationCompositorFrame') AS swap_end_timestamp, _get_presentation_timestamp(slice.id) AS presentation_timestamp FROM slice WHERE name = 'EventLatency'; --- All EventLatency slices that are relevant to scrolling, including presented --- pinches. Materialized to reduce how many times we query slice. -CREATE PERFETTO TABLE _gesture_scroll_events_no_scroll_id -AS -SELECT - name, - ts, - dur, - id, - scroll_update_id, - is_presented, - _get_presentation_timestamp(chrome_event_latencies.id) - AS presentation_timestamp, - event_type, - track_id -FROM chrome_event_latencies -WHERE ( - event_type GLOB '*GESTURE_SCROLL*' - -- Pinches are only relevant if the frame was presented. - OR (event_type GLOB '*GESTURE_PINCH_UPDATE' - AND _has_descendant_slice_with_name( - id, - 'SubmitCompositorFrameToPresentationCompositorFrame') - ) -); - --- Extracts scroll id for the EventLatency slice at `ts`. -CREATE PERFETTO FUNCTION chrome_get_most_recent_scroll_begin_id( - -- Timestamp of the EventLatency slice to get the scroll id for. - ts TIMESTAMP) --- The event_latency_id of the EventLatency slice with the type --- GESTURE_SCROLL_BEGIN that is the closest to `ts`. -RETURNS LONG AS -SELECT scroll_update_id -FROM _gesture_scroll_events_no_scroll_id -WHERE event_type = 'GESTURE_SCROLL_BEGIN' -AND ts<=$ts -ORDER BY ts DESC -LIMIT 1; - -- All scroll-related events (frames) including gesture scroll updates, begins -- and ends with respective scroll ids and start/end timestamps, regardless of -- being presented. This includes pinches that were presented. See b/315761896 -- for context on pinches. -CREATE PERFETTO TABLE chrome_gesture_scroll_events( +CREATE PERFETTO TABLE chrome_gesture_scroll_updates( -- Slice Id for the EventLatency scroll event. id LONG, -- Slice name. @@ -191,29 +178,86 @@ CREATE PERFETTO TABLE chrome_gesture_scroll_events( dur DURATION, -- The id of the scroll update event. scroll_update_id LONG, - -- The id of the scroll. - scroll_id LONG, -- Whether this input event was presented. is_presented BOOL, + -- EventLatency event type. + event_type STRING, + -- Perfetto track this slice is found on. + track_id LONG, + -- Vsync interval (in milliseconds). + vsync_interval_ms DOUBLE, + -- Whether the corresponding frame is janky. + is_janky BOOL, + -- Timestamp of the BufferAvailableToBufferReady substage. + buffer_available_timestamp LONG, + -- Timestamp of the BufferReadyToLatch substage. + buffer_ready_timestamp LONG, + -- Timestamp of the LatchToSwapEnd substage (or LatchToPresentation as a + -- fallback). + latch_timestamp LONG, + -- Timestamp of the SwapEndToPresentationCompositorFrame substage. + swap_end_timestamp LONG, -- Frame presentation timestamp aka the timestamp of the -- SwapEndToPresentationCompositorFrame substage. -- TODO(b/341047059): temporarily use LatchToSwapEnd as a workaround if -- SwapEndToPresentationCompositorFrame is missing due to b/247542163. presentation_timestamp LONG, - -- EventLatency event type. - event_type STRING, - -- Perfetto track this slice is found on. - track_id LONG + -- The id of the scroll. + scroll_id LONG ) AS +-- To compute scroll id, we first mark all of the FIRST_GESTURE_SCROLL_UPDATE events +-- (or the first scroll update in the trace) as the points where scroll id should be +-- incremented and then use the cumulative sum as the scroll id. +WITH updates_without_scroll_ids AS ( + SELECT + id, + name, + ts, + dur, + scroll_update_id, + is_presented, + event_type, + track_id, + vsync_interval_ms, + is_janky_scrolled_frame AS is_janky, + buffer_available_timestamp, + buffer_ready_timestamp, + latch_timestamp, + swap_end_timestamp, + presentation_timestamp, + ( + event_type = 'FIRST_GESTURE_SCROLL_UPDATE' OR + ROW_NUMBER() OVER (ORDER BY ts) = 1 + ) as is_first_update_in_scroll + FROM chrome_event_latencies + WHERE event_type IN ( + 'GESTURE_SCROLL_UPDATE', + 'FIRST_GESTURE_SCROLL_UPDATE', + 'INERTIAL_GESTURE_SCROLL_UPDATE' + ) OR ( + -- Pinches are only relevant if the frame was presented. + event_type GLOB '*GESTURE_PINCH_UPDATE' + AND is_presented + ) +) SELECT id, name, ts, dur, scroll_update_id, - chrome_get_most_recent_scroll_begin_id(ts) AS scroll_id, is_presented, - presentation_timestamp, event_type, - track_id -FROM _gesture_scroll_events_no_scroll_id; + track_id, + vsync_interval_ms, + is_janky, + buffer_available_timestamp, + buffer_ready_timestamp, + latch_timestamp, + swap_end_timestamp, + presentation_timestamp, + IFNULL(SUM(cast_int!(is_first_update_in_scroll)) OVER ( + ORDER BY ts + ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW + ), 0) AS scroll_id +FROM updates_without_scroll_ids; diff --git a/naiveproxy/src/base/tracing/stdlib/chrome/graphics_pipeline.sql b/naiveproxy/src/base/tracing/stdlib/chrome/graphics_pipeline.sql index 4f7c6efd12..baf9c7f221 100644 --- a/naiveproxy/src/base/tracing/stdlib/chrome/graphics_pipeline.sql +++ b/naiveproxy/src/base/tracing/stdlib/chrome/graphics_pipeline.sql @@ -85,40 +85,86 @@ CREATE PERFETTO TABLE chrome_graphics_pipeline_display_frame_steps( -- Start time of the parent Chrome scheduler task (if any) of this step. task_start_time_ts TIMESTAMP) AS +WITH steps_with_potential_duplicates AS ( + SELECT + id, + ts, + dur, + extract_arg(arg_set_id, 'chrome_graphics_pipeline.step') AS step, + extract_arg(arg_set_id, 'chrome_graphics_pipeline.display_trace_id') + AS display_trace_id, + utid, + ts - ( + EXTRACT_ARG( + thread_slice.arg_set_id, + 'current_task.event_offset_from_task_start_time_us' + ) * 1000 + ) AS task_start_time_ts + FROM thread_slice + WHERE name = 'Graphics.Pipeline' AND display_trace_id IS NOT NULL +), steps_with_ordering AS ( + SELECT + *, + ROW_NUMBER() OVER ( + -- Partition the steps so that, if the same step (for the same graphics + -- pipeline) was emitted more than once (e.g. due to b:390610512), the + -- step ends up in the same partition as all its duplicates. This will + -- enable us to deduplicate the steps later. + PARTITION BY display_trace_id, step, utid + -- If there are multiple STEP_DRAW_AND_SWAP or multiple + -- STEP_SURFACE_AGGREGATION steps, we assume that all duplicates except + -- the last one were cancelled, so we only care about the last + -- STEP_DRAW_AND_SWAP/STEP_SURFACE_AGGREGATION step. We don't have any + -- preference for other steps but, for the sake of determinism and + -- consistency, let's always pick the last step. + ORDER BY ts DESC + ) AS ordering_within_partition + FROM steps_with_potential_duplicates +) SELECT id, ts, dur, - extract_arg(arg_set_id, 'chrome_graphics_pipeline.step') AS step, - extract_arg(arg_set_id, 'chrome_graphics_pipeline.display_trace_id') - AS display_trace_id, + step, + display_trace_id, utid, - ts - (EXTRACT_ARG(thread_slice.arg_set_id, 'current_task.event_offset_from_task_start_time_us') * 1000) AS task_start_time_ts -FROM thread_slice -WHERE name = 'Graphics.Pipeline' AND display_trace_id IS NOT NULL; + task_start_time_ts +FROM steps_with_ordering +-- This is where we actually remove duplicate steps. +WHERE ordering_within_partition = 1; -- Links surface frames (`chrome_graphics_pipeline_surface_frame_steps`) to the --- display frame (`chrome_graphics_pipeline_display_frame_steps`) into which --- they are merged. In other words, in general, multiple --- `surface_frame_trace_id`s will correspond to one `display_trace_id`. -CREATE PERFETTO TABLE chrome_graphics_pipeline_aggregated_frames( +-- the first display frame (`chrome_graphics_pipeline_display_frame_steps`) into +-- which it was included. As an display frame usually aggregates frames from +-- multiple surfaces, multiple `surface_frame_trace_id`s will correspond to one +-- `display_trace_id`. +CREATE PERFETTO TABLE chrome_surface_frame_id_to_first_display_id( -- Id of the graphics pipeline, pre-surface aggregation. surface_frame_trace_id LONG, -- Id of the graphics pipeline, post-surface aggregation. display_trace_id LONG) AS +WITH aggregations AS ( + SELECT + args.int_value AS surface_frame_trace_id, + display_trace_id, + slice.ts + FROM chrome_graphics_pipeline_display_frame_steps step + JOIN slice USING (id) + JOIN args USING (arg_set_id) + WHERE + step.step = 'STEP_SURFACE_AGGREGATION' + AND args.flat_key + = 'chrome_graphics_pipeline.aggregated_surface_frame_trace_ids' +) SELECT - args.int_value AS surface_frame_trace_id, - display_trace_id -FROM chrome_graphics_pipeline_display_frame_steps step -JOIN slice - USING (id) -JOIN args - USING (arg_set_id) -WHERE - step.step = 'STEP_SURFACE_AGGREGATION' - AND args.flat_key - = 'chrome_graphics_pipeline.aggregated_surface_frame_trace_ids'; + surface_frame_trace_id, + FIRST_VALUE(display_trace_id) OVER ( + PARTITION BY surface_frame_trace_id + ORDER BY ts + ) AS display_trace_id +FROM aggregations +GROUP BY surface_frame_trace_id; -- Links inputs (`chrome_input_pipeline_steps.latency_id`) to the surface frame -- (`chrome_graphics_pipeline_surface_frame_steps`) to which they correspond. diff --git a/naiveproxy/src/base/tracing/stdlib/chrome/input.sql b/naiveproxy/src/base/tracing/stdlib/chrome/input.sql index 4eeaccc691..bf4ac0fc37 100644 --- a/naiveproxy/src/base/tracing/stdlib/chrome/input.sql +++ b/naiveproxy/src/base/tracing/stdlib/chrome/input.sql @@ -25,20 +25,58 @@ CREATE PERFETTO TABLE _chrome_input_pipeline_steps_no_input_type( -- Start time of the parent Chrome scheduler task (if any) of this step. task_start_time_ts TIMESTAMP ) AS +WITH steps_with_potential_duplicates AS ( + SELECT + EXTRACT_ARG(thread_slice.arg_set_id, 'chrome_latency_info.trace_id') + AS latency_id, + id AS slice_id, + ts, + dur, + utid, + EXTRACT_ARG(thread_slice.arg_set_id, 'chrome_latency_info.step') AS step, + EXTRACT_ARG(thread_slice.arg_set_id, 'chrome_latency_info.input_type') + AS input_type, + ts - ( + EXTRACT_ARG( + thread_slice.arg_set_id, + 'current_task.event_offset_from_task_start_time_us' + ) * 1000 + ) AS task_start_time_ts + FROM + thread_slice + WHERE + step IS NOT NULL + AND latency_id != -1 +), steps_with_ordering AS ( + SELECT + *, + ROW_NUMBER() OVER ( + -- Partition the steps so that, if the same step (for the same input) was + -- emitted more than once (e.g. due to b:390406106), the step ends up in + -- the same partition as all its duplicates. This will enable us to + -- deduplicate the steps later. + PARTITION BY latency_id, utid, step, input_type + -- If there are multiple STEP_RESAMPLE_SCROLL_EVENTS steps, we assume that + -- the input was only dispatched after the last resampling, so we only + -- care about the last STEP_RESAMPLE_SCROLL_EVENTS step. We don't have any + -- preference for other steps but, for the sake of determinsm and + -- consistency, let's always pick the last step. + ORDER BY ts DESC + ) AS ordering_within_partition + FROM steps_with_potential_duplicates +) SELECT - EXTRACT_ARG(thread_slice.arg_set_id, 'chrome_latency_info.trace_id') AS latency_id, - id AS slice_id, + latency_id, + slice_id, ts, dur, utid, - EXTRACT_ARG(thread_slice.arg_set_id, 'chrome_latency_info.step') AS step, - EXTRACT_ARG(thread_slice.arg_set_id, 'chrome_latency_info.input_type') AS input_type, - ts - (EXTRACT_ARG(thread_slice.arg_set_id, 'current_task.event_offset_from_task_start_time_us') * 1000) AS task_start_time_ts -FROM - thread_slice -WHERE - step IS NOT NULL - AND latency_id != -1 + step, + input_type, + task_start_time_ts +FROM steps_with_ordering +-- This is where we actually remove duplicate steps. +WHERE ordering_within_partition = 1 ORDER BY slice_id, ts; -- Each row represents one input pipeline. diff --git a/naiveproxy/src/base/tracing/stdlib/chrome/perfetto_sql_files.gni b/naiveproxy/src/base/tracing/stdlib/chrome/perfetto_sql_files.gni index 9c180d398a..ce21c1227c 100644 --- a/naiveproxy/src/base/tracing/stdlib/chrome/perfetto_sql_files.gni +++ b/naiveproxy/src/base/tracing/stdlib/chrome/perfetto_sql_files.gni @@ -6,7 +6,6 @@ chrome_stdlib_sql_files = [ "android_input.sql", "chrome_scrolls.sql", - "cpu_powerups.sql", "event_latency.sql", "event_latency_description.sql", "graphics_pipeline.sql", diff --git a/naiveproxy/src/base/tracing/stdlib/chrome/scroll_jank/predictor_error.sql b/naiveproxy/src/base/tracing/stdlib/chrome/scroll_jank/predictor_error.sql index bb6c3ae4a4..cc4b961cd9 100644 --- a/naiveproxy/src/base/tracing/stdlib/chrome/scroll_jank/predictor_error.sql +++ b/naiveproxy/src/base/tracing/stdlib/chrome/scroll_jank/predictor_error.sql @@ -66,13 +66,12 @@ SELECT THEN $d2/MAX($d1, $d3) - $threshold WHEN MIN($d1, $d3)/$d2 >= $threshold THEN MIN($d1, $d3)/$d2 - $threshold - ELSE 0 + ELSE 0.0 END; CREATE PERFETTO TABLE _deltas_and_neighbors AS SELECT scroll_id, - event_latency_slice_id, scroll_update_id, ts, delta_y, @@ -86,7 +85,6 @@ FROM chrome_presented_scroll_offsets; CREATE PERFETTO TABLE _deltas_and_neighbors_with_threshold AS SELECT scroll_id, - event_latency_slice_id, scroll_update_id, ts, delta_y, @@ -106,9 +104,6 @@ CREATE PERFETTO TABLE chrome_predictor_error( -- An ID that ties all EventLatencies in a particular scroll. (implementation -- note: This is the EventLatency TraceId of the GestureScrollbegin). scroll_id LONG, - -- An ID for this particular EventLatency regardless of it being presented or - -- not. - event_latency_slice_id LONG, -- An ID that ties this |event_latency_id| with the Trace Id (another -- event_latency_id) that it was presented with. scroll_update_id LONG, @@ -133,7 +128,6 @@ CREATE PERFETTO TABLE chrome_predictor_error( AS SELECT scroll_id, - event_latency_slice_id, scroll_update_id, ts AS present_ts, delta_y, diff --git a/naiveproxy/src/base/tracing/stdlib/chrome/scroll_jank/scroll_jank_intervals.sql b/naiveproxy/src/base/tracing/stdlib/chrome/scroll_jank/scroll_jank_intervals.sql index e90dc5dea1..13c30a9c0c 100644 --- a/naiveproxy/src/base/tracing/stdlib/chrome/scroll_jank/scroll_jank_intervals.sql +++ b/naiveproxy/src/base/tracing/stdlib/chrome/scroll_jank/scroll_jank_intervals.sql @@ -43,7 +43,7 @@ SELECT AS frame_jank_ts, cast_int!((e.delay_since_last_frame - e.vsync_interval) * 1e6) AS frame_jank_dur -FROM chrome_gesture_scroll_events s +FROM chrome_gesture_scroll_updates s JOIN chrome_janky_frames e ON s.id = e. event_latency_id; diff --git a/naiveproxy/src/base/tracing/stdlib/chrome/scroll_jank/scroll_jank_v3.sql b/naiveproxy/src/base/tracing/stdlib/chrome/scroll_jank/scroll_jank_v3.sql index 4be4c2e6a8..1b9ed6b521 100644 --- a/naiveproxy/src/base/tracing/stdlib/chrome/scroll_jank/scroll_jank_v3.sql +++ b/naiveproxy/src/base/tracing/stdlib/chrome/scroll_jank/scroll_jank_v3.sql @@ -4,6 +4,7 @@ -- Hardware info is useful when using sql metrics for analysis -- in BTP. +INCLUDE PERFETTO MODULE chrome.chrome_scrolls; INCLUDE PERFETTO MODULE chrome.metadata; INCLUDE PERFETTO MODULE chrome.scroll_jank.scroll_jank_v3_cause; INCLUDE PERFETTO MODULE chrome.scroll_jank.utils; @@ -20,44 +21,6 @@ SELECT FROM slice WHERE $id = id; --- Grabs all gesture updates with respective scroll ids and start/end --- timestamps, regardless of being presented. -CREATE PERFETTO TABLE chrome_gesture_scroll_updates( - -- The start timestamp of the scroll. - ts TIMESTAMP, - -- The duration of the scroll. - dur DURATION, - -- Slice id for the scroll. - id LONG, - -- The id of the scroll update event. - scroll_update_id LONG, - -- The id of the scroll. - scroll_id LONG, - -- Whether this input event was presented. - is_presented BOOL, - -- Frame presentation timestamp aka the timestamp of the - -- SwapEndToPresentationCompositorFrame substage. - presentation_timestamp LONG, - -- EventLatency event type. - event_type STRING -) AS -SELECT - ts, - dur, - id, - scroll_update_id, - scroll_id, - is_presented, - presentation_timestamp, - event_type -FROM chrome_gesture_scroll_events -WHERE event_type IN ( - 'GESTURE_SCROLL_UPDATE', - 'FIRST_GESTURE_SCROLL_UPDATE', - 'INERTIAL_GESTURE_SCROLL_UPDATE', - 'GESTURE_PINCH_UPDATE' -); - CREATE PERFETTO TABLE _presented_gesture_scrolls AS SELECT id, diff --git a/naiveproxy/src/base/tracing/stdlib/chrome/scroll_jank/scroll_offsets.sql b/naiveproxy/src/base/tracing/stdlib/chrome/scroll_jank/scroll_offsets.sql index bec142ecca..0994bcef02 100644 --- a/naiveproxy/src/base/tracing/stdlib/chrome/scroll_jank/scroll_offsets.sql +++ b/naiveproxy/src/base/tracing/stdlib/chrome/scroll_jank/scroll_offsets.sql @@ -29,22 +29,88 @@ -- various stages of input processing, and are unified by a single -- scroll_update_id value, recorded as scroll_deltas.trace_id in each event. -INCLUDE PERFETTO MODULE chrome.chrome_scrolls; +INCLUDE PERFETTO MODULE chrome.event_latency; INCLUDE PERFETTO MODULE chrome.scroll_jank.scroll_jank_v3; --- All (coalesced and non-coalesced) vertical scrolling deltas and their --- associated scroll ids. Delta values are recorded after being scaled to the --- device's screen size in the TranslateAndScaleWebInputEvent trace event. In --- this trace event, the deltas recorded represent the true (read "original") --- values that the Browser receives from Android, and the only processing is --- scaling and translation. -CREATE PERFETTO TABLE _translate_and_scale_scroll_deltas AS +-- The raw input deltas for all input events which were part of a scroll. +CREATE PERFETTO TABLE chrome_scroll_input_deltas( + -- Scroll update id (aka LatencyInfo.ID) for this scroll update input + -- event. + scroll_update_id LONG, + -- The delta in pixels (scaled to the device's screen size) how much this + -- input event moved over the X axis vs previous, as reported by the OS. + delta_x DOUBLE, + -- The delta in pixels (scaled to the device's screen size) how much this + -- input event moved over the Y axis vs previous, as reported by the OS. + delta_y DOUBLE +) AS SELECT EXTRACT_ARG(arg_set_id, 'scroll_deltas.trace_id') AS scroll_update_id, + EXTRACT_ARG(arg_set_id, 'scroll_deltas.original_delta_x') AS delta_x, EXTRACT_ARG(arg_set_id, 'scroll_deltas.original_delta_y') AS delta_y FROM slice WHERE slice.name = 'TranslateAndScaleWebInputEvent'; +-- The raw coordinates and pixel offsets for all input events which were part of +-- a scroll. +CREATE PERFETTO TABLE chrome_scroll_input_offsets( + -- An ID for this scroll update (aka LatencyInfo.ID). + scroll_update_id LONG, + -- An ID for the scroll this scroll update belongs to. + scroll_id LONG, + -- Timestamp the of the scroll input event. + ts TIMESTAMP, + -- The delta in raw coordinates between this scroll update event and the + -- previous. + delta_y DOUBLE, + -- The total delta of all scroll updates within the same as scroll up to and + -- including this scroll update. + relative_offset_y DOUBLE +) AS +SELECT + delta.scroll_update_id, + scroll_update.scroll_id, + ts, + delta_y, + SUM(delta_y) OVER ( + PARTITION BY scroll_id + ORDER BY ts + ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW + ) AS relative_offset_y +FROM chrome_scroll_input_deltas delta +JOIN chrome_gesture_scroll_updates scroll_update USING (scroll_update_id); + +-- The page offset delta (by how much the page was scrolled vs previous frame) +-- for each frame. +-- This is the resulting delta that is shown to the user after the input has +-- been processed. `chrome_scroll_input_deltas` tracks the underlying signal +-- deltas between consecutive input events. +CREATE PERFETTO TABLE chrome_scroll_presented_deltas( + -- Scroll update id (aka LatencyInfo.ID) for this scroll update input + -- event. + scroll_update_id LONG, + -- The delta in pixels (scaled to the device's screen size) how much this + -- input event moved over the X axis vs previous, as reported by the OS. + delta_x DOUBLE, + -- The delta in pixels (scaled to the device's screen size) how much this + -- input event moved over the Y axis vs previous, as reported by the OS. + delta_y DOUBLE, + -- The page offset in pixels (scaled to the device's screen size) along + -- the X axis. + offset_x LONG, + -- The page offset in pixels (scaled to the device's screen size) along + -- the Y axis. + offset_y LONG +) AS +SELECT + EXTRACT_ARG(arg_set_id, 'scroll_deltas.trace_id') AS scroll_update_id, + EXTRACT_ARG(arg_set_id, 'scroll_deltas.provided_to_compositor_delta_x') AS delta_x, + EXTRACT_ARG(arg_set_id, 'scroll_deltas.provided_to_compositor_delta_y') AS delta_y, + EXTRACT_ARG(arg_set_id, 'scroll_deltas.visual_offset_x') AS offset_x, + EXTRACT_ARG(arg_set_id, 'scroll_deltas.visual_offset_y') AS offset_y +FROM slice +WHERE slice.name = 'InputHandlerProxy::HandleGestureScrollUpdate_Result'; + -- Associate the gesture scroll update OS timestamp with the delta. CREATE PERFETTO TABLE _scroll_deltas_with_timestamp AS SELECT @@ -52,7 +118,7 @@ SELECT slice.ts AS input_ts, data.scroll_update_id, data.delta_y -FROM _translate_and_scale_scroll_deltas data +FROM chrome_scroll_input_deltas data JOIN slice ON slice.name = 'EventLatency' AND data.scroll_update_id = EXTRACT_ARG(arg_set_id, 'event_latency.event_latency_id'); @@ -83,50 +149,14 @@ SELECT FROM _scroll_deltas_with_scroll_id AS deltas LEFT JOIN chrome_frame_info_with_delay AS delay USING(scroll_update_id); --- The raw coordinates and pixel offsets for all input events which were part of --- a scroll. -CREATE PERFETTO TABLE chrome_scroll_input_offsets( - -- An ID that ties all EventLatencies in a particular scroll. (implementation - -- note: This is the EventLatency TraceId of the GestureScrollbegin). - scroll_id LONG, - -- An ID for this particular EventLatency regardless of it being presented or - -- not. - event_latency_slice_id LONG, - -- An ID that ties this |event_latency_id| with the Trace Id (another - -- event_latency_id) that it was presented with. - scroll_update_id LONG, - -- Timestamp the of the scroll input event. - ts TIMESTAMP, - -- The delta in raw coordinates between this scroll update event and the - -- previous. - delta_y DOUBLE, - -- The pixel offset of this scroll update event compared to the initial one. - relative_offset_y DOUBLE -) AS -SELECT - scroll_id, - event_latency_slice_id, - scroll_update_id, - input_ts AS ts, - delta_y, - SUM(IFNULL(delta_y, 0)) OVER ( PARTITION BY scroll_id - ORDER BY scroll_update_id, input_ts - ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS relative_offset_y -FROM _scroll_deltas_with_delays; - -- The scrolling offsets for the actual (applied) scroll events. These are not -- necessarily inclusive of all user scroll events, rather those scroll events -- that are actually processed. CREATE PERFETTO TABLE chrome_presented_scroll_offsets( - -- An ID that ties all EventLatencies in a particular scroll. (implementation - -- note: This is the EventLatency TraceId of the GestureScrollbegin). - scroll_id LONG, - -- An ID for this particular EventLatency regardless of it being presented or - -- not. - event_latency_slice_id LONG, - -- An ID that ties this |event_latency_id| with the Trace Id (another - -- event_latency_id) that it was presented with. + -- An ID for this scroll update (aka LatencyInfo.ID). scroll_update_id LONG, + -- An ID for the scroll this scroll update belongs to. + scroll_id LONG, -- Presentation timestamp. ts TIMESTAMP, -- The delta in raw coordinates between this scroll update event and the @@ -135,15 +165,32 @@ CREATE PERFETTO TABLE chrome_presented_scroll_offsets( -- The pixel offset of this scroll update event compared to the initial one. relative_offset_y DOUBLE ) AS +WITH data AS ( + SELECT + scroll_update_id, + scroll_id, + presentation_timestamp AS ts, + -- Aggregate the deltas for each presentation time. + SUM(delta_y) OVER (PARTITION BY presentation_timestamp) AS delta_y, + SUM(delta_y) OVER ( + PARTITION BY scroll_id + ORDER BY presentation_timestamp + GROUPS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW + ) AS relative_offset_y, + -- For each presentation time, select the last scroll update as there can + -- be multiple EventLatencies with the same presentation time. + ROW_NUMBER() OVER ( + PARTITION BY presentation_timestamp + ORDER BY scroll_update.ts + ) AS rank + FROM chrome_scroll_presented_deltas + JOIN chrome_gesture_scroll_updates scroll_update USING (scroll_update_id) +) SELECT - scroll_id, - event_latency_slice_id, scroll_update_id, - presentation_timestamp AS ts, - total_delta AS delta_y, - SUM(IFNULL(total_delta, 0)) OVER ( PARTITION BY scroll_id - ORDER BY scroll_update_id, presentation_timestamp - ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS relative_offset_y -FROM _scroll_deltas_with_delays -WHERE presentation_timestamp IS NOT NULL -; + scroll_id, + ts, + delta_y, + relative_offset_y +FROM data +WHERE rank = 1; \ No newline at end of file diff --git a/naiveproxy/src/base/tracing/trace_time.cc b/naiveproxy/src/base/tracing/trace_time.cc index 129175f414..86221ee3bb 100644 --- a/naiveproxy/src/base/tracing/trace_time.cc +++ b/naiveproxy/src/base/tracing/trace_time.cc @@ -8,8 +8,7 @@ #include "build/build_config.h" #include "third_party/perfetto/include/perfetto/base/time.h" -namespace base { -namespace tracing { +namespace base::tracing { int64_t TraceBootTicksNow() { // On Windows and Mac, TRACE_TIME_TICKS_NOW() behaves like boottime already. @@ -24,5 +23,4 @@ int64_t TraceBootTicksNow() { return TRACE_TIME_TICKS_NOW().since_origin().InNanoseconds(); } -} // namespace tracing -} // namespace base +} // namespace base::tracing diff --git a/naiveproxy/src/base/tracing/tracing_tls.cc b/naiveproxy/src/base/tracing/tracing_tls.cc index 6649b91f23..17e6081908 100644 --- a/naiveproxy/src/base/tracing/tracing_tls.cc +++ b/naiveproxy/src/base/tracing/tracing_tls.cc @@ -4,8 +4,7 @@ #include "base/tracing/tracing_tls.h" -namespace base { -namespace tracing { +namespace base::tracing { // static bool* GetThreadIsInTraceEvent() { @@ -13,5 +12,4 @@ bool* GetThreadIsInTraceEvent() { return &thread_is_in_trace_event; } -} // namespace tracing -} // namespace base +} // namespace base::tracing diff --git a/naiveproxy/src/base/ranges/from_range.h b/naiveproxy/src/base/types/cxx23_from_range.h similarity index 83% rename from naiveproxy/src/base/ranges/from_range.h rename to naiveproxy/src/base/types/cxx23_from_range.h index a0fca0a340..b7a0a9dc0d 100644 --- a/naiveproxy/src/base/ranges/from_range.h +++ b/naiveproxy/src/base/types/cxx23_from_range.h @@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef BASE_RANGES_FROM_RANGE_H_ -#define BASE_RANGES_FROM_RANGE_H_ +#ifndef BASE_TYPES_CXX23_FROM_RANGE_H_ +#define BASE_TYPES_CXX23_FROM_RANGE_H_ namespace base { @@ -22,4 +22,4 @@ constexpr inline from_range_t from_range; } // namespace base -#endif // BASE_RANGES_FROM_RANGE_H_ +#endif // BASE_TYPES_CXX23_FROM_RANGE_H_ diff --git a/naiveproxy/src/base/types/expected_macros.h b/naiveproxy/src/base/types/expected_macros.h index 44cf8e3cc8..5b065ca1f4 100644 --- a/naiveproxy/src/base/types/expected_macros.h +++ b/naiveproxy/src/base/types/expected_macros.h @@ -5,35 +5,53 @@ #ifndef BASE_TYPES_EXPECTED_MACROS_H_ #define BASE_TYPES_EXPECTED_MACROS_H_ +#include #include +#include #include #include #include #include "base/compiler_specific.h" #include "base/macros/concat.h" +#include "base/macros/if.h" +#include "base/macros/is_empty.h" #include "base/macros/remove_parens.h" #include "base/macros/uniquify.h" #include "base/memory/raw_ptr_exclusion.h" #include "base/types/expected.h" +#include "base/types/is_instantiation.h" -// Executes an expression `rexpr` that returns a `base::expected`. If the -// result is an error, causes the calling function to return. If no additional -// arguments are given, the function return value is the `E` returned by -// `rexpr`. Otherwise, the additional arguments are treated as an invocable that -// expects an E as its last argument and returns some type (including `void`) -// convertible to the function's return type; that is, the function returns the -// result of `std::invoke(..., E)`. +// Executes an expression `rexpr` that returns an `expected` or +// `std::optional`. // -// This works with move-only types and can be used in functions that return -// either an `E` directly or a `base::expected`, without needing to -// explicitly wrap the return in `base::unexpected`. +// For the `expected` case: +// If the result is an error, causes the calling function to return. If no +// additional arguments are given, the function return value is the `E` +// returned by `rexpr`. Otherwise, the additional arguments are treated as an +// invocable that expects an E as its last argument and returns some type +// (including `void`) convertible to the function's return type; that is, the +// function returns the result of `std::invoke(..., E)` on the additional +// arguments. +// +// This works with move-only types and can be used in functions that return +// either an `E` directly or a `base::expected`, without needing to +// explicitly wrap the return in `base::unexpected`. +// +// For the `std::optional` case: +// If the result is `std::nullopt`, causes the calling function to return. If +// no additional arguments are given, the function return value is the return +// value of `rexpr` (i.e. an unbound `std::optional`). Otherwise, the +// additional arguments are treated as an invocable that returns some type +// (including `void`) convertible to the function's return type; that is, the +// function returns the result of `std::invoke(...)` on the additional +// arguments. // // # Interface // // `RETURN_IF_ERROR(rexpr, ...);` // -// # Examples +// # Examples for the `expected` case // // Use with no additional arguments: // ``` @@ -91,13 +109,41 @@ // ``` // RETURN_IF_ERROR(TryProcessing(query), &MyClass::FailureHandler, this); // ``` -#define RETURN_IF_ERROR(rexpr, ...) \ - BASE_INTERNAL_EXPECTED_RETURN_IF_ERROR_IMPL(return, rexpr, __VA_ARGS__) +// +// # Modified examples for the `std::optional` case +// +// Use with no additional arguments: +// ``` +// std::optional Foo() { +// RETURN_IF_ERROR(Function(args...)); +// RETURN_IF_ERROR(obj.Method(args...)); +// return 17; +// } +// ``` +// +// Returning some kind of error: +// ``` +// RETURN_IF_ERROR(TryProcessing(query), +// [] { return SomeErrorCode::kFail); }); +// ``` +// +// Returning void: +// ``` +// RETURN_IF_ERROR(TryProcessing(query), [] {}); +// ``` +// ``` +// RETURN_IF_ERROR(TryProcessing(query), [] { LOG(WARNING) << "Uh oh"; }()); +// ``` +#define RETURN_IF_ERROR(rexpr, ...) \ + BASE_INTERNAL_EXPECTED_PASS_ARGS(BASE_INTERNAL_EXPECTED_RETURN_IF_ERROR, \ + BASE_UNIQUIFY(_expected_value), rexpr, \ + __VA_ARGS__) -// Executes an expression `rexpr` that returns a `base::expected`. If the -// result is an expected value, moves the `T` into whatever `lhs` defines/refers -// to; otherwise, behaves like RETURN_IF_ERROR() above. Avoid side effects in -// `lhs`, as it will not be evaluated in the error case. +// Executes an expression `rexpr` that returns an `expected` or +// `std::optional`. If the result is not an error/`std::nullopt` +// (respectively), moves the `T` into whatever `lhs` defines/refers to; +// otherwise, behaves like RETURN_IF_ERROR() above. Avoid side effects in `lhs`, +// as it will not be evaluated in the error case. // // # Interface // @@ -110,7 +156,7 @@ // WARNING: Expands into multiple statements; cannot be used in a single // statement (e.g. as the body of an `if` statement without `{}`)! // -// # Examples +// # Examples for the `expected` case // // Declaring and initializing a new variable (ValueType can be anything that can // be initialized with assignment): @@ -192,8 +238,27 @@ // ASSIGN_OR_RETURN(ValueType value, MaybeGetValue(query), // &MyClass::FailureHandler, this); // ``` -#define ASSIGN_OR_RETURN(lhs, rexpr, ...) \ - BASE_INTERNAL_EXPECTED_ASSIGN_OR_RETURN_IMPL(return, lhs, rexpr, __VA_ARGS__) +// +// # Modified examples for the `std::optional` case +// +// Returning some kind of error: +// ``` +// ASSIGN_OR_RETURN(ValueType value, MaybeGetValue(query), +// [] { return SomeErrorCode::kFail); }); +// ``` +// +// Returning void: +// ``` +// ASSIGN_OR_RETURN(ValueType value, MaybeGetValue(query), [] {}); +// ``` +// ``` +// ASSIGN_OR_RETURN(ValueType value, MaybeGetValue(query), +// [] { LOG(WARNING) << "Uh oh"; }()); +// ``` +#define ASSIGN_OR_RETURN(lhs, rexpr, ...) \ + BASE_INTERNAL_EXPECTED_PASS_ARGS(BASE_INTERNAL_EXPECTED_ASSIGN_OR_RETURN, \ + lhs, BASE_UNIQUIFY(_expected_value), rexpr, \ + __VA_ARGS__) namespace base::internal { @@ -205,18 +270,20 @@ namespace base::internal { // the error of an `expected`. Supports move-only `E`, as well as `void`. // // In order to support `void` return types, `UnexpectedDeducer` is not -// constructed directly from an `E`, but from a lambda that returns `E`; and +// constructed directly with an `E`, but with a lambda that returns `E`; and // callers must return `Ret()` rather than returning the deducer itself. Using // both these indirections allows consistent invocation from macros. -template > +template > class UnexpectedDeducer { public: - constexpr explicit UnexpectedDeducer(Lambda&& lambda) noexcept - : lambda_(std::move(lambda)) {} + constexpr UnexpectedDeducer(Lambda&& lambda, Arg&& arg) noexcept + : lambda_(std::move(lambda)), arg_(std::move(arg)) {} constexpr decltype(auto) Ret() && noexcept { if constexpr (std::is_void_v) { - std::move(lambda_)(); + std::move(lambda_)(std::move(arg_)); } else { return std::move(*this); } @@ -226,11 +293,32 @@ class UnexpectedDeducer { // arbitrary `T`) or `E`. template // NOLINTNEXTLINE(google-explicit-constructor) - constexpr operator expected() && noexcept { - return expected(unexpect, std::move(lambda_)()); + constexpr operator expected() && noexcept + requires(!std::is_void_v) + { + return expected(unexpect, std::move(lambda_)(std::move(arg_))); } // NOLINTNEXTLINE(google-explicit-constructor) - constexpr operator E() && noexcept { return std::move(lambda_)(); } + constexpr operator E() && noexcept + requires(!std::is_void_v) + { + return std::move(lambda_)(std::move(arg_)); + } + + // Disallow implicit conversion to `std::optional`. Either `E` is already + // a type that can convert to this and this is unnecessary due to the + // conversion operator above, or `E` is some other type and we're discarding + // whatever was in it. Theoretically this might not be an information loss if + // e.g. `E` is an unbound `std::optional`, but it seems better to force + // people to match types in this case. Also note that since `E` isn't + // convertible, this would be a compile error even without deleting this + // function; but deleting it makes it clear this isn't an omission in this + // code, but behavior we explicitly don't want to support. + template + // NOLINTNEXTLINE(google-explicit-constructor) + constexpr operator std::optional() && noexcept + requires(!std::is_void_v && !std::convertible_to>) + = delete; // Use an adapter that returns this type. private: // RAW_PTR_EXCLUSION: Not intended to handle &&-qualified members. @@ -238,74 +326,84 @@ class UnexpectedDeducer { // copying and other overhead; using raw_ptr/ref goes against this design // without adding meaningful safety. RAW_PTR_EXCLUSION Lambda&& lambda_; + RAW_PTR_EXCLUSION Arg&& arg_; }; // Deduce the type of the lambda automatically so callers don't need to spell // things twice (or use temps) and use decltype. -template -UnexpectedDeducer(Lambda) -> UnexpectedDeducer; +template +UnexpectedDeducer(Lambda, Arg) -> UnexpectedDeducer; + +// Workaround for https://github.com/llvm/llvm-project/issues/58872: Indirect +// through an extra layer so if the compiler attempts to instantiate both arms +// of the constexpr if in `BASE_INTERNAL_EXPECTED_BODY`, it will succeed. +// TODO(https://github.com/llvm/llvm-project/issues/58872): Remove this struct +// and the constructions of it below, and let them invoke `__VA_ARGS__` +// directly. +struct Trampoline { + template + constexpr auto operator()(Args&&... args) const noexcept { + // Should always succeed if this is actually reached at runtime. + if constexpr (std::is_invocable_v) { + return std::invoke(std::forward(args)...); + } + } +}; } // namespace base::internal -#define BASE_INTERNAL_EXPECTED_BODY(expected, rexpr, name, return_keyword, \ - error_expr) \ - decltype(auto) expected = (rexpr); \ - { \ - static_assert(base::internal::IsExpected, \ - #name " should only be used with base::expected<>"); \ - } \ - if (!expected.has_value()) [[unlikely]] { \ - return_keyword base::internal::UnexpectedDeducer([&] { \ - return error_expr; \ - }).Ret(); \ - } - -#define BASE_INTERNAL_EXPECTED_RETURN_IF_ERROR(expected, rexpr, \ - return_keyword, error_expr) \ - do { \ - BASE_INTERNAL_EXPECTED_BODY(expected, rexpr, RETURN_IF_ERROR, \ - return_keyword, error_expr); \ - } while (false) - -#define BASE_INTERNAL_EXPECTED_ASSIGN_OR_RETURN( \ - expected, rexpr, return_keyword, error_expr, lhs) \ - BASE_INTERNAL_EXPECTED_BODY(expected, rexpr, ASSIGN_OR_RETURN, \ - return_keyword, error_expr); \ - { \ - constexpr auto lhs_v = std::string_view(#lhs); \ - static_assert(!(lhs_v.front() == '(' && lhs_v.back() == ')' && \ - lhs_v.rfind('?') != std::string_view::npos), \ - "Identified possible ternary in `lhs`; avoid passing " \ - "parenthesized expressions containing '?' to the first " \ - "argument of ASSIGN_OR_RETURN()"); \ - } \ - BASE_REMOVE_PARENS(lhs) = std::move(expected).value(); - #define BASE_INTERNAL_EXPECTED_PASS_ARGS(func, ...) func(__VA_ARGS__) -// These are necessary to avoid mismatched parens inside __VA_OPT__() below. -#define BASE_INTERNAL_EXPECTED_BEGIN_INVOKE std::invoke( -#define BASE_INTERNAL_EXPECTED_END_INVOKE ) +#define BASE_INTERNAL_EXPECTED_BODY(expected, rexpr, name, ...) \ + auto expected = (rexpr); \ + { \ + static_assert( \ + base::internal::IsExpected || \ + base::is_instantiation, \ + #name \ + " should only be used with base::expected<> or std::optional<>"); \ + } \ + if (!expected.has_value()) [[unlikely]] { \ + /* Pass `expected` as an arg rather than capturing, so the lambda body */ \ + /* is a template context, so `constexpr if` avoids instantiating the */ \ + /* non-matching arm, since it won't compile otherwise. */ \ + return base::internal::UnexpectedDeducer( \ + [&](auto&& base_internal_expected__) { \ + if constexpr (base::internal::IsExpected< \ + decltype(base_internal_expected__)>) { \ + return BASE_IF( \ + BASE_IS_EMPTY(__VA_ARGS__), \ + std::move(base_internal_expected__).error(), \ + std::invoke( \ + base::internal::Trampoline(), __VA_ARGS__, \ + std::move(base_internal_expected__).error())); \ + } else { \ + return BASE_IF(BASE_IS_EMPTY(__VA_ARGS__), \ + std::move(base_internal_expected__), \ + std::invoke(base::internal::Trampoline(), \ + __VA_ARGS__)); \ + } \ + }, \ + std::move(expected)) \ + .Ret(); \ + } -#define BASE_INTERNAL_EXPECTED_ARGS(temp_name, return_keyword, rexpr, ...) \ - temp_name, rexpr, return_keyword, \ - (__VA_OPT__(BASE_INTERNAL_EXPECTED_BEGIN_INVOKE) \ - __VA_ARGS__ __VA_OPT__(, ) std::move(temp_name) \ - .error() __VA_OPT__(BASE_INTERNAL_EXPECTED_END_INVOKE)) +#define BASE_INTERNAL_EXPECTED_RETURN_IF_ERROR(expected, rexpr, ...) \ + do { \ + BASE_INTERNAL_EXPECTED_BODY(expected, rexpr, RETURN_IF_ERROR, \ + __VA_ARGS__); \ + } while (false) -#define BASE_INTERNAL_EXPECTED_RETURN_IF_ERROR_IMPL(return_keyword, rexpr, \ - ...) \ - BASE_INTERNAL_EXPECTED_PASS_ARGS( \ - BASE_INTERNAL_EXPECTED_RETURN_IF_ERROR, \ - BASE_INTERNAL_EXPECTED_ARGS(BASE_UNIQUIFY(_expected_value), \ - return_keyword, rexpr, __VA_ARGS__)) - -#define BASE_INTERNAL_EXPECTED_ASSIGN_OR_RETURN_IMPL(return_keyword, lhs, \ - rexpr, ...) \ - BASE_INTERNAL_EXPECTED_PASS_ARGS( \ - BASE_INTERNAL_EXPECTED_ASSIGN_OR_RETURN, \ - BASE_INTERNAL_EXPECTED_ARGS(BASE_UNIQUIFY(_expected_value), \ - return_keyword, rexpr, __VA_ARGS__), \ - lhs) +#define BASE_INTERNAL_EXPECTED_ASSIGN_OR_RETURN(lhs, expected, rexpr, ...) \ + { \ + constexpr auto lhs_v = std::string_view(#lhs); \ + static_assert(!(lhs_v.front() == '(' && lhs_v.back() == ')' && \ + lhs_v.rfind('?') != std::string_view::npos), \ + "Identified possible ternary in `lhs`; avoid passing " \ + "parenthesized expressions containing '?' to the first " \ + "argument of ASSIGN_OR_RETURN()"); \ + } \ + BASE_INTERNAL_EXPECTED_BODY(expected, rexpr, ASSIGN_OR_RETURN, __VA_ARGS__); \ + BASE_REMOVE_PARENS(lhs) = std::move(expected).value(); #endif // BASE_TYPES_EXPECTED_MACROS_H_ diff --git a/naiveproxy/src/base/types/expected_macros_nocompile.nc b/naiveproxy/src/base/types/expected_macros_nocompile.nc index 4b737fdcda..d85dcb2ee8 100644 --- a/naiveproxy/src/base/types/expected_macros_nocompile.nc +++ b/naiveproxy/src/base/types/expected_macros_nocompile.nc @@ -11,6 +11,12 @@ namespace base { +std::optional func(); +std::optional ReturnsDifferentOptional() { + RETURN_IF_ERROR(func()); // expected-error-re {{conversion function {{.*}} invokes a deleted function}} + return "Hello"; +} + base::expected TernaryInAssignOrReturn() { base::expected e = base::ok(1); int a, b; diff --git a/naiveproxy/src/base/types/id_type.h b/naiveproxy/src/base/types/id_type.h index fad3fdead3..64ed8241e7 100644 --- a/naiveproxy/src/base/types/id_type.h +++ b/naiveproxy/src/base/types/id_type.h @@ -5,11 +5,11 @@ #ifndef BASE_TYPES_ID_TYPE_H_ #define BASE_TYPES_ID_TYPE_H_ +#include #include #include #include -#include "base/ranges/algorithm.h" #include "base/types/strong_alias.h" namespace base { @@ -62,22 +62,22 @@ class IdType : public StrongAlias { kExtraInvalidValues...}; static_assert(std::is_unsigned_v || - base::ranges::all_of(kAllInvalidValues, - [](WrappedType v) { return v <= 0; }), + std::ranges::all_of(kAllInvalidValues, + [](WrappedType v) { return v <= 0; }), "If signed, invalid values should be negative or equal to zero " "to avoid overflow issues."); - static_assert(base::ranges::all_of(kAllInvalidValues, - [](WrappedType v) { - return kFirstGeneratedId != v; - }), + static_assert(std::ranges::all_of(kAllInvalidValues, + [](WrappedType v) { + return kFirstGeneratedId != v; + }), "The first generated ID cannot be invalid."); static_assert(std::is_unsigned_v || - base::ranges::all_of(kAllInvalidValues, - [](WrappedType v) { - return kFirstGeneratedId > v; - }), + std::ranges::all_of(kAllInvalidValues, + [](WrappedType v) { + return kFirstGeneratedId > v; + }), "If signed, the first generated ID must be greater than all " "invalid values so that the monotonically increasing " "GenerateNextId method will never return an invalid value."); @@ -106,7 +106,7 @@ class IdType : public StrongAlias { : StrongAlias::StrongAlias(kInvalidValue) {} constexpr bool is_null() const { - return base::ranges::any_of(kAllInvalidValues, [this](WrappedType value) { + return std::ranges::any_of(kAllInvalidValues, [this](WrappedType value) { return this->value() == value; }); } diff --git a/naiveproxy/src/base/unguessable_token.h b/naiveproxy/src/base/unguessable_token.h index 2021d4b35e..b54cb90a9a 100644 --- a/naiveproxy/src/base/unguessable_token.h +++ b/naiveproxy/src/base/unguessable_token.h @@ -11,7 +11,6 @@ #include #include #include -#include #include "base/base_export.h" #include "base/check.h" diff --git a/naiveproxy/src/base/uuid.cc b/naiveproxy/src/base/uuid.cc index a5abd72436..894ac90d42 100644 --- a/naiveproxy/src/base/uuid.cc +++ b/naiveproxy/src/base/uuid.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "base/uuid.h" #include diff --git a/naiveproxy/src/base/value_iterators.cc b/naiveproxy/src/base/value_iterators.cc index b408ec2eb8..9fe451f86f 100644 --- a/naiveproxy/src/base/value_iterators.cc +++ b/naiveproxy/src/base/value_iterators.cc @@ -6,9 +6,7 @@ #include "base/values.h" -namespace base { - -namespace detail { +namespace base::detail { // ---------------------------------------------------------------------------- // dict_iterator. @@ -27,11 +25,11 @@ dict_iterator& dict_iterator::operator=(const dict_iterator& dict_iter) = dict_iterator::~dict_iterator() = default; -dict_iterator::reference dict_iterator::operator*() { +dict_iterator::reference dict_iterator::operator*() const { return {dict_iter_->first, *dict_iter_->second}; } -dict_iterator::pointer dict_iterator::operator->() { +dict_iterator::pointer dict_iterator::operator->() const { return pointer(operator*()); } @@ -123,6 +121,4 @@ bool operator!=(const const_dict_iterator& lhs, return !(lhs == rhs); } -} // namespace detail - -} // namespace base +} // namespace base::detail diff --git a/naiveproxy/src/base/value_iterators.h b/naiveproxy/src/base/value_iterators.h index ab5c2cc179..49d78085dc 100644 --- a/naiveproxy/src/base/value_iterators.h +++ b/naiveproxy/src/base/value_iterators.h @@ -24,14 +24,13 @@ using DictStorage = base::flat_map>; // This iterator closely resembles DictStorage::iterator, with one // important exception. It abstracts the underlying unique_ptr away, meaning its -// value_type is std::pair. It's reference type is a -// std::pair, so that callers have read-write -// access without incurring a copy. +// reference type is a std::pair, so that callers +// have read-write access without incurring a copy. class BASE_EXPORT dict_iterator { public: using difference_type = DictStorage::iterator::difference_type; - using value_type = std::pair; - using reference = std::pair; + using value_type = std::pair; + using reference = value_type; using iterator_category = std::bidirectional_iterator_tag; class pointer { @@ -52,8 +51,8 @@ class BASE_EXPORT dict_iterator { dict_iterator& operator=(const dict_iterator& dict_iter); ~dict_iterator(); - reference operator*(); - pointer operator->(); + reference operator*() const; + pointer operator->() const; dict_iterator& operator++(); dict_iterator operator++(int); @@ -80,14 +79,13 @@ class BASE_EXPORT dict_iterator { // This iterator closely resembles DictStorage::const_iterator, with one // important exception. It abstracts the underlying unique_ptr away, meaning its -// value_type is std::pair. It's reference type is a -// std::pair, so that callers have read-only -// access without incurring a copy. +// reference type is a std::pair, so that +// callers have read-only access without incurring a copy. class BASE_EXPORT const_dict_iterator { public: using difference_type = DictStorage::const_iterator::difference_type; - using value_type = std::pair; - using reference = std::pair; + using value_type = std::pair; + using reference = value_type; using iterator_category = std::bidirectional_iterator_tag; class pointer { diff --git a/naiveproxy/src/base/values.cc b/naiveproxy/src/base/values.cc index 292c82605c..f2d86f9d37 100644 --- a/naiveproxy/src/base/values.cc +++ b/naiveproxy/src/base/values.cc @@ -4,6 +4,7 @@ #include "base/values.h" +#include #include #include #include @@ -22,7 +23,6 @@ #include "base/logging.h" #include "base/memory/ptr_util.h" #include "base/notreached.h" -#include "base/ranges/algorithm.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" #include "base/trace_event/base_tracing.h" @@ -199,7 +199,7 @@ Value::Value(base::span value) : data_(absl::in_place_type_t(), value.size()) { // This is 100x faster than using the "range" constructor for a 512k blob: // crbug.com/1343636 - ranges::copy(value, absl::get(data_).data()); + std::ranges::copy(value, absl::get(data_).data()); } Value::Value(BlobStorage&& value) noexcept : data_(std::move(value)) {} @@ -938,7 +938,8 @@ void Value::Dict::WriteIntoTrace(perfetto::TracedValue context) const { bool operator==(const Value::Dict& lhs, const Value::Dict& rhs) { auto deref_2nd = [](const auto& p) { return std::tie(p.first, *p.second); }; - return ranges::equal(lhs.storage_, rhs.storage_, {}, deref_2nd, deref_2nd); + return std::ranges::equal(lhs.storage_, rhs.storage_, {}, deref_2nd, + deref_2nd); } bool operator!=(const Value::Dict& lhs, const Value::Dict& rhs) { @@ -947,8 +948,8 @@ bool operator!=(const Value::Dict& lhs, const Value::Dict& rhs) { bool operator<(const Value::Dict& lhs, const Value::Dict& rhs) { auto deref_2nd = [](const auto& p) { return std::tie(p.first, *p.second); }; - return ranges::lexicographical_compare(lhs.storage_, rhs.storage_, {}, - deref_2nd, deref_2nd); + return std::ranges::lexicographical_compare(lhs.storage_, rhs.storage_, {}, + deref_2nd, deref_2nd); } bool operator>(const Value::Dict& lhs, const Value::Dict& rhs) { @@ -1079,6 +1080,38 @@ Value& Value::List::operator[](size_t index) { return storage_[index]; } +bool Value::List::contains(bool val) const { + return contains(val, &Value::is_bool, &Value::GetBool); +} + +bool Value::List::contains(int val) const { + return contains(val, &Value::is_int, &Value::GetInt); +} + +bool Value::List::contains(double val) const { + return contains(val, &Value::is_double, &Value::GetDouble); +} + +bool Value::List::contains(std::string_view val) const { + return contains(val, &Value::is_string, &Value::GetString); +} + +bool Value::List::contains(const char* val) const { + return contains(std::string_view(val), &Value::is_string, &Value::GetString); +} + +bool Value::List::contains(const BlobStorage& val) const { + return contains(val, &Value::is_blob, &Value::GetBlob); +} + +bool Value::List::contains(const Dict& val) const { + return contains(val, &Value::is_dict, &Value::GetDict); +} + +bool Value::List::contains(const List& val) const { + return contains(val, &Value::is_list, &Value::GetList); +} + void Value::List::clear() { storage_.clear(); } diff --git a/naiveproxy/src/base/values.h b/naiveproxy/src/base/values.h index c782e9cc29..d366fd7aca 100644 --- a/naiveproxy/src/base/values.h +++ b/naiveproxy/src/base/values.h @@ -8,7 +8,9 @@ #include #include +#include #include +#include #include #include #include @@ -137,9 +139,9 @@ namespace base { // Lists support: // - `empty()`, `size()`, `begin()`, `end()`, `cbegin()`, `cend()`, // `rbegin()`, `rend()`, `front()`, `back()`, `reserve()`, `operator[]`, -// `clear()`, `erase()`: Identical to the STL container equivalents, with -// additional safety checks, e.g. `operator[]` will `CHECK()` if the index -// is out of range. +// `contains()`, `clear()`, `erase()`: Identical to the STL container +// equivalents, with additional safety checks, e.g. `operator[]` will +// `CHECK()` if the index is out of range. // - `Clone()`: Create a deep copy. // - `Append()`: Append a value to the end of the list. Accepts `Value` or any // of the subtypes that `Value` can hold. @@ -700,6 +702,18 @@ class BASE_EXPORT GSL_OWNER Value { const Value& operator[](size_t index) const; Value& operator[](size_t index); + // Returns true if the specified `val` is present in the list. + bool contains(bool val) const; + bool contains(int val) const; + bool contains(double val) const; + // Note: std::u16string_view overload intentionally omitted: Value + // internally stores strings as UTF-8. + bool contains(std::string_view val) const; + bool contains(const char* val) const; + bool contains(const BlobStorage& val) const; + bool contains(const Dict& val) const; + bool contains(const List& val) const; + // Removes all value from this list. REINITIALIZES_AFTER_MOVE void clear(); @@ -805,6 +819,17 @@ class BASE_EXPORT GSL_OWNER Value { explicit List(const std::vector& storage); + // Shared implementation of public `contains()` methods. + template + requires std::equality_comparable_with + bool contains(const T& val, + bool (Value::*test)() const, + R (Value::*get)() const) const { + return std::ranges::any_of(storage_, [&](const Value& value) { + return (value.*test)() && (value.*get)() == val; + }); + } + std::vector storage_; }; diff --git a/naiveproxy/src/base/win/com_init_util.cc b/naiveproxy/src/base/win/com_init_util.cc index f12e284437..0c0ae7f1a6 100644 --- a/naiveproxy/src/base/win/com_init_util.cc +++ b/naiveproxy/src/base/win/com_init_util.cc @@ -39,7 +39,7 @@ struct OleTlsData { }; OleTlsData* GetOleTlsData() { - TEB* teb = NtCurrentTeb(); + ::TEB* teb = NtCurrentTeb(); return reinterpret_cast(teb->ReservedForOle); } diff --git a/naiveproxy/src/base/win/default_apps_util.cc b/naiveproxy/src/base/win/default_apps_util.cc index 8f5e1cdbd8..1446e716f0 100644 --- a/naiveproxy/src/base/win/default_apps_util.cc +++ b/naiveproxy/src/base/win/default_apps_util.cc @@ -51,13 +51,14 @@ bool LaunchDefaultAppsSettingsModernDialog(std::wstring_view protocol) { } DWORD pid = 0; - CoAllowSetForegroundWindow(activator.Get(), nullptr); + ::CoAllowSetForegroundWindow(activator.Get(), nullptr); hr = activator->ActivateApplication( kControlPanelAppModelId, L"page=SettingsPageAppsDefaults", AO_NONE, &pid); if (FAILED(hr)) { return false; } - if (protocol.empty()) { + // Scrolling to a specific protocol is only possible on Windows 10. + if (protocol.empty() || GetVersion() >= Version::WIN11) { return true; } diff --git a/naiveproxy/src/base/win/default_apps_util.h b/naiveproxy/src/base/win/default_apps_util.h index 1634f549d6..65f6836fcf 100644 --- a/naiveproxy/src/base/win/default_apps_util.h +++ b/naiveproxy/src/base/win/default_apps_util.h @@ -12,9 +12,9 @@ namespace base::win { // Launches the Windows 'settings' modern app with the 'default apps' view -// focused. If `protocol` is not empty, it also highlights the `protocol` in -// the dialog. Returns true if the default apps dialog was successfully opened, -// and the `protocol`, if not empty, was highlighted. +// focused. On Windows 10, if `protocol` is not empty, it also highlights +// the `protocol` in the dialog. Returns true if the default apps dialog was +// successfully opened, and the `protocol`, if not empty, was highlighted. BASE_EXPORT bool LaunchDefaultAppsSettingsModernDialog( std::wstring_view protocol); diff --git a/naiveproxy/src/base/win/embedded_i18n/language_selector.cc b/naiveproxy/src/base/win/embedded_i18n/language_selector.cc index 282908b885..7bc4305aad 100644 --- a/naiveproxy/src/base/win/embedded_i18n/language_selector.cc +++ b/naiveproxy/src/base/win/embedded_i18n/language_selector.cc @@ -15,7 +15,6 @@ #include "base/check_op.h" #include "base/memory/raw_ptr.h" -#include "base/ranges/algorithm.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" #include "base/win/i18n.h" @@ -49,7 +48,7 @@ struct AvailableLanguageAliases { bool IsArraySortedAndLowerCased(span languages_to_offset) { return std::is_sorted(languages_to_offset.begin(), languages_to_offset.end()) && - base::ranges::all_of(languages_to_offset, [](const auto& lang) { + std::ranges::all_of(languages_to_offset, [](const auto& lang) { auto language = AsStringPiece16(lang.first); return ToLowerASCII(language) == language; }); diff --git a/naiveproxy/src/base/win/object_watcher.cc b/naiveproxy/src/base/win/object_watcher.cc index 6e528a477e..642e55100b 100644 --- a/naiveproxy/src/base/win/object_watcher.cc +++ b/naiveproxy/src/base/win/object_watcher.cc @@ -13,6 +13,7 @@ #include "base/synchronization/waitable_event.h" #include "base/task/sequenced_task_runner.h" #include "base/threading/thread_restrictions.h" +#include "base/trace_event/base_tracing.h" namespace base { namespace win { @@ -52,17 +53,22 @@ bool ObjectWatcher::StopWatching() { // INVALID_HANDLE_VALUE to wait on all callback functions seemlingly waits // on other callbacks in the threadpool; not just callbacks from // RegisterWaitForSingleObject. - WaitableEvent event; - if (!UnregisterWaitEx(wait_object_, event.handle())) { - // ERROR_IO_PENDING is not a fatal error; see - // https://learn.microsoft.com/en-us/windows/win32/sync/unregisterwaitex. - if (const auto error = ::GetLastError(); error != ERROR_IO_PENDING) { - DPLOG(FATAL) << "UnregisterWaitEx failed"; - return false; + { + // Measure the total cost of calling UnregisterWaitEx, including creation of + // and waiting on the event. + TRACE_EVENT("base", "UnregisterWaitEx"); + WaitableEvent event; + if (!UnregisterWaitEx(wait_object_, event.handle())) { + // ERROR_IO_PENDING is not a fatal error; see + // https://learn.microsoft.com/en-us/windows/win32/sync/unregisterwaitex. + if (const auto error = ::GetLastError(); error != ERROR_IO_PENDING) { + DPLOG(FATAL) << "UnregisterWaitEx failed"; + return false; + } } + // Wait for unregistration to complete. + event.Wait(); } - // Wait for unregistration to complete. - event.Wait(); Reset(); return true; } @@ -121,6 +127,7 @@ bool ObjectWatcher::StartWatchingInternal(HANDLE object, base::UnsafeDanglingUntriaged(delegate)); object_ = object; + TRACE_EVENT("base", "RegisterWaitForSingleObject"); if (!RegisterWaitForSingleObject(&wait_object_, object, DoneWaiting, this, INFINITE, wait_flags)) { DPLOG(FATAL) << "RegisterWaitForSingleObject failed"; diff --git a/naiveproxy/src/base/win/scoped_gdi_object.h b/naiveproxy/src/base/win/scoped_gdi_object.h index 6c64e8ac5e..def6bf4314 100644 --- a/naiveproxy/src/base/win/scoped_gdi_object.h +++ b/naiveproxy/src/base/win/scoped_gdi_object.h @@ -10,6 +10,25 @@ #include "base/types/always_false.h" #include "base/win/win_handle_types.h" +// Defines `ScopedGDIObject`, an RAII helper for GDI objects. Use like +// ``` +// ScopedGDIObject scoped_bitmap(ReturnsHBITMAP(...)); +// DoSomething(scoped_bitmap.get()); +// // At end of scope, scoper auto-calls ::DeleteObject(). +// ``` +// +// For full API documentation, see the docs for ScopedGeneric. +// +// This is specialized for the following types: +// HBITMAP +// HBRUSH +// HFONT +// HICON - Calls ::DestroyIcon() instead of ::DeleteObject() +// HPEN +// HRGN +// To add more types, add to the DECLARE_TRAIT_SPECIALIZATIONs below and the +// corresponding DEFINE_TRAIT_SPECIALIZATIONs in the .cc file. + namespace base::win { namespace internal { @@ -38,16 +57,9 @@ DECLARE_TRAIT_SPECIALIZATION(HRGN) } // namespace internal -// Like ScopedHandle but for GDI objects. template using ScopedGDIObject = ScopedGeneric>; -// Typedefs for some common use cases. -typedef ScopedGDIObject ScopedBitmap; -typedef ScopedGDIObject ScopedRegion; -typedef ScopedGDIObject ScopedHFONT; -typedef ScopedGDIObject ScopedHICON; - } // namespace base::win #endif // BASE_WIN_SCOPED_GDI_OBJECT_H_ diff --git a/naiveproxy/src/base/win/sid.cc b/naiveproxy/src/base/win/sid.cc index 6b5d9b1e49..6a91e984f5 100644 --- a/naiveproxy/src/base/win/sid.cc +++ b/naiveproxy/src/base/win/sid.cc @@ -17,6 +17,7 @@ #include #include +#include #include #include #include @@ -24,7 +25,6 @@ #include "base/check.h" #include "base/no_destructor.h" #include "base/rand_util.h" -#include "base/ranges/algorithm.h" #include "base/strings/string_util_win.h" #include "base/win/scoped_handle.h" #include "base/win/scoped_localalloc.h" @@ -258,23 +258,23 @@ std::optional> Sid::FromSddlStringVector( std::vector Sid::FromNamedCapabilityVector( const std::vector& capability_names) { std::vector sids; - ranges::transform(capability_names, std::back_inserter(sids), - FromNamedCapability); + std::ranges::transform(capability_names, std::back_inserter(sids), + FromNamedCapability); return sids; } std::vector Sid::FromKnownCapabilityVector( const std::vector& capabilities) { std::vector sids; - ranges::transform(capabilities, std::back_inserter(sids), - FromKnownCapability); + std::ranges::transform(capabilities, std::back_inserter(sids), + FromKnownCapability); return sids; } std::vector Sid::FromKnownSidVector( const std::vector& known_sids) { std::vector sids; - ranges::transform(known_sids, std::back_inserter(sids), FromKnownSid); + std::ranges::transform(known_sids, std::back_inserter(sids), FromKnownSid); return sids; } diff --git a/naiveproxy/src/base/win/vector.h b/naiveproxy/src/base/win/vector.h index 27c69cecc1..7ec11dab45 100644 --- a/naiveproxy/src/base/win/vector.h +++ b/naiveproxy/src/base/win/vector.h @@ -17,7 +17,6 @@ #include "base/base_export.h" #include "base/check_op.h" #include "base/containers/flat_map.h" -#include "base/ranges/algorithm.h" #include "base/win/winrt_foundation_helpers.h" namespace base { @@ -254,7 +253,7 @@ class Vector } IFACEMETHODIMP IndexOf(AbiT value, unsigned* index, boolean* found) override { - auto iter = base::ranges::find_if(vector_, [&value](const StorageT& elem) { + auto iter = std::ranges::find_if(vector_, [&value](const StorageT& elem) { return internal::IsEqual(elem, value); }); *index = iter != vector_.end() ? std::distance(vector_.begin(), iter) : 0; diff --git a/naiveproxy/src/base/win/win_util.cc b/naiveproxy/src/base/win/win_util.cc index f66d6107ba..2e0d6cdefa 100644 --- a/naiveproxy/src/base/win/win_util.cc +++ b/naiveproxy/src/base/win/win_util.cc @@ -14,12 +14,14 @@ #include #include #include +#include #include #include #include #include #include +#include #include #include #include @@ -46,7 +48,12 @@ #include #include "base/base_switches.h" +#include "base/check_op.h" #include "base/command_line.h" +#include "base/containers/heap_array.h" +#include "base/debug/alias.h" +#include "base/debug/crash_logging.h" +#include "base/debug/dump_without_crashing.h" #include "base/files/file_path.h" #include "base/logging.h" #include "base/metrics/histogram_functions.h" @@ -776,6 +783,22 @@ bool IsDeviceUsedAsATablet(std::string* reason) { } } + // If the device is not supporting rotation, it's unlikely to be a tablet, + // a convertible or a detachable. + // See + // https://msdn.microsoft.com/en-us/library/windows/desktop/dn629263(v=vs.85).aspx + using GetAutoRotationStateType = decltype(GetAutoRotationState)*; + static const auto get_auto_rotation_state_func = + reinterpret_cast( + GetUser32FunctionPointer("GetAutoRotationState")); + if (get_auto_rotation_state_func) { + AR_STATE rotation_state = AR_ENABLED; + if (get_auto_rotation_state_func(&rotation_state) && + (rotation_state & (AR_NOT_SUPPORTED | AR_LAPTOP | AR_NOSENSOR)) != 0) { + return ret.value_or(false); + } + } + // PlatformRoleSlate was added in Windows 8+. POWER_PLATFORM_ROLE role = GetPlatformRole(); bool is_tablet = false; @@ -1048,6 +1071,56 @@ std::optional ExpandEnvironmentVariables(wcstring_view str) { return std::nullopt; } +expected GetObjectTypeName(HANDLE handle) { + if (!HandleTraits::IsHandleValid(handle)) { + return unexpected(STATUS_INVALID_HANDLE); + } + + // The buffer must be large enough to hold the type info struct plus the type + // string and its terminator. Allocate a buffer large enough to hold a type + // name of 31 characters. This is far larger than the 13 chars needed for + // "WindowStation". + static constexpr size_t kMaxTypeNameLength = 31; + static constexpr size_t kBufferSize = + sizeof(PUBLIC_OBJECT_TYPE_INFORMATION) + + (kMaxTypeNameLength + 1) * sizeof(wchar_t); + auto buffer = HeapArray::Uninit(kBufferSize); + auto* type_info = + reinterpret_cast(buffer.data()); + ULONG type_info_length = 0; + if (auto status = + ::NtQueryObject(handle, ObjectTypeInformation, type_info, + static_cast(buffer.size()), &type_info_length); + status != STATUS_SUCCESS) { + if (status == STATUS_INFO_LENGTH_MISMATCH) { + // The call should never fail due to lack of space in the buffer as per + // calculations above. Report the required size in this case so that the + // calculations can be revised. + SCOPED_CRASH_KEY_NUMBER("NtQueryObject", "type_info_length", + type_info_length); + debug::DumpWithoutCrashing(); // https://crbug.com/40071993. + } + return unexpected(status); + } + return std::wstring(type_info->TypeName.Buffer, + type_info->TypeName.Length / sizeof(wchar_t)); +} + +expected TakeHandleOfType( + HANDLE handle, + std::wstring_view object_type_name) { + auto type_name = GetObjectTypeName(handle); + if (!type_name.has_value()) { + // `handle` is invalid. Return the error to the caller. + return unexpected(type_name.error()); + } + // Crash if `handle` is an unexpected type. This represents a dangerous + // type confusion condition that should never happen. + base::debug::Alias(&handle); + CHECK_EQ(*type_name, object_type_name); + return ScopedHandle(handle); // Ownership of `handle` goes to the caller. +} + ScopedDomainStateForTesting::ScopedDomainStateForTesting(bool state) : initial_state_(IsEnrolledToDomain()) { *GetDomainEnrollmentStateStorage() = state; diff --git a/naiveproxy/src/base/win/win_util.h b/naiveproxy/src/base/win/win_util.h index 65f5b3166c..c10538dd39 100644 --- a/naiveproxy/src/base/win/win_util.h +++ b/naiveproxy/src/base/win/win_util.h @@ -33,6 +33,8 @@ #include "base/base_export.h" #include "base/functional/callback_forward.h" #include "base/strings/cstring_view.h" +#include "base/types/expected.h" +#include "base/win/scoped_handle.h" #include "base/win/windows_types.h" struct IPropertyStore; @@ -314,6 +316,21 @@ BASE_EXPORT bool IsAppVerifierLoaded(); BASE_EXPORT std::optional ExpandEnvironmentVariables( wcstring_view str); +// Returns the name of the type of object referenced by `handle` (e.g., +// "Process" or "Section"), or an error code. This function will fail with +// STATUS_INVALID_HANDLE if called with the pseudo handle returned by +// `::GetCurrentProcess()` or `GetCurrentProcessHandle()`. +BASE_EXPORT expected GetObjectTypeName(HANDLE handle); + +// Returns a smart pointer wrapping `handle` if it references an object of type +// `object_type_name`. Crashes the process if `handle` is valid but of an +// unexpected type. This function will fail with STATUS_INVALID_HANDLE if called +// with the pseudo handle returned by `::GetCurrentProcess()` or +// `GetCurrentProcessHandle()`. +BASE_EXPORT expected TakeHandleOfType( + HANDLE handle, + std::wstring_view object_type_name); + // Allows changing the domain enrolled state for the life time of the object. // The original state is restored upon destruction. class BASE_EXPORT ScopedDomainStateForTesting { diff --git a/naiveproxy/src/base/win/windows_types.h b/naiveproxy/src/base/win/windows_types.h index 60a014bfdc..65f917cbab 100644 --- a/naiveproxy/src/base/win/windows_types.h +++ b/naiveproxy/src/base/win/windows_types.h @@ -96,6 +96,7 @@ typedef struct _OVERLAPPED OVERLAPPED; typedef struct tagMSG MSG, *PMSG, *NPMSG, *LPMSG; typedef struct tagTOUCHINPUT TOUCHINPUT; typedef struct tagPOINTER_INFO POINTER_INFO; +typedef struct tagRECT RECT; typedef struct _RTL_SRWLOCK RTL_SRWLOCK; typedef RTL_SRWLOCK SRWLOCK, *PSRWLOCK; diff --git a/naiveproxy/src/build/DEPS b/naiveproxy/src/build/DEPS index 72647dd87d..e31f66182b 100644 --- a/naiveproxy/src/build/DEPS +++ b/naiveproxy/src/build/DEPS @@ -7,10 +7,10 @@ deps = { 'dep_type': 'gcs', 'objects': [ { - 'generation': 1714590045814759, - 'object_name': 'dec7a3a0fc5b83b909cba1b6d119077e0429a138eadef6bf5a0f2e03b1904631', - 'sha256sum': 'dec7a3a0fc5b83b909cba1b6d119077e0429a138eadef6bf5a0f2e03b1904631', - 'size_bytes': 129948576, + 'generation': 1738186811481804, + 'object_name': 'ac6166be1352e9e66a7574e0d6891c90868a564dd26b52ba6595db28cb81c9f1', + 'sha256sum': 'ac6166be1352e9e66a7574e0d6891c90868a564dd26b52ba6595db28cb81c9f1', + 'size_bytes': 19716896, }, ], }, @@ -20,10 +20,10 @@ deps = { 'dep_type': 'gcs', 'objects': [ { - 'generation': 1714589974958986, - 'object_name': '308e23faba3174bd01accfe358467b8a40fad4db4c49ef629da30219f65a275f', - 'sha256sum': '308e23faba3174bd01accfe358467b8a40fad4db4c49ef629da30219f65a275f', - 'size_bytes': 108470444, + 'generation': 1738186807601616, + 'object_name': '963550f05d3325262f6a601ee5ff82a1c84da639b11d5dea6d9f3ac5fbf299f7', + 'sha256sum': '963550f05d3325262f6a601ee5ff82a1c84da639b11d5dea6d9f3ac5fbf299f7', + 'size_bytes': 18408964, }, ], }, @@ -33,10 +33,10 @@ deps = { 'dep_type': 'gcs', 'objects': [ { - 'generation': 1714589870087834, - 'object_name': 'fe81e7114b97440262bce004caf02c1514732e2fa7f99693b2836932ad1c4626', - 'sha256sum': 'fe81e7114b97440262bce004caf02c1514732e2fa7f99693b2836932ad1c4626', - 'size_bytes': 99265992, + 'generation': 1738186801749657, + 'object_name': '6b89f9afce71ceb0ba5e6430996abbda73092dc0fb8cc4e9167e298f89a8b725', + 'sha256sum': '6b89f9afce71ceb0ba5e6430996abbda73092dc0fb8cc4e9167e298f89a8b725', + 'size_bytes': 18375680, }, ], }, @@ -46,10 +46,10 @@ deps = { 'dep_type': 'gcs', 'objects': [ { - 'generation': 1714589989387491, - 'object_name': 'b53933120bb08ffc38140a817e3f0f99782254a6bf9622271574fa004e8783a4', - 'sha256sum': 'b53933120bb08ffc38140a817e3f0f99782254a6bf9622271574fa004e8783a4', - 'size_bytes': 122047968, + 'generation': 1738186808868372, + 'object_name': 'b62fcf15801fee0ae59e69ab515aaf4941e855d5ce342a002a7ac75185c293d7', + 'sha256sum': 'b62fcf15801fee0ae59e69ab515aaf4941e855d5ce342a002a7ac75185c293d7', + 'size_bytes': 19769972, }, ], }, @@ -59,10 +59,10 @@ deps = { 'dep_type': 'gcs', 'objects': [ { - 'generation': 1714590006168779, - 'object_name': '783cb79f26736c69e8125788d95ffb65a28172349009d75188838a004280a92b', - 'sha256sum': '783cb79f26736c69e8125788d95ffb65a28172349009d75188838a004280a92b', - 'size_bytes': 103362108, + 'generation': 1738186802302544, + 'object_name': '2b5e7783121b184b5847ee9ab24da09763b593d312ef91a619f12f03569dad02', + 'sha256sum': '2b5e7783121b184b5847ee9ab24da09763b593d312ef91a619f12f03569dad02', + 'size_bytes': 19040956, }, ], }, @@ -72,10 +72,23 @@ deps = { 'dep_type': 'gcs', 'objects': [ { - 'generation': 1714589936675352, - 'object_name': 'fcf8c3931476dd097c58f2f5d44621c7090b135e85ab56885aa4b44f4bd6cdb5', - 'sha256sum': 'fcf8c3931476dd097c58f2f5d44621c7090b135e85ab56885aa4b44f4bd6cdb5', - 'size_bytes': 96161964, + 'generation': 1738186809356214, + 'object_name': 'e83949b9242fb00d38a93c3c4b043e473135a1a8f99aa53af3642cbc4edb86ab', + 'sha256sum': 'e83949b9242fb00d38a93c3c4b043e473135a1a8f99aa53af3642cbc4edb86ab', + 'size_bytes': 18936452, + }, + ], + }, + 'linux/debian_bullseye_ppc64el-sysroot': { + 'bucket': 'chrome-linux-sysroot', + 'condition': 'checkout_linux and checkout_ppc', + 'dep_type': 'gcs', + 'objects': [ + { + 'generation': 1738186808800578, + 'object_name': '52044855dbbb7056a5ff2a51c88faca856278ca3ebf1c5c088704cf633d7e39c', + 'sha256sum': '52044855dbbb7056a5ff2a51c88faca856278ca3ebf1c5c088704cf633d7e39c', + 'size_bytes': 18586988, }, ], }, diff --git a/naiveproxy/src/build/OWNERS.setnoparent b/naiveproxy/src/build/OWNERS.setnoparent index 33dd642f2b..34120a66e4 100644 --- a/naiveproxy/src/build/OWNERS.setnoparent +++ b/naiveproxy/src/build/OWNERS.setnoparent @@ -29,9 +29,12 @@ file://chrome/browser/ui/hats/HATS_PRIVACY_OWNERS # expose to the open web. file://third_party/blink/API_OWNERS -# third_party/blink/web_tests/VirtualTestSuites need special care. +# third_party/blink/web_tests/VirtualTestSuites needs special care. file://third_party/blink/web_tests/VIRTUAL_OWNERS +# third_party/blink/web_tests/TestLists/content_shell.filter needs special care. +file://third_party/blink/web_tests/HEADLESS_OWNERS + # Extension related files. file://chrome/browser/extensions/component_extensions_allowlist/EXTENSION_ALLOWLIST_OWNERS file://extensions/common/api/API_OWNERS @@ -89,3 +92,6 @@ file://ui/views/VIEWS_OWNERS # ChromeOS dependencies reviews file://chrome/browser/ash/REFACTORING_OWNERS + +# Crashpad +file://third_party/crashpad/crashpad/OWNERS diff --git a/naiveproxy/src/build/android/BUILD.gn b/naiveproxy/src/build/android/BUILD.gn index db7fe9e45f..d10371e3d9 100644 --- a/naiveproxy/src/build/android/BUILD.gn +++ b/naiveproxy/src/build/android/BUILD.gn @@ -46,7 +46,6 @@ if (enable_java_templates) { sources = [ "java/src/org/chromium/build/NullUtil.java", "java/src/org/chromium/build/annotations/AlwaysInline.java", - "java/src/org/chromium/build/annotations/AssumeNonNull.java", "java/src/org/chromium/build/annotations/CheckDiscard.java", "java/src/org/chromium/build/annotations/Contract.java", "java/src/org/chromium/build/annotations/DoNotClassMerge.java", @@ -60,6 +59,7 @@ if (enable_java_templates) { "java/src/org/chromium/build/annotations/NullMarked.java", "java/src/org/chromium/build/annotations/NullUnmarked.java", "java/src/org/chromium/build/annotations/Nullable.java", + "java/src/org/chromium/build/annotations/OptimizeAsNonNull.java", "java/src/org/chromium/build/annotations/RequiresNonNull.java", "java/src/org/chromium/build/annotations/ServiceImpl.java", "java/src/org/chromium/build/annotations/UsedByReflection.java", diff --git a/naiveproxy/src/build/android/chromium_annotations.flags b/naiveproxy/src/build/android/chromium_annotations.flags index 99a670b138..a7e160fb7b 100644 --- a/naiveproxy/src/build/android/chromium_annotations.flags +++ b/naiveproxy/src/build/android/chromium_annotations.flags @@ -63,14 +63,14 @@ # Use assumevalues in addition to assumenosideeffects block because Google3 proguard cannot parse # assumenosideeffects blocks which overwrite return value. -assumevalues class ** { - @org.chromium.build.annotations.AssumeNonNull *** *(...) return _NONNULL_; + @org.chromium.build.annotations.OptimizeAsNonNull *** *(...) return _NONNULL_; } -assumenosideeffects class ** { - @org.chromium.build.annotations.AssumeNonNull *** *(...); + @org.chromium.build.annotations.OptimizeAsNonNull *** *(...); } -assumevalues class ** { - @org.chromium.build.annotations.AssumeNonNull *** * return _NONNULL_; + @org.chromium.build.annotations.OptimizeAsNonNull *** * return _NONNULL_; } -assumenosideeffects class ** { - @org.chromium.build.annotations.AssumeNonNull *** *; + @org.chromium.build.annotations.OptimizeAsNonNull *** *; } diff --git a/naiveproxy/src/build/android/docs/class_verification_failures.md b/naiveproxy/src/build/android/docs/class_verification_failures.md index ab9a241357..8d3d1afb27 100644 --- a/naiveproxy/src/build/android/docs/class_verification_failures.md +++ b/naiveproxy/src/build/android/docs/class_verification_failures.md @@ -8,6 +8,9 @@ While class verification failures still exist, our Java optimizer, R8, has solved this problem for us. Developers should not have to worry about this problem unless there is a bug in R8. See [this bug](http://b/138781768) for where they implemented this solution for us. +The one exception is the `GlueApiHelperFor...` classes in +`//android_webview/glue`, R8 is not yet able to fix the issue for system APIs +(see [this bug](https://b/254522150)). ## What's this all about? diff --git a/naiveproxy/src/build/android/docs/static_analysis.md b/naiveproxy/src/build/android/docs/static_analysis.md index f67cb46e51..9703e052bd 100644 --- a/naiveproxy/src/build/android/docs/static_analysis.md +++ b/naiveproxy/src/build/android/docs/static_analysis.md @@ -19,20 +19,25 @@ We use several tools for static analysis in chromium. [within `lint.py`]: https://source.chromium.org/chromium/chromium/src/+/main:build/android/gyp/lint.py;l=25 [`lint-baseline.xml`]: https://source.chromium.org/search?q=f:lint-baseline.xml%20-f:third_party -## [ErrorProne](https://errorprone.info/) +## [ErrorProne] * Runs as part of normal compilation. * Controlled by GN arg: `use_errorprone_java_compiler` (or `android_static_analysis`). -* [Useful checks include](https://errorprone.info/bugpatterns): +* [Useful checks include]: + * Checking correctness of [nullable annotations] (via NullAway plugin). * Enforcement of `@GuardedBy`, `@CheckReturnValue`, and `@DoNotMock`. * Enforcement of `/* paramName= */` comments. -* A list of enabled / disabled checks is found [within `compile_java.py`](https://cs.chromium.org/chromium/src/build/android/gyp/compile_java.py?l=30) +* A list of enabled / disabled checks is found [within `compile_java.py`] * Many checks are currently disabled because there is work involved in fixing violations they introduce. Please help! -* Chrome has [a few custom checks]: +* Chrome has [a few custom checks]. * Checks run on the entire codebase, not only on changed lines. * Does not run when `chromium_code = false` (e.g. for `//third_party`). +[ErrorProne]: https://errorprone.info/ +[Useful checks include]: https://errorprone.info/bugpatterns +[nullable annotations]: /styleguide/java/nullaway.md +[within `compile_java.py`]: https://source.chromium.org/chromium/chromium/src/+/main:build/android/gyp/compile_java.py;l=46;drc=5dc479e73c3c9c03b59f324b2e349b8bd008401f [a few custom checks]: /tools/android/errorprone_plugin/src/org/chromium/tools/errorprone/plugin/ ## [Checkstyle](https://checkstyle.sourceforge.io/) diff --git a/naiveproxy/src/build/android/fast_local_dev_server.py b/naiveproxy/src/build/android/fast_local_dev_server.py index 21c6360dc9..27359eb42f 100755 --- a/naiveproxy/src/build/android/fast_local_dev_server.py +++ b/naiveproxy/src/build/android/fast_local_dev_server.py @@ -10,7 +10,6 @@ import argparse import collections import contextlib import datetime -import json import os import pathlib import re @@ -30,7 +29,6 @@ from util import server_utils _SOCKET_TIMEOUT = 60 # seconds -_LOGFILES = {} _LOGFILE_NAME = 'buildserver.log' _MAX_LOGFILES = 6 @@ -49,7 +47,7 @@ def set_status(msg: str, *, quiet: bool = False, build_id: str = None): prefix = f'[{TaskStats.prefix()}] ' # if message is specific to a build then also output to its logfile. if build_id: - log_to_file(f'{prefix}{msg}', build_id=build_id) + LogfileManager.log_to_file(f'{prefix}{msg}', build_id=build_id) # No need to also output to the terminal if quiet. if quiet: @@ -68,54 +66,69 @@ def set_status(msg: str, *, quiet: bool = False, build_id: str = None): print(f'\r{prefix}{msg}\033[K', end='', flush=True) -def log_to_file(message: str, build_id: str): - logfile = _LOGFILES[build_id] - print(message, file=logfile, flush=True) - - def _exception_hook(exctype: type, exc: Exception, tb): + # Let KeyboardInterrupt through. + if issubclass(exctype, KeyboardInterrupt): + sys.__excepthook__(exctype, exc, tb) + return + stacktrace = ''.join(traceback.format_exception(exctype, exc, tb)) + stacktrace_lines = [f'\n⛔{line}' for line in stacktrace.splitlines()] # Output uncaught exceptions to all live terminals - BuildManager.broadcast(''.join(traceback.format_exception(exctype, exc, tb))) + BuildManager.broadcast(''.join(stacktrace_lines)) # Cancel all pending tasks cleanly (i.e. delete stamp files if necessary). TaskManager.deactivate() - sys.__excepthook__(exctype, exc, tb) -def create_logfile(build_id, outdir): - if logfile := _LOGFILES.get(build_id, None): +class LogfileManager: + _open_logfiles: dict[str, IO[str]] = {} + + @classmethod + def log_to_file(cls, message: str, build_id: str): + # No lock needed since this is only called by threads started after + # create_logfile was called on the main thread. + logfile = cls._open_logfiles[build_id] + print(message, file=logfile, flush=True) + + @classmethod + def create_logfile(cls, build_id, outdir): + # No lock needed since this is only called by the main thread. + if logfile := cls._open_logfiles.get(build_id, None): + return logfile + + outdir = pathlib.Path(outdir) + latest_logfile = outdir / f'{_LOGFILE_NAME}.0' + + if latest_logfile.exists(): + with latest_logfile.open('rt') as f: + first_line = f.readline() + if log_build_id := BUILD_ID_RE.search(first_line): + # If the newest logfile on disk is referencing the same build we are + # currently processing, we probably crashed previously and we should + # pick up where we left off in the same logfile. + if log_build_id.group('build_id') == build_id: + cls._open_logfiles[build_id] = latest_logfile.open('at') + return cls._open_logfiles[build_id] + + # Do the logfile name shift. + filenames = os.listdir(outdir) + logfiles = {f for f in filenames if f.startswith(_LOGFILE_NAME)} + for idx in reversed(range(_MAX_LOGFILES)): + current_name = f'{_LOGFILE_NAME}.{idx}' + next_name = f'{_LOGFILE_NAME}.{idx+1}' + if current_name in logfiles: + shutil.move(os.path.join(outdir, current_name), + os.path.join(outdir, next_name)) + + # Create a new 0th logfile. + logfile = latest_logfile.open('wt') + # Logfiles are never closed thus are leaked but there should not be too many + # of them since only one per build is created and the server exits on idle + # in normal operation. + cls._open_logfiles[build_id] = logfile + logfile.write(FIRST_LOG_LINE.format(build_id=build_id)) + logfile.flush() return logfile - outdir = pathlib.Path(outdir) - latest_logfile = outdir / f'{_LOGFILE_NAME}.0' - - if latest_logfile.exists(): - with latest_logfile.open('rt') as f: - first_line = f.readline() - if log_build_id := BUILD_ID_RE.search(first_line): - # If the newest logfile on disk is referencing the same build we are - # currently processing, we probably crashed previously and we should - # pick up where we left off in the same logfile. - if log_build_id.group('build_id') == build_id: - _LOGFILES[build_id] = latest_logfile.open('at') - return _LOGFILES[build_id] - - # Do the logfile name shift. - filenames = os.listdir(outdir) - logfiles = {f for f in filenames if f.startswith(_LOGFILE_NAME)} - for idx in reversed(range(_MAX_LOGFILES)): - current_name = f'{_LOGFILE_NAME}.{idx}' - next_name = f'{_LOGFILE_NAME}.{idx+1}' - if current_name in logfiles: - shutil.move(os.path.join(outdir, current_name), - os.path.join(outdir, next_name)) - - # Create a new 0th logfile. - logfile = latest_logfile.open('wt') - _LOGFILES[build_id] = logfile - logfile.write(FIRST_LOG_LINE.format(build_id=build_id)) - logfile.flush() - return logfile - class TaskStats: """Class to keep track of aggregate stats for all tasks across threads.""" @@ -173,6 +186,13 @@ class TaskStats: return cls._completed_task_count_per_build[build_id] return cls._completed_tasks + @classmethod + def total_tasks(cls, build_id: str = None): + with cls._lock: + if build_id: + return cls._total_task_count_per_build[build_id] + return cls._total_tasks + @classmethod def query_build(cls, query_build_id: str = None): with cls._lock: @@ -228,7 +248,7 @@ def check_pid_alive(pid: int): class BuildManager: _live_builders: dict[str, int] = dict() - _build_ttys: dict[str, IO[str]] = dict() + _cached_ttys: dict[(int, int), IO[str]] = dict() _lock = threading.RLock() @classmethod @@ -237,9 +257,22 @@ class BuildManager: cls._live_builders[build_id] = int(builder_pid) @classmethod - def register_tty(cls, build_id, tty): + def open_tty(cls, tty_path): + # Do not open the same tty multiple times. Use st_ino and st_dev to compare + # file descriptors. + tty = open(tty_path, 'wt') + st = os.stat(tty.fileno()) + tty_key = (st.st_ino, st.st_dev) with cls._lock: - cls._build_ttys[build_id] = tty + # Dedupes ttys + if tty_key not in cls._cached_ttys: + # TTYs are kept open for the lifetime of the server so that broadcast + # messages (e.g. uncaught exceptions) can be sent to them even if they + # are not currently building anything. + cls._cached_ttys[tty_key] = tty + else: + tty.close() + return cls._cached_ttys[tty_key] @classmethod def get_live_builds(cls): @@ -251,21 +284,18 @@ class BuildManager: @classmethod def broadcast(cls, msg: str): - seen = set() with cls._lock: - for tty in cls._build_ttys.values(): - # Do not output to the same tty multiple times. Use st_ino and st_dev to - # compare open file descriptors. - st = os.stat(tty.fileno()) - key = (st.st_ino, st.st_dev) - if key in seen: - continue - seen.add(key) + for tty in cls._cached_ttys.values(): try: tty.write(msg + '\n') tty.flush() except BrokenPipeError: pass + # Write to the current terminal if we have not written to it yet. + st = os.stat(sys.stderr.fileno()) + stderr_key = (st.st_ino, st.st_dev) + if stderr_key not in cls._cached_ttys: + print(msg, file=sys.stderr) @classmethod def has_live_builds(cls): @@ -293,8 +323,15 @@ class TaskManager: @classmethod def task_done(cls, task: Task): TaskStats.complete_task(build_id=task.build_id) + if task.tty: + total = TaskStats.total_tasks(task.build_id) + completed = TaskStats.num_completed_tasks(task.build_id) + msg = f'Analysis Steps: {completed}/{total}' + task.tty.write(f'\033]2;{msg}\007') + task.tty.flush() + with cls._lock: - cls._current_tasks.remove(task) + cls._current_tasks.discard(task) @classmethod def get_current_tasks(cls, build_id): @@ -502,7 +539,7 @@ class Task: ] message = '\n'.join(preamble + [stdout]) - log_to_file(message, build_id=self.build_id) + LogfileManager.log_to_file(message, build_id=self.build_id) log(message, quiet=self.options.quiet) if self.tty: # Add emoji to show that output is from the build server. @@ -533,15 +570,14 @@ def _handle_add_task(data, current_tasks: Dict[Tuple[str, str], Task], options): """Handle messages of type ADD_TASK.""" build_id = data['build_id'] task_outdir = data['cwd'] - tty_name = data.get('tty') + tty_path = data.get('tty') tty = None - if tty_name: - tty = open(tty_name, 'wt') - BuildManager.register_tty(build_id, tty) + if tty_path: + tty = BuildManager.open_tty(tty_path) # Make sure a logfile for the build_id exists. - create_logfile(build_id, task_outdir) + LogfileManager.create_logfile(build_id, task_outdir) new_task = Task(name=data['name'], cwd=task_outdir, @@ -564,7 +600,7 @@ def _handle_query_build(data, connection: socket.socket): response = TaskStats.query_build(build_id) try: with connection: - server_utils.SendMessage(connection, json.dumps(response).encode('utf8')) + server_utils.SendMessage(connection, response) except BrokenPipeError: # We should not die because the client died. pass @@ -574,10 +610,10 @@ def _handle_heartbeat(connection: socket.socket): """Handle messages of type POLL_HEARTBEAT.""" try: with connection: - server_utils.SendMessage(connection, - json.dumps({ - 'status': 'OK' - }).encode('utf8')) + server_utils.SendMessage(connection, { + 'status': 'OK', + 'pid': os.getpid(), + }) except BrokenPipeError: # We should not die because the client died. pass @@ -600,9 +636,9 @@ def _listen_for_request_data(sock: socket.socket): """Helper to encapsulate getting a new message.""" while True: conn = sock.accept()[0] - message_bytes = server_utils.ReceiveMessage(conn) - if message_bytes: - yield json.loads(message_bytes), conn + message = server_utils.ReceiveMessage(conn) + if message: + yield message, conn def _register_cleanup_signal_handlers(options): @@ -647,17 +683,19 @@ def _process_requests(sock: socket.socket, options): message_type = data.get('message_type', server_utils.ADD_TASK) if message_type == server_utils.POLL_HEARTBEAT: _handle_heartbeat(connection) - if message_type == server_utils.ADD_TASK: + elif message_type == server_utils.ADD_TASK: connection.close() _handle_add_task(data, tasks, options) - if message_type == server_utils.QUERY_BUILD: + elif message_type == server_utils.QUERY_BUILD: _handle_query_build(data, connection) - if message_type == server_utils.REGISTER_BUILDER: + elif message_type == server_utils.REGISTER_BUILDER: connection.close() _handle_register_builder(data) - if message_type == server_utils.CANCEL_BUILD: + elif message_type == server_utils.CANCEL_BUILD: connection.close() _handle_cancel_build(data) + else: + connection.close() except TimeoutError: # If we have not received a new task in a while and do not have any # pending tasks or running builds, then exit. Otherwise keep waiting. @@ -668,19 +706,12 @@ def _process_requests(sock: socket.socket, options): break -def query_build_info(build_id): +def query_build_info(build_id=None): """Communicates with the main server to query build info.""" - with contextlib.closing(socket.socket(socket.AF_UNIX)) as sock: - sock.connect(server_utils.SOCKET_ADDRESS) - sock.settimeout(3) - server_utils.SendMessage( - sock, - json.dumps({ - 'message_type': server_utils.QUERY_BUILD, - 'build_id': build_id, - }).encode('utf8')) - response_bytes = server_utils.ReceiveMessage(sock) - return json.loads(response_bytes) + return _send_message_with_response({ + 'message_type': server_utils.QUERY_BUILD, + 'build_id': build_id, + }) def _wait_for_build(build_id): @@ -708,12 +739,50 @@ def _wait_for_build(build_id): time.sleep(1) +def _wait_for_idle(): + """Communicates with the main server waiting for all builds to complete.""" + start_time = datetime.datetime.now() + while True: + try: + builds = query_build_info()['builds'] + except ConnectionRefusedError: + print('No server running. It likely finished all tasks.') + print('You can check $OUTDIR/buildserver.log.0 to be sure.') + return 0 + + all_pending_tasks = 0 + all_completed_tasks = 0 + for build_info in builds: + pending_tasks = build_info['pending_tasks'] + completed_tasks = build_info['completed_tasks'] + active = build_info['is_active'] + # Ignore completed builds. + if active or pending_tasks: + all_pending_tasks += pending_tasks + all_completed_tasks += completed_tasks + total_tasks = all_pending_tasks + all_completed_tasks + + if all_pending_tasks == 0: + print('\nServer Idle, All tasks complete.') + return 0 + + current_time = datetime.datetime.now() + duration = current_time - start_time + print( + f'\rWaiting for {all_pending_tasks} remaining tasks. ' + f'({all_completed_tasks}/{total_tasks} tasks complete) ' + f'[{str(duration)}]\033[K', + end='', + flush=True) + time.sleep(0.5) + + def _check_if_running(): """Communicates with the main server to make sure its running.""" with socket.socket(socket.AF_UNIX) as sock: try: sock.connect(server_utils.SOCKET_ADDRESS) - except socket.error: + except OSError: print('Build server is not running and ' 'android_static_analysis="build_server" is set.\nPlease run ' 'this command in a separate terminal:\n\n' @@ -726,8 +795,16 @@ def _check_if_running(): def _send_message_and_close(message_dict): with contextlib.closing(socket.socket(socket.AF_UNIX)) as sock: sock.connect(server_utils.SOCKET_ADDRESS) - sock.settimeout(3) - server_utils.SendMessage(sock, json.dumps(message_dict).encode('utf8')) + sock.settimeout(1) + server_utils.SendMessage(sock, message_dict) + + +def _send_message_with_response(message_dict): + with contextlib.closing(socket.socket(socket.AF_UNIX)) as sock: + sock.connect(server_utils.SOCKET_ADDRESS) + sock.settimeout(1) + server_utils.SendMessage(sock, message_dict) + return server_utils.ReceiveMessage(sock) def _send_cancel_build(build_id): @@ -747,12 +824,27 @@ def _register_builder(build_id, builder_pid): 'builder_pid': builder_pid, }) return 0 - except socket.error: + except OSError: time.sleep(0.05) print(f'Failed to register builer for build_id={build_id}.') return 1 +def poll_server(retries=3): + """Communicates with the main server to query build info.""" + for _attempt in range(retries): + try: + response = _send_message_with_response( + {'message_type': server_utils.POLL_HEARTBEAT}) + if response: + break + except OSError: + time.sleep(0.05) + else: + return None + return response['pid'] + + def _print_build_status_all(): try: query_data = query_build_info(None) @@ -809,15 +901,10 @@ def _print_build_status(build_id): # Print nothing if we never got any tasks. if completed_tasks: + print(f'Build Server Status: [{completed_tasks}/{total_tasks}]') if pending_tasks: - print('Build server is still running in the background. ' + - f'[{completed_tasks}/{total_tasks}] Tasks Done.') - print('Run this to wait for the pending tasks:') server_path = os.path.relpath(str(server_utils.SERVER_SCRIPT)) - print(' '.join([server_path, '--wait-for-build', build_id])) - else: - print('Build Server is done with all background tasks. ' + - f'Completed [{completed_tasks}/{total_tasks}].') + print('To wait for jobs:', shlex.join([server_path, '--wait-for-idle'])) return 0 @@ -826,9 +913,13 @@ def _wait_for_task_requests(args): sock.settimeout(_SOCKET_TIMEOUT) try: sock.bind(server_utils.SOCKET_ADDRESS) - except socket.error as e: + except OSError as e: # errno 98 is Address already in use if e.errno == 98: + if not args.quiet: + pid = poll_server() + print(f'Another instance is already running (pid: {pid}).', + file=sys.stderr) return 1 raise sock.listen() @@ -854,6 +945,10 @@ def main(): metavar='BUILD_ID', help='Wait for build server to finish with all tasks ' 'for BUILD_ID and output any pending messages.') + parser.add_argument('--wait-for-idle', + action='store_true', + help='Wait for build server to finish with all ' + 'pending tasks.') parser.add_argument('--print-status', metavar='BUILD_ID', help='Print the current state of a build.') @@ -874,6 +969,8 @@ def main(): return _check_if_running() if args.wait_for_build: return _wait_for_build(args.wait_for_build) + if args.wait_for_idle: + return _wait_for_idle() if args.print_status: return _print_build_status(args.print_status) if args.print_status_all: diff --git a/naiveproxy/src/build/android/fast_local_dev_server_test.py b/naiveproxy/src/build/android/fast_local_dev_server_test.py index 3c5fe99eb0..ec25184a37 100755 --- a/naiveproxy/src/build/android/fast_local_dev_server_test.py +++ b/naiveproxy/src/build/android/fast_local_dev_server_test.py @@ -5,7 +5,6 @@ import contextlib import datetime -import json import pathlib import unittest import os @@ -29,11 +28,11 @@ class RegexTest(unittest.TestCase): server.BUILD_ID_RE) -def sendMessage(message_dict): +def sendMessage(message): with contextlib.closing(socket.socket(socket.AF_UNIX)) as sock: sock.settimeout(1) sock.connect(server_utils.SOCKET_ADDRESS) - server_utils.SendMessage(sock, json.dumps(message_dict).encode('utf-8')) + server_utils.SendMessage(sock, message) def pollServer(): @@ -75,7 +74,8 @@ def blockingFifo(fifo_path='/tmp/.fast_local_dev_server_test.fifo'): class ServerStartedTest(unittest.TestCase): def setUp(self): - self._TTY_FILE = '/tmp/fast_local_dev_server_test_tty' + self._TTY_FILE = pathlib.Path('/tmp/fast_local_dev_server_test_tty') + self._TTY_FILE.touch() if pollServer(): # TODO(mheikal): Support overriding the standard named pipe for # communicating with the server so that we can run an instance just for @@ -95,8 +95,7 @@ class ServerStartedTest(unittest.TestCase): time.sleep(0.05) def tearDown(self): - if os.path.exists(self._TTY_FILE): - os.unlink(self._TTY_FILE) + self._TTY_FILE.unlink(missing_ok=True) self._process.terminate() stdout, _ = self._process.communicate() if stdout != '': @@ -115,13 +114,13 @@ class ServerStartedTest(unittest.TestCase): 'cmd': cmd, # So that logfiles do not clutter cwd. 'cwd': '/tmp/', - 'tty': self._TTY_FILE, + 'tty': str(self._TTY_FILE), 'build_id': self.id(), 'stamp_file': _stamp_file.name, }) def getTtyContents(self): - if os.path.exists(self._TTY_FILE): + if self._TTY_FILE.exists(): with open(self._TTY_FILE, 'rt') as tty: return tty.read() return '' @@ -144,15 +143,14 @@ class ServerStartedTest(unittest.TestCase): current_time = datetime.datetime.now() duration = current_time - start_time if duration > timeout_duration: - raise TimeoutError( - f'Timed out waiting for pending tasks [{pending_tasks}/{pending_tasks+completed_tasks}]' - ) + raise TimeoutError('Timed out waiting for pending tasks ' + + f'[{pending_tasks}/{pending_tasks+completed_tasks}]') time.sleep(0.1) def testRunsQuietTask(self): self.sendTask(['true']) self.waitForTasksDone() - self.assertEqual(self.getTtyContents(), '') + self.assertEqual(self.getTtyContents(), '\x1b]2;Analysis Steps: 1/1\x07') def testRunsNoisyTask(self): self.sendTask(['echo', 'some_output']) @@ -192,6 +190,13 @@ class ServerStartedTest(unittest.TestCase): callServer(['--wait-for-build', self.id()]) self.assertEqual(self.getTtyContents(), '') + def testWaitForIdleServerCall(self): + self.sendTask(['true']) + self.waitForTasksDone() + proc_result = callServer(['--wait-for-idle']) + self.assertIn('All', proc_result.stdout) + self.assertIn('Analysis Steps: 1/1', self.getTtyContents()) + def testCancelBuildServerCall(self): callServer(['--cancel-build', self.id()]) self.assertEqual(self.getTtyContents(), '') @@ -218,7 +223,7 @@ class ServerStartedTest(unittest.TestCase): self.sendTask(['cat', str(fifo_path)]) proc_result = callServer(['--print-status', self.id()]) self.assertIn('[1/2]', proc_result.stdout) - self.assertIn(f'--wait-for-build {self.id()}', proc_result.stdout) + self.assertIn('--wait-for-idle', proc_result.stdout) self.waitForTasksDone() callServer(['--cancel-build', self.id()]) diff --git a/naiveproxy/src/build/android/gradle/generate_gradle.py b/naiveproxy/src/build/android/gradle/generate_gradle.py index 5a30023688..90df56b8d5 100755 --- a/naiveproxy/src/build/android/gradle/generate_gradle.py +++ b/naiveproxy/src/build/android/gradle/generate_gradle.py @@ -64,6 +64,7 @@ _DEFAULT_TARGETS = [ '//chrome/android:chrome_public_apk', '//chrome/android:chrome_public_test_apk', '//chrome/android:chrome_public_unit_test_apk', + '//chrome/browser/android/examples/inline_autofill_service:inline_autofill_service_example_apk', '//content/public/android:content_junit_tests', '//content/shell/android:content_shell_apk', # Below must be included even with --all since they are libraries. @@ -460,6 +461,8 @@ def _CreateRelativeSymlink(target_path, link_path): link_dir = os.path.dirname(link_path) relpath = os.path.relpath(target_path, link_dir) logging.debug('Creating symlink %s -> %s', link_path, relpath) + if not os.path.exists(link_dir): + os.makedirs(link_dir) os.symlink(relpath, link_path) @@ -472,8 +475,6 @@ def _CreateJniLibsDir(output_dir, entry_output_dir, so_files): symlink_dir = os.path.join(entry_output_dir, _JNI_LIBS_SUBDIR) shutil.rmtree(symlink_dir, True) abi_dir = os.path.join(symlink_dir, _ARMEABI_SUBDIR) - if not os.path.exists(abi_dir): - os.makedirs(abi_dir) for so_file in so_files: target_path = os.path.join(output_dir, so_file) symlinked_path = os.path.join(abi_dir, so_file) diff --git a/naiveproxy/src/build/android/gyp/check_for_missing_direct_deps.py b/naiveproxy/src/build/android/gyp/check_for_missing_direct_deps.py index 2d817e4077..8bbf53b939 100755 --- a/naiveproxy/src/build/android/gyp/check_for_missing_direct_deps.py +++ b/naiveproxy/src/build/android/gyp/check_for_missing_direct_deps.py @@ -298,7 +298,7 @@ def main(argv): auto_add_deps=args.auto_add_deps) logging.info('Check completed.') - build_utils.Touch(args.stamp) + server_utils.MaybeTouch(args.stamp) if __name__ == '__main__': diff --git a/naiveproxy/src/build/android/gyp/compile_java.py b/naiveproxy/src/build/android/gyp/compile_java.py index f0892e672c..4531f8cc29 100755 --- a/naiveproxy/src/build/android/gyp/compile_java.py +++ b/naiveproxy/src/build/android/gyp/compile_java.py @@ -8,7 +8,7 @@ import collections import functools import itertools import logging -import optparse +import argparse import os import pathlib import re @@ -30,128 +30,6 @@ _JAVAC_EXTRACTOR = os.path.join(build_utils.DIR_SOURCE_ROOT, 'third_party', 'android_prebuilts', 'build_tools', 'common', 'framework', 'javac_extractor.jar') -# Add a check here to cause the suggested fix to be applied while compiling. -# Use this when trying to enable more checks. -ERRORPRONE_CHECKS_TO_APPLY = [] - -# Checks to disable in tests. -TESTONLY_ERRORPRONE_WARNINGS_TO_DISABLE = [ - # Too much effort to enable. - 'UnusedVariable', - # These are allowed in tests. - 'NoStreams', -] - -# Full list of checks: https://errorprone.info/bugpatterns -ERRORPRONE_WARNINGS_TO_DISABLE = [ - 'InlineMeInliner', - 'InlineMeSuggester', - # High priority to enable: - 'HidingField', - 'AlreadyChecked', - 'DirectInvocationOnMock', - 'MockNotUsedInProduction', - # High priority to enable in non-tests: - 'JdkObsolete', - 'ReturnValueIgnored', - 'StaticAssignmentInConstructor', - # These are all for Javadoc, which we don't really care about. - # vvv - 'InvalidBlockTag', - 'InvalidParam', - 'InvalidLink', - 'InvalidInlineTag', - 'MalformedInlineTag', - 'MissingSummary', - 'UnescapedEntity', - 'UnrecognisedJavadocTag', - # ^^^ - 'MutablePublicArray', - 'NonCanonicalType', - 'DoNotClaimAnnotations', - 'JavaUtilDate', - 'IdentityHashMapUsage', - 'StaticMockMember', - # Triggers in tests where this is useful to do. - 'StaticAssignmentOfThrowable', - # TODO(crbug.com/41384349): Follow steps in bug. - 'CatchAndPrintStackTrace', - # TODO(crbug.com/41364806): Follow steps in bug. - 'TypeParameterUnusedInFormals', - # Android platform default is always UTF-8. - # https://developer.android.com/reference/java/nio/charset/Charset.html#defaultCharset() - 'DefaultCharset', - # There are lots of times when we just want to post a task. - 'FutureReturnValueIgnored', - # Just false positives in our code. - 'ThreadJoinLoop', - # Low priority corner cases with String.split. - # Linking Guava and using Splitter was rejected - # in the https://chromium-review.googlesource.com/c/chromium/src/+/871630. - 'StringSplitter', - # Preferred to use another method since it propagates exceptions better. - 'ClassNewInstance', - # Results in false positives. - 'ThreadLocalUsage', - # Low priority. - 'EqualsHashCode', - # Not necessary for tests. - 'OverrideThrowableToString', - # Not that useful. - 'UnsafeReflectiveConstructionCast', - # Not that useful. - 'MixedMutabilityReturnType', - # Nice to have. - 'EqualsGetClass', - # A lot of false-positives from CharSequence.equals(). - 'UndefinedEquals', - # Dagger generated code triggers this. - 'SameNameButDifferent', - # Does not apply to Android because it assumes no desugaring. - 'UnnecessaryLambda', - # Nice to have. - 'EmptyCatch', - # Nice to have. - 'BadImport', - # Nice to have. - 'UseCorrectAssertInTests', - # Must be off since we are now passing in annotation processor generated - # code as a source jar (deduplicating work with turbine). - 'RefersToDaggerCodegen', - # We already have presubmit checks for this. We don't want it to fail - # local compiles. - 'RemoveUnusedImports', - # Only has false positives (would not want to enable this). - 'UnicodeEscape', - # A lot of existing violations. e.g. Should return List and not ArrayList - 'NonApiType', - # Nice to have. - 'StringCharset', - # Nice to have. - 'StringCaseLocaleUsage', - # Low priority. - 'RedundantControlFlow', -] - -# Full list of checks: https://errorprone.info/bugpatterns -# Only those marked as "experimental" need to be listed here in order to be -# enabled. -ERRORPRONE_WARNINGS_TO_ENABLE = [ - 'BinderIdentityRestoredDangerously', - 'EmptyIf', - 'EqualsBrokenForNull', - 'InvalidThrows', - 'LongLiteralLowerCaseSuffix', - 'MultiVariableDeclaration', - 'RedundantOverride', - 'StaticQualifiedUsingExpression', - 'TimeUnitMismatch', - 'UnnecessaryStaticImport', - 'UseBinds', - 'WildcardImport', - 'NoStreams', -] - def ProcessJavacOutput(output, target_name): # These warnings cannot be suppressed even for third party code. Deprecation @@ -345,18 +223,15 @@ class _MetadataParser: logging.info('Completed info file: %s', output_path) -def _OnStaleMd5(changes, options, javac_cmd, javac_args, java_files, kt_files): +def _OnStaleMd5(changes, + options, + javac_cmd, + javac_args, + java_files, + kt_files, + use_errorprone=False): logging.info('Starting _OnStaleMd5') - # Use the build server for errorprone runs. - if (options.enable_errorprone and not options.skip_build_server and - server_utils.MaybeRunCommand(name=options.target_name, - argv=sys.argv, - stamp_file=options.jar_path, - use_build_server=options.use_build_server)): - logging.info('Using build server') - return - if options.enable_kythe_annotations: # Kythe requires those env variables to be set and compile_java.py does the # same @@ -392,7 +267,7 @@ def _OnStaleMd5(changes, options, javac_cmd, javac_args, java_files, kt_files): intermediates_out_dir = None jar_info_path = None - if not options.enable_errorprone: + if not use_errorprone: # Delete any stale files in the generated directory. The purpose of # options.generated_dir is for codesearch and Android Studio. shutil.rmtree(options.generated_dir, True) @@ -410,6 +285,7 @@ def _OnStaleMd5(changes, options, javac_cmd, javac_args, java_files, kt_files): javac_cmd + javac_args, java_files, options.jar_path, + use_errorprone=use_errorprone, kt_files=kt_files, jar_info_path=jar_info_path, intermediates_out_dir=intermediates_out_dir, @@ -429,6 +305,7 @@ def _RunCompiler(changes, javac_cmd, java_files, jar_path, + use_errorprone=False, kt_files=None, jar_info_path=None, intermediates_out_dir=None, @@ -559,8 +436,14 @@ def _RunCompiler(changes, raise Exception('need java files for --print-javac-command-line.') metadata_parser.ParseAndWriteInfoFile(jar_info_path, java_files, kt_files) - CreateJarFile(jar_path, classes_dir, metadata_parser.services_map, - options.additional_jar_files, options.kotlin_jar_path) + if use_errorprone: + # There is no jar file when running errorprone and jar_path is actually + # just the stamp file for that target. + server_utils.MaybeTouch(jar_path) + else: + CreateJarFile(jar_path, classes_dir, metadata_parser.services_map, + options.additional_jar_files, options.kotlin_jar_path) + # Remove input srcjars that confuse Android Studio: # https://crbug.com/353326240 @@ -579,90 +462,70 @@ def _RunCompiler(changes, def _ParseOptions(argv): - parser = optparse.OptionParser() + parser = argparse.ArgumentParser() action_helpers.add_depfile_arg(parser) - parser.add_option('--target-name', help='Fully qualified GN target name.') - parser.add_option('--skip-build-server', - action='store_true', - help='Avoid using the build server.') - parser.add_option('--use-build-server', - action='store_true', - help='Always use the build server.') - parser.add_option('--java-srcjars', - action='append', - default=[], - help='List of srcjars to include in compilation.') - parser.add_option( + parser.add_argument('--target-name', help='Fully qualified GN target name.') + parser.add_argument('--java-srcjars', + action='append', + default=[], + help='List of srcjars to include in compilation.') + parser.add_argument( '--generated-dir', help='Subdirectory within target_gen_dir to place extracted srcjars and ' 'annotation processor output for codesearch to find.') - parser.add_option('--classpath', action='append', help='Classpath to use.') - parser.add_option( + parser.add_argument('--classpath', action='append', help='Classpath to use.') + parser.add_argument( '--processorpath', action='append', help='GN list of jars that comprise the classpath used for Annotation ' 'Processors.') - parser.add_option( - '--processor-arg', - dest='processor_args', - action='append', - help='key=value arguments for the annotation processors.') - parser.add_option( + parser.add_argument('--processor-arg', + dest='processor_args', + action='append', + help='key=value arguments for the annotation processors.') + parser.add_argument( '--additional-jar-file', dest='additional_jar_files', action='append', help='Additional files to package into jar. By default, only Java .class ' 'files are packaged into the jar. Files should be specified in ' 'format :.') - parser.add_option( + parser.add_argument( '--jar-info-exclude-globs', help='GN list of exclude globs to filter from generated .info files.') - parser.add_option( + parser.add_argument( '--chromium-code', - type='int', + action='store_true', help='Whether code being compiled should be built with stricter ' 'warnings for chromium code.') - parser.add_option( - '--errorprone-path', help='Use the Errorprone compiler at this path.') - parser.add_option( - '--enable-errorprone', - action='store_true', - help='Enable errorprone checks') - parser.add_option('--enable-nullaway', - action='store_true', - help='Enable NullAway (requires --enable-errorprone)') - parser.add_option('--testonly', - action='store_true', - help='Disable some Error Prone checks') - parser.add_option('--warnings-as-errors', - action='store_true', - help='Treat all warnings as errors.') - parser.add_option('--jar-path', help='Jar output path.') - parser.add_option( - '--javac-arg', - action='append', - default=[], - help='Additional arguments to pass to javac.') - parser.add_option('--print-javac-command-line', - action='store_true', - help='Just show javac command line (for ide_query).') - parser.add_option( + parser.add_argument('--warnings-as-errors', + action='store_true', + help='Treat all warnings as errors.') + parser.add_argument('--jar-path', required=True, help='Jar output path.') + parser.add_argument('--javac-arg', + action='append', + default=[], + help='Additional arguments to pass to javac.') + parser.add_argument('--print-javac-command-line', + action='store_true', + help='Just show javac command line (for ide_query).') + parser.add_argument( '--enable-kythe-annotations', action='store_true', help='Enable generation of Kythe kzip, used for codesearch. Ensure ' 'proper environment variables are set before using this flag.') - parser.add_option( + parser.add_argument( '--header-jar', help='This is the header jar for the current target that contains ' 'META-INF/services/* files to be included in the output jar.') - parser.add_option( + parser.add_argument( '--kotlin-jar-path', help='Kotlin jar to be merged into the output jar. This contains the ' ".class files from this target's .kt files.") + parser.add_argument('sources', nargs='*') - options, args = parser.parse_args(argv) - build_utils.CheckOptions(options, parser, required=('jar_path', )) + options = parser.parse_args(argv) options.classpath = action_helpers.parse_gn_list(options.classpath) options.processorpath = action_helpers.parse_gn_list(options.processorpath) @@ -677,7 +540,7 @@ def _ParseOptions(argv): options.additional_jar_files = additional_jar_files files = [] - for arg in args: + for arg in options.sources: # Interpret a path prefixed with @ as a file containing a list of sources. if arg.startswith('@'): files.extend(build_utils.ReadSourcesList(arg[1:])) @@ -695,7 +558,10 @@ def _ParseOptions(argv): return options, java_files, kt_files -def main(argv): +def main(argv, + extra_javac_args=None, + use_errorprone=False, + write_depfile_only=False): build_utils.InitLogging('JAVAC_DEBUG') argv = build_utils.ExpandFileArgs(argv) options, java_files, kt_files = _ParseOptions(argv) @@ -704,6 +570,8 @@ def main(argv): javac_args = [ '-g', + # Required for Error Prone's /* paramName= */ check. + '-parameters', # Jacoco does not currently support a higher value. '--release', '17', @@ -723,105 +591,13 @@ def main(argv): '-Xlint:-removal', # https://crbug.com/1441023 '-J-XX:+PerfDisableSharedMem', + + # Disable all annotation processors (we run them via Turbine). + '-proc:none', ] - if options.enable_errorprone: - # All errorprone args are passed space-separated in a single arg. - errorprone_flags = ['-Xplugin:ErrorProne'] - - if options.enable_nullaway: - # See: https://github.com/uber/NullAway/wiki/Configuration - # Treat these packages as @NullMarked by default. - # These apply to both .jars in classpath as well as code being compiled. - # Chrome classes rely on the presence of @NullMarked. - errorprone_flags += ['-XepOpt:NullAway:AnnotatedPackages='] - errorprone_flags += [ - '-XepOpt:NullAway:CustomContractAnnotations=' - 'org.chromium.build.annotations.Contract' - ] - errorprone_flags += ['-XepOpt:NullAway:CheckContracts=true'] - # Make it a warning to use assumeNonNull() with a @NonNull. - errorprone_flags += [('-XepOpt:NullAway:CastToNonNullMethod=' - 'org.chromium.build.NullUtil.assumeNonNull')] - # Detect "assert foo != null" as a null check. - errorprone_flags += ['-XepOpt:NullAway:AssertsEnabled=true'] - # Do not ignore @Nullable & @NonNull in non-annotated packages. - errorprone_flags += [ - '-XepOpt:NullAway:AcknowledgeRestrictiveAnnotations=true' - ] - # Treat @RecentlyNullable the same as @Nullable. - errorprone_flags += ['-XepOpt:Nullaway:AcknowledgeAndroidRecent=true'] - # Enable experimental checking of @Nullable generics. - # https://github.com/uber/NullAway/wiki/JSpecify-Support - errorprone_flags += ['-XepOpt:NullAway:JSpecifyMode=true'] - # Treat these the same as constructors. - init_methods = [ - 'android.app.Application.onCreate', - 'android.app.Activity.onCreate', - 'android.app.Service.onCreate', - 'android.app.backup.BackupAgent.onCreate', - 'android.content.ContentProvider.attachInfo', - 'android.content.ContentProvider.onCreate', - 'android.content.ContentWrapper.attachBaseContext', - ] - errorprone_flags += [ - '-XepOpt:NullAway:KnownInitializers=' + ','.join(init_methods) - ] - - # Make everything a warning so that when treat_warnings_as_errors is false, - # they do not fail the build. - errorprone_flags += ['-XepAllErrorsAsWarnings'] - # Don't check generated files (those tagged with @Generated). - errorprone_flags += ['-XepDisableWarningsInGeneratedCode'] - errorprone_flags.extend('-Xep:{}:OFF'.format(x) - for x in ERRORPRONE_WARNINGS_TO_DISABLE) - errorprone_flags.extend('-Xep:{}:WARN'.format(x) - for x in ERRORPRONE_WARNINGS_TO_ENABLE) - if options.testonly: - errorprone_flags.extend('-Xep:{}:OFF'.format(x) - for x in TESTONLY_ERRORPRONE_WARNINGS_TO_DISABLE) - - if ERRORPRONE_CHECKS_TO_APPLY: - to_apply = list(ERRORPRONE_CHECKS_TO_APPLY) - if options.testonly: - to_apply = [ - x for x in to_apply - if x not in TESTONLY_ERRORPRONE_WARNINGS_TO_DISABLE - ] - errorprone_flags += [ - '-XepPatchLocation:IN_PLACE', '-XepPatchChecks:,' + ','.join(to_apply) - ] - - # These are required to use JDK 16, and are taken directly from - # https://errorprone.info/docs/installation - javac_args += [ - '-J--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED', - '-J--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED', - '-J--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED', - '-J--add-exports=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED', - '-J--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED', - '-J--add-exports=jdk.compiler/com.sun.tools.javac.processing=' - 'ALL-UNNAMED', - '-J--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED', - '-J--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED', - '-J--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED', - '-J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED', - ] - - javac_args += ['-XDcompilePolicy=simple', ' '.join(errorprone_flags)] - - javac_args += ['-XDshould-stop.ifError=FLOW'] - # This flag quits errorprone after checks and before code generation, since - # we do not need errorprone outputs, this speeds up errorprone by 4 seconds - # for chrome_java. - if not ERRORPRONE_CHECKS_TO_APPLY: - javac_args += ['-XDshould-stop.ifNoError=FLOW'] - - # This effectively disables all annotation processors, even including - # annotation processors in service provider configuration files named - # META-INF/. See the following link for reference: - # https://docs.oracle.com/en/java/javase/11/tools/javac.html - javac_args.extend(['-proc:none']) + if extra_javac_args: + javac_args.extend(extra_javac_args) if options.processorpath: javac_args.extend(['-processorpath', ':'.join(options.processorpath)]) @@ -831,38 +607,46 @@ def main(argv): javac_args.extend(options.javac_arg) + do_it = lambda changes: _OnStaleMd5(changes, + options, + javac_cmd, + javac_args, + java_files, + kt_files, + use_errorprone=use_errorprone) + if options.print_javac_command_line: if options.java_srcjars: raise Exception( '--print-javac-command-line does not work with --java-srcjars') - _OnStaleMd5(None, options, javac_cmd, javac_args, java_files, kt_files) + do_it(None) return 0 - classpath_inputs = options.classpath + options.processorpath - - depfile_deps = classpath_inputs - # Files that are already inputs in GN should go in input_paths. - input_paths = ([build_utils.JAVAC_PATH] + depfile_deps + - options.java_srcjars + java_files + kt_files) - if options.header_jar: - input_paths.append(options.header_jar) - input_paths += [x[0] for x in options.additional_jar_files] + depfile_deps = options.classpath + options.processorpath output_paths = [options.jar_path] - if not options.enable_errorprone: - output_paths += [options.jar_path + '.info'] + if not use_errorprone: + jar_info_path = options.jar_path + '.info' + output_paths.append(jar_info_path) - input_strings = (javac_cmd + javac_args + options.classpath + java_files + - kt_files + - [options.warnings_as_errors, options.jar_info_exclude_globs]) - - do_it = lambda changes: _OnStaleMd5(changes, options, javac_cmd, javac_args, - java_files, kt_files) # Incremental build optimization doesn't work for ErrorProne. Skip md5 check. - if options.enable_errorprone: + if write_depfile_only: + action_helpers.write_depfile(options.depfile, output_paths[0], depfile_deps) + elif use_errorprone: do_it(None) action_helpers.write_depfile(options.depfile, output_paths[0], depfile_deps) else: + # Files that are already inputs in GN should go in input_paths. + input_paths = ([build_utils.JAVAC_PATH] + depfile_deps + + options.java_srcjars + java_files + kt_files) + if options.header_jar: + input_paths.append(options.header_jar) + input_paths += [x[0] for x in options.additional_jar_files] + + input_strings = ( + javac_cmd + javac_args + options.classpath + java_files + kt_files + + [options.warnings_as_errors, options.jar_info_exclude_globs]) + # Use md5_check for |pass_changes| feature. md5_check.CallAndWriteDepfileIfStale(do_it, options, diff --git a/naiveproxy/src/build/android/gyp/compile_resources.py b/naiveproxy/src/build/android/gyp/compile_resources.py index 38e55411fe..bf50bbb284 100755 --- a/naiveproxy/src/build/android/gyp/compile_resources.py +++ b/naiveproxy/src/build/android/gyp/compile_resources.py @@ -182,9 +182,6 @@ def _ParseArgs(args): input_opts.add_argument( '--verification-library-version-offset', help='Subtract this from static-library version for expectation files') - input_opts.add_argument('--xml-namespaces', - action='store_true', - help='Do not pass --no-xml-namespaces') action_helpers.add_depfile_arg(output_opts) output_opts.add_argument('--arsc-path', help='Apk output for arsc format.') @@ -751,6 +748,7 @@ def _PackageApk(options, build): 'link', '--auto-add-overlay', '--no-version-vectors', + '--no-xml-namespaces', '--output-text-symbols', build.r_txt_path, ] @@ -768,9 +766,6 @@ def _PackageApk(options, build): if options.shared_resources: link_command.append('--shared-lib') - if int(options.min_sdk_version) > 21 and not options.xml_namespaces: - link_command.append('--no-xml-namespaces') - if options.package_id: link_command += [ '--package-id', diff --git a/naiveproxy/src/build/android/gyp/create_stub_manifest.py b/naiveproxy/src/build/android/gyp/create_stub_manifest.py index 889fa26bf8..91d17cdbf8 100755 --- a/naiveproxy/src/build/android/gyp/create_stub_manifest.py +++ b/naiveproxy/src/build/android/gyp/create_stub_manifest.py @@ -7,12 +7,18 @@ import argparse import pathlib +import re +import sys +from xml.etree import ElementTree + +from util import build_utils +from util import manifest_utils _MAIN_TEMPLATE = """\ - {} + {}{} """ @@ -26,14 +32,29 @@ def main(): parser.add_argument('--static-library-name') parser.add_argument('--static-library-version') parser.add_argument('--output', required=True) - args = parser.parse_args() + parser.add_argument('--use-permissions-from') + args = parser.parse_args(build_utils.ExpandFileArgs(sys.argv[1:])) + + if args.use_permissions_from: + manifest_node = manifest_utils.ParseManifest(args.use_permissions_from)[1] + permission_nodes = manifest_node.findall('uses-permission') + permission_nodes += manifest_node.findall('uses-permission-sdk-23') + sb = [] + for node in permission_nodes: + sb.append(ElementTree.tostring(node).decode('utf8').rstrip() + '\n ') + sb.sort() + permissions_part = ''.join(sb) + permissions_part = re.sub(r'tools:ignore=".*?"\s*', '', permissions_part) + permissions_part = re.sub(r'xmlns:tools=".*?"\s*', '', permissions_part) + else: + permissions_part = '' static_library_part = '' if args.static_library_name: static_library_part = _STATIC_LIBRARY_TEMPLATE.format( args.static_library_name, args.static_library_version) - data = _MAIN_TEMPLATE.format(static_library_part) + data = _MAIN_TEMPLATE.format(permissions_part, static_library_part) pathlib.Path(args.output).write_text(data, encoding='utf8') diff --git a/naiveproxy/src/build/android/gyp/create_stub_manifest.pydeps b/naiveproxy/src/build/android/gyp/create_stub_manifest.pydeps new file mode 100644 index 0000000000..c2e2b0d504 --- /dev/null +++ b/naiveproxy/src/build/android/gyp/create_stub_manifest.pydeps @@ -0,0 +1,8 @@ +# Generated by running: +# build/print_python_deps.py --root build/android/gyp --output build/android/gyp/create_stub_manifest.pydeps build/android/gyp/create_stub_manifest.py +../../action_helpers.py +../../gn_helpers.py +create_stub_manifest.py +util/__init__.py +util/build_utils.py +util/manifest_utils.py diff --git a/naiveproxy/src/build/android/gyp/errorprone.py b/naiveproxy/src/build/android/gyp/errorprone.py new file mode 100755 index 0000000000..8d3c31f45d --- /dev/null +++ b/naiveproxy/src/build/android/gyp/errorprone.py @@ -0,0 +1,267 @@ +#!/usr/bin/env python3 +# +# Copyright 2025 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +"""Run Error Prone.""" + +import argparse +import sys + +import compile_java +from util import server_utils + +# Add a check here to cause the suggested fix to be applied while compiling. +# Use this when trying to enable more checks. +ERRORPRONE_CHECKS_TO_APPLY = [] + +# Checks to disable in tests. +TESTONLY_ERRORPRONE_WARNINGS_TO_DISABLE = [ + # Too much effort to enable. + 'UnusedVariable', + # These are allowed in tests. + 'NoStreams', +] + +# Full list of checks: https://errorprone.info/bugpatterns +ERRORPRONE_WARNINGS_TO_DISABLE = [ + 'InlineMeInliner', + 'InlineMeSuggester', + # High priority to enable: + 'HidingField', + 'AlreadyChecked', + 'DirectInvocationOnMock', + 'MockNotUsedInProduction', + # High priority to enable in non-tests: + 'JdkObsolete', + 'ReturnValueIgnored', + 'StaticAssignmentInConstructor', + # These are all for Javadoc, which we don't really care about. + # vvv + 'InvalidBlockTag', + 'InvalidParam', + 'InvalidLink', + 'InvalidInlineTag', + 'MalformedInlineTag', + 'MissingSummary', + 'UnescapedEntity', + 'UnrecognisedJavadocTag', + # ^^^ + 'MutablePublicArray', + 'NonCanonicalType', + 'DoNotClaimAnnotations', + 'JavaUtilDate', + 'IdentityHashMapUsage', + 'StaticMockMember', + # Triggers in tests where this is useful to do. + 'StaticAssignmentOfThrowable', + # TODO(crbug.com/41384349): Follow steps in bug. + 'CatchAndPrintStackTrace', + # TODO(crbug.com/41364806): Follow steps in bug. + 'TypeParameterUnusedInFormals', + # Android platform default is always UTF-8. + # https://developer.android.com/reference/java/nio/charset/Charset.html#defaultCharset() + 'DefaultCharset', + # There are lots of times when we just want to post a task. + 'FutureReturnValueIgnored', + # Just false positives in our code. + 'ThreadJoinLoop', + # Low priority corner cases with String.split. + # Linking Guava and using Splitter was rejected + # in the https://chromium-review.googlesource.com/c/chromium/src/+/871630. + 'StringSplitter', + # Preferred to use another method since it propagates exceptions better. + 'ClassNewInstance', + # Results in false positives. + 'ThreadLocalUsage', + # Low priority. + 'EqualsHashCode', + # Not necessary for tests. + 'OverrideThrowableToString', + # Not that useful. + 'UnsafeReflectiveConstructionCast', + # Not that useful. + 'MixedMutabilityReturnType', + # Nice to have. + 'EqualsGetClass', + # A lot of false-positives from CharSequence.equals(). + 'UndefinedEquals', + # Dagger generated code triggers this. + 'SameNameButDifferent', + # Does not apply to Android because it assumes no desugaring. + 'UnnecessaryLambda', + # Nice to have. + 'EmptyCatch', + # Nice to have. + 'BadImport', + # Nice to have. + 'UseCorrectAssertInTests', + # Must be off since we are now passing in annotation processor generated + # code as a source jar (deduplicating work with turbine). + 'RefersToDaggerCodegen', + # We already have presubmit checks for this. We don't want it to fail + # local compiles. + 'RemoveUnusedImports', + # Only has false positives (would not want to enable this). + 'UnicodeEscape', + # A lot of existing violations. e.g. Should return List and not ArrayList + 'NonApiType', + # Nice to have. + 'StringCharset', + # Nice to have. + 'StringCaseLocaleUsage', + # Low priority. + 'RedundantControlFlow', +] + +# Full list of checks: https://errorprone.info/bugpatterns +# Only those marked as "experimental" need to be listed here in order to be +# enabled. +ERRORPRONE_WARNINGS_TO_ENABLE = [ + 'BinderIdentityRestoredDangerously', + 'EmptyIf', + 'EqualsBrokenForNull', + 'InvalidThrows', + 'LongLiteralLowerCaseSuffix', + 'MultiVariableDeclaration', + 'RedundantOverride', + 'StaticQualifiedUsingExpression', + 'TimeUnitMismatch', + 'UnnecessaryStaticImport', + 'UseBinds', + 'WildcardImport', + 'NoStreams', +] + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('--skip-build-server', + action='store_true', + help='Avoid using the build server.') + parser.add_argument('--use-build-server', + action='store_true', + help='Always use the build server.') + parser.add_argument('--testonly', + action='store_true', + help='Disable some Error Prone checks') + parser.add_argument('--enable-nullaway', + action='store_true', + help='Enable NullAway (requires --enable-errorprone)') + parser.add_argument('--stamp', + required=True, + help='Path of output .stamp file') + options, compile_java_argv = parser.parse_known_args() + + compile_java_argv += ['--jar-path', options.stamp] + + # Use the build server for errorprone runs. + if not options.skip_build_server and (server_utils.MaybeRunCommand( + name=options.stamp, + argv=sys.argv, + stamp_file=options.stamp, + use_build_server=options.use_build_server)): + compile_java.main(compile_java_argv, write_depfile_only=True) + return + + # All errorprone args are passed space-separated in a single arg. + errorprone_flags = ['-Xplugin:ErrorProne'] + + if options.enable_nullaway: + # See: https://github.com/uber/NullAway/wiki/Configuration + # Check nullability only for classes marked with @NullMarked (this is our + # migration story). + errorprone_flags += ['-XepOpt:NullAway:OnlyNullMarked'] + errorprone_flags += [ + '-XepOpt:NullAway:CustomContractAnnotations=' + 'org.chromium.build.annotations.Contract,' + 'org.chromium.support_lib_boundary.util.Contract' + ] + # TODO(agrieve): Re-enable once this is fixed: + # https://github.com/uber/NullAway/issues/1104 + # errorprone_flags += ['-XepOpt:NullAway:CheckContracts=true'] + + # Make it a warning to use assumeNonNull() with a @NonNull. + errorprone_flags += [('-XepOpt:NullAway:CastToNonNullMethod=' + 'org.chromium.build.NullUtil.assumeNonNull')] + # Detect "assert foo != null" as a null check. + errorprone_flags += ['-XepOpt:NullAway:AssertsEnabled=true'] + # Do not ignore @Nullable & @NonNull in non-@NullMarked classes. + errorprone_flags += [ + '-XepOpt:NullAway:AcknowledgeRestrictiveAnnotations=true' + ] + # Treat @RecentlyNullable the same as @Nullable. + errorprone_flags += ['-XepOpt:Nullaway:AcknowledgeAndroidRecent=true'] + # Enable experimental checking of @Nullable generics. + # https://github.com/uber/NullAway/wiki/JSpecify-Support + errorprone_flags += ['-XepOpt:NullAway:JSpecifyMode=true'] + # Treat these the same as constructors. + init_methods = [ + 'android.app.Application.onCreate', + 'android.app.Activity.onCreate', + 'android.app.Service.onCreate', + 'android.app.backup.BackupAgent.onCreate', + 'android.content.ContentProvider.attachInfo', + 'android.content.ContentProvider.onCreate', + 'android.content.ContextWrapper.attachBaseContext', + ] + errorprone_flags += [ + '-XepOpt:NullAway:KnownInitializers=' + ','.join(init_methods) + ] + + # Make everything a warning so that when treat_warnings_as_errors is false, + # they do not fail the build. + errorprone_flags += ['-XepAllErrorsAsWarnings'] + # Don't check generated files (those tagged with @Generated). + errorprone_flags += ['-XepDisableWarningsInGeneratedCode'] + errorprone_flags.extend('-Xep:{}:OFF'.format(x) + for x in ERRORPRONE_WARNINGS_TO_DISABLE) + errorprone_flags.extend('-Xep:{}:WARN'.format(x) + for x in ERRORPRONE_WARNINGS_TO_ENABLE) + if options.testonly: + errorprone_flags.extend('-Xep:{}:OFF'.format(x) + for x in TESTONLY_ERRORPRONE_WARNINGS_TO_DISABLE) + + if ERRORPRONE_CHECKS_TO_APPLY: + to_apply = list(ERRORPRONE_CHECKS_TO_APPLY) + if options.testonly: + to_apply = [ + x for x in to_apply + if x not in TESTONLY_ERRORPRONE_WARNINGS_TO_DISABLE + ] + errorprone_flags += [ + '-XepPatchLocation:IN_PLACE', '-XepPatchChecks:,' + ','.join(to_apply) + ] + + # These are required to use JDK 16, and are taken directly from + # https://errorprone.info/docs/installation + javac_args = [ + '-J--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED', + '-J--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED', + '-J--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED', + '-J--add-exports=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED', + '-J--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED', + '-J--add-exports=jdk.compiler/com.sun.tools.javac.processing=' + 'ALL-UNNAMED', + '-J--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED', + '-J--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED', + '-J--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED', + '-J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED', + ] + + javac_args += ['-XDcompilePolicy=simple', ' '.join(errorprone_flags)] + + javac_args += ['-XDshould-stop.ifError=FLOW'] + # This flag quits errorprone after checks and before code generation, since + # we do not need errorprone outputs, this speeds up errorprone by 4 seconds + # for chrome_java. + if not ERRORPRONE_CHECKS_TO_APPLY: + javac_args += ['-XDshould-stop.ifNoError=FLOW'] + + compile_java.main(compile_java_argv, + extra_javac_args=javac_args, + use_errorprone=True) + + +if __name__ == '__main__': + main() diff --git a/naiveproxy/src/build/android/gyp/errorprone.pydeps b/naiveproxy/src/build/android/gyp/errorprone.pydeps new file mode 100644 index 0000000000..2841d0dd7f --- /dev/null +++ b/naiveproxy/src/build/android/gyp/errorprone.pydeps @@ -0,0 +1,34 @@ +# Generated by running: +# build/print_python_deps.py --root build/android/gyp --output build/android/gyp/errorprone.pydeps build/android/gyp/errorprone.py +../../../third_party/catapult/devil/devil/__init__.py +../../../third_party/catapult/devil/devil/android/__init__.py +../../../third_party/catapult/devil/devil/android/constants/__init__.py +../../../third_party/catapult/devil/devil/android/constants/chrome.py +../../../third_party/catapult/devil/devil/android/sdk/__init__.py +../../../third_party/catapult/devil/devil/android/sdk/keyevent.py +../../../third_party/catapult/devil/devil/android/sdk/version_codes.py +../../../third_party/catapult/devil/devil/constants/__init__.py +../../../third_party/catapult/devil/devil/constants/exit_codes.py +../../../third_party/colorama/src/colorama/__init__.py +../../../third_party/colorama/src/colorama/ansi.py +../../../third_party/colorama/src/colorama/ansitowin32.py +../../../third_party/colorama/src/colorama/initialise.py +../../../third_party/colorama/src/colorama/win32.py +../../../third_party/colorama/src/colorama/winterm.py +../../action_helpers.py +../../gn_helpers.py +../../print_python_deps.py +../../zip_helpers.py +../list_java_targets.py +../pylib/__init__.py +../pylib/constants/__init__.py +compile_java.py +errorprone.py +javac_output_processor.py +util/__init__.py +util/build_utils.py +util/dep_utils.py +util/jar_info_utils.py +util/jar_utils.py +util/md5_check.py +util/server_utils.py diff --git a/naiveproxy/src/build/android/gyp/generate_linker_version_script.py b/naiveproxy/src/build/android/gyp/generate_linker_version_script.py index a165cbb6f8..1ace7cac31 100755 --- a/naiveproxy/src/build/android/gyp/generate_linker_version_script.py +++ b/naiveproxy/src/build/android/gyp/generate_linker_version_script.py @@ -57,9 +57,7 @@ def main(): # for libcrashpad_handler_trampoline.so. symbol_list = ['CrashpadHandlerMain', 'JNI_OnLoad'] - if options.jni_multiplexing: - symbol_list.append('Java_J_*N__*') - elif options.export_fortesting_java_symbols: + if options.export_fortesting_java_symbols or options.jni_multiplexing: symbol_list.append('Java_*') else: # The linker uses unix shell globbing patterns, not regex. So, we have to diff --git a/naiveproxy/src/build/android/gyp/lint.py b/naiveproxy/src/build/android/gyp/lint.py index 973bacccf5..bf8dc8136d 100755 --- a/naiveproxy/src/build/android/gyp/lint.py +++ b/naiveproxy/src/build/android/gyp/lint.py @@ -42,7 +42,6 @@ _DISABLED_ALWAYS = [ "VisibleForTests", # Does not recognize "ForTesting" methods. "UniqueConstants", # Chromium enums allow aliases. "UnusedAttribute", # Chromium apks have various minSdkVersion values. - "NullSafeMutableLiveData", # Broken. See b/370586513. ] _RES_ZIP_DIR = 'RESZIPS' @@ -346,7 +345,7 @@ def _RunLint(custom_lint_jar_path, r'\[UnknownIssueId\]', # If all the warnings are filtered, we should not fail on the final # summary line. - r'\d+ errors, \d+ warnings', + r'\d+ errors?, \d+ warnings?', ] return build_utils.FilterLines(output, '|'.join(filter_patterns)) @@ -546,7 +545,7 @@ def main(): args.create_cache, warnings_as_errors=args.warnings_as_errors) logging.info('Creating stamp file') - build_utils.Touch(args.stamp) + server_utils.MaybeTouch(args.stamp) if __name__ == '__main__': diff --git a/naiveproxy/src/build/android/gyp/proguard.py b/naiveproxy/src/build/android/gyp/proguard.py index eca9fb9ecd..ff2df01139 100755 --- a/naiveproxy/src/build/android/gyp/proguard.py +++ b/naiveproxy/src/build/android/gyp/proguard.py @@ -5,6 +5,7 @@ # found in the LICENSE file. import argparse +import json import logging import os import pathlib @@ -60,7 +61,7 @@ _IGNORE_WARNINGS = ( # We enforce that this class is removed via -checkdiscard. r'FastServiceLoader\.class:.*Could not inline ServiceLoader\.load', # Happens on internal builds. It's a real failure, but happens in dead code. - r'(?:GeneratedExtensionRegistryLoader|ExtensionRegistryLite)\.class:.*Could not inline ServiceLoader\.load', # pylint: disable=line-too-long + r'(?:GeneratedExtensionRegistryLoader|ExtensionRegistryLite)\.class:.*Could not inline ServiceLoader\.load', # pylint: disable=line-too-long # This class is referenced by kotlinx-coroutines-core-jvm but it does not # depend on it. Not actually needed though. r'Missing class org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement', @@ -72,6 +73,9 @@ _IGNORE_WARNINGS = ( # corresponding EnclosingMethod attribute. Such InnerClasses attribute # entries are ignored." r'Warning: InnerClasses attribute has entries missing a corresponding EnclosingMethod attribute', # pylint: disable=line-too-long + # Warning in obj/third_party/android_deps/google_play_services_fido_java/classes.jar:com/google/android/gms/internal/fido/zzel$zza.class: # pylint: disable=line-too-long + # Classes with missing EnclosingMethod: com.google.android.gms.internal.fido.zzel$zza # pylint: disable=line-too-long + r'Classes with missing EnclosingMethod', # Full error example: "Warning in : # androidx/test/espresso/web/internal/deps/guava/collect/Maps$1.class:" # Also happens in espresso core. @@ -86,8 +90,6 @@ _BLOCKLISTED_EXPECTATION_PATHS = [ 'clank/third_party/google3/cipd/pg_confs/', ] -_DUMP_DIR_NAME = 'r8inputs_dir' - def _ParseOptions(): args = build_utils.ExpandFileArgs(sys.argv[1:]) @@ -98,12 +100,13 @@ def _ParseOptions(): help='Path to the R8.jar to use.') parser.add_argument('--custom-r8-path', required=True, - help='Path to our custom R8 wrapepr to use.') + help='Path to our custom R8 wrapper to use.') parser.add_argument('--input-paths', action='append', required=True, help='GN-list of .jar files to optimize.') parser.add_argument('--output-path', help='Path to the generated .jar file.') + parser.add_argument('--tracerefs-json-out') parser.add_argument( '--proguard-configs', action='append', @@ -139,10 +142,9 @@ def _ParseOptions(): parser.add_argument('--repackage-classes', default='', help='Value for -repackageclasses.') - parser.add_argument( - '--disable-checks', - action='store_true', - help='Disable -checkdiscard directives and missing symbols check') + parser.add_argument('--disable-checks', + action='store_true', + help='Disable -checkdiscard directives') parser.add_argument('--source-file', help='Value for source file attribute.') parser.add_argument('--package-name', help='Goes into a comment in the mapping file.') @@ -351,9 +353,9 @@ def _OptimizeWithR8(options, config_paths, libraries, dynamic_config_data): '-Dcom.android.tools.r8.allowCodeReplacement=false', # Required to use "-keep,allowcodereplacement" '-Dcom.android.tools.r8.allowTestProguardOptions=true', - # Can remove this once the pass is enabled by default. - # b/145280859 - '-Dcom.android.tools.r8.enableListIterationRewriting=1', + # Needed because we don't add an unconditional -keep for Enum.values() + # methods. http://b/204939965 + '-Dcom.android.tools.r8.experimentalTraceEnumReflection=1', ] if options.sdk_extension_jars: # Enable API modelling for OS extensions. https://b/326252366 @@ -362,7 +364,7 @@ def _OptimizeWithR8(options, config_paths, libraries, dynamic_config_data): ','.join(options.sdk_extension_jars) ] if options.dump_inputs: - cmd += [f'-Dcom.android.tools.r8.dumpinputtodirectory={_DUMP_DIR_NAME}'] + cmd += ['-Dcom.android.tools.r8.dumpinputtofile=r8inputs.zip'] if options.dump_unknown_refs: cmd += ['-Dcom.android.tools.r8.reportUnknownApiReferences=1'] cmd += [ @@ -488,104 +490,6 @@ def _OutputKeepRules(r8_path, input_paths, libraries, targets_re_string, build_utils.CheckOutput(cmd, print_stderr=False, fail_on_output=False) -def _CheckForMissingSymbols(options, dex_files, error_title): - cmd = build_utils.JavaCmd(xmx='2G') - - if options.dump_inputs: - cmd += [f'-Dcom.android.tools.r8.dumpinputtodirectory={_DUMP_DIR_NAME}'] - - cmd += [ - '-cp', options.r8_path, - 'com.android.tools.r8.tracereferences.TraceReferences', - '--map-diagnostics:MissingDefinitionsDiagnostic', 'error', 'warning', - '--check' - ] - - for path in options.sdk_jars + options.sdk_extension_jars: - cmd += ['--lib', path] - for path in dex_files: - cmd += ['--source', path] - - failed_holder = [False] - - def stderr_filter(stderr): - ignored_lines = [ - # Summary contains warning count, which our filtering makes wrong. - 'Warning: Tracereferences found', - - # TODO(agrieve): Create interface jars for these missing classes rather - # than allowlisting here. - 'dalvik.system', - 'libcore.io', - 'sun.misc.Unsafe', - - # Found in: com/facebook/fbui/textlayoutbuilder/StaticLayoutHelper - 'android.text.StaticLayout.', - # TODO(crbug.com/40261573): Remove once chrome builds with Android U - # SDK. - ' android.', - - # Explicictly guarded by try (NoClassDefFoundError) in Flogger's - # PlatformProvider. - 'com.google.common.flogger.backend.google.GooglePlatform', - 'com.google.common.flogger.backend.system.DefaultPlatform', - - # TODO(agrieve): Exclude these only when use_jacoco_coverage=true. - 'java.lang.instrument.ClassFileTransformer', - 'java.lang.instrument.IllegalClassFormatException', - 'java.lang.instrument.Instrumentation', - 'java.lang.management.ManagementFactory', - 'javax.management.MBeanServer', - 'javax.management.ObjectInstance', - 'javax.management.ObjectName', - 'javax.management.StandardMBean', - - # Explicitly guarded by try (NoClassDefFoundError) in Firebase's - # KotlinDetector: com.google.firebase.platforminfo.KotlinDetector. - 'kotlin.KotlinVersion', - - # Not sure why these two are missing, but they do not seem important. - 'ResultIgnorabilityUnspecified', - 'kotlin.DeprecationLevel', - ] - - had_unfiltered_items = ' ' in stderr - stderr = build_utils.FilterLines( - stderr, '|'.join(re.escape(x) for x in ignored_lines)) - if stderr: - if 'Missing' in stderr: - failed_holder[0] = True - stderr = 'TraceReferences failed: ' + error_title + """ -Tip: Build with: - is_java_debug=false - treat_warnings_as_errors=false - enable_proguard_obfuscation=false - and then use dexdump to see which class(s) reference them. - - E.g.: - third_party/android_sdk/public/build-tools/*/dexdump -d \ -out/Release/apks/YourApk.apk > dex.txt -""" + stderr - elif had_unfiltered_items: - # Left only with empty headings. All indented items filtered out. - stderr = '' - return stderr - - try: - if options.verbose: - stderr_filter = None - build_utils.CheckOutput(cmd, - print_stdout=True, - stderr_filter=stderr_filter, - fail_on_output=options.warnings_as_errors) - except build_utils.CalledProcessError as e: - # Do not output command line because it is massive and makes the actual - # error message hard to find. - sys.stderr.write(e.output) - sys.exit(1) - return failed_holder[0] - - def _CombineConfigs(configs, dynamic_config_data, embedded_configs, @@ -597,7 +501,9 @@ def _CombineConfigs(configs, def format_config_contents(path, contents): formatted_contents = [] - if not contents.strip(): + # Ignore files that contain only comments (androidx has a lot of these). + if all(l.isspace() or l.rstrip().startswith('#') + for l in contents.splitlines()): return [] # Fix up line endings (third_party configs can have windows endings). @@ -687,7 +593,7 @@ def _IterParentContexts(context_name, split_contexts_by_name): context_name = context.parent_name -def _DoTraceReferencesChecks(options, split_contexts_by_name): +def _WriteTraceReferencesJson(options, split_contexts_by_name): # Set of all contexts that are a parent to another. parent_splits_context_names = { c.parent_name @@ -701,26 +607,25 @@ def _DoTraceReferencesChecks(options, split_contexts_by_name): context_sets.sort(key=lambda x: (len(x), x[0].name)) # Ensure there are no missing references when considering all dex files. - error_title = 'DEX contains references to non-existent symbols after R8.' dex_files = sorted(c.final_output_path for c in split_contexts_by_name.values()) - if _CheckForMissingSymbols(options, dex_files, error_title): - # Failed but didn't raise due to warnings_as_errors=False - return + payload = { + 'r8jar': options.r8_path, + 'libs': options.sdk_jars + options.sdk_extension_jars, + 'jobs': [], + } + # Ensure there are no missing references when considering all dex files. + payload['jobs'].append({'name': '', 'jars': dex_files}) + + # Ensure there are no references from base -> chrome module, or from + # base+chrome -> feature modules. for context_set in context_sets: - # Ensure there are no references from base -> chrome module, or from - # chrome -> feature modules. - error_title = (f'DEX within module "{context_set[0].name}" contains ' - 'reference(s) to symbols within child splits') dex_files = [c.final_output_path for c in context_set] - # Each check currently takes about 3 seconds on a fast dev machine, and we - # run 3 of them (all, base, base+chrome). - # We could run them concurrently, to shave off 5-6 seconds, but would need - # to make sure that the order is maintained. - if _CheckForMissingSymbols(options, dex_files, error_title): - # Failed but didn't raise due to warnings_as_errors=False - return + payload['jobs'].append({'name': context_set[0].name, 'jars': dex_files}) + + with action_helpers.atomic_output(options.tracerefs_json_out, 'wt') as f: + json.dump(payload, f, indent=2) def _Run(options): @@ -759,9 +664,9 @@ def _Run(options): split_contexts_by_name = _OptimizeWithR8(options, options.proguard_configs, libraries, dynamic_config_data) - if not options.disable_checks: - logging.debug('Running tracereferences') - _DoTraceReferencesChecks(options, split_contexts_by_name) + if options.tracerefs_json_out: + logging.debug('Writing TraceReferences .json') + _WriteTraceReferencesJson(options, split_contexts_by_name) for output in options.extra_mapping_output_paths: shutil.copy(options.mapping_output, output) @@ -779,21 +684,8 @@ def main(): if options.dump_inputs: # Dumping inputs causes output to be emitted, avoid failing due to stdout. options.warnings_as_errors = False - # Use dumpinputtodirectory instead of dumpinputtofile to avoid failing the - # build and keep running tracereferences. - dump_dir_name = _DUMP_DIR_NAME - dump_dir_path = pathlib.Path(dump_dir_name) - if dump_dir_path.exists(): - shutil.rmtree(dump_dir_path) - # The directory needs to exist before r8 adds the zip files in it. - dump_dir_path.mkdir() - # This ensure that the final outputs are zipped and easily uploaded to a bug. - try: - _Run(options) - finally: - if options.dump_inputs: - zip_helpers.zip_directory('r8inputs.zip', _DUMP_DIR_NAME) + _Run(options) if __name__ == '__main__': diff --git a/naiveproxy/src/build/android/gyp/tracereferences.py b/naiveproxy/src/build/android/gyp/tracereferences.py new file mode 100755 index 0000000000..0fa819c213 --- /dev/null +++ b/naiveproxy/src/build/android/gyp/tracereferences.py @@ -0,0 +1,189 @@ +#!/usr/bin/env python3 +# Copyright 2025 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +"""Runs R8's TraceReferences tool to ensure DEX files are valid.""" + +import argparse +import json +import logging +import os +import pathlib +import re +import sys + +from util import build_utils +from util import server_utils +import action_helpers # build_utils adds //build to sys.path. + +_DUMP_DIR_NAME = 'r8inputs_tracerefs' + + +def _RunTraceReferences(error_title, r8jar, libs, dex_files, options): + cmd = build_utils.JavaCmd(xmx='2G') + + if options.dump_inputs: + cmd += [f'-Dcom.android.tools.r8.dumpinputtodirectory={_DUMP_DIR_NAME}'] + + cmd += [ + '-cp', r8jar, 'com.android.tools.r8.tracereferences.TraceReferences', + '--map-diagnostics:MissingDefinitionsDiagnostic', 'error', 'warning', + '--check' + ] + + for path in libs: + cmd += ['--lib', path] + for path in dex_files: + cmd += ['--source', path] + + failed_holder = [False] + + def stderr_filter(stderr): + ignored_lines = [ + # Summary contains warning count, which our filtering makes wrong. + 'Warning: Tracereferences found', + + # TODO(agrieve): Create interface jars for these missing classes rather + # than allowlisting here. + 'dalvik.system', + 'libcore.io', + 'sun.misc.Unsafe', + + # Found in: com/facebook/fbui/textlayoutbuilder/StaticLayoutHelper + 'android.text.StaticLayout.', + # TODO(crbug.com/40261573): Remove once chrome builds with Android U + # SDK. + ' android.', + + # Explicictly guarded by try (NoClassDefFoundError) in Flogger's + # PlatformProvider. + 'com.google.common.flogger.backend.google.GooglePlatform', + 'com.google.common.flogger.backend.system.DefaultPlatform', + + # TODO(agrieve): Exclude these only when use_jacoco_coverage=true. + 'java.lang.instrument.ClassFileTransformer', + 'java.lang.instrument.IllegalClassFormatException', + 'java.lang.instrument.Instrumentation', + 'java.lang.management.ManagementFactory', + 'javax.management.MBeanServer', + 'javax.management.ObjectInstance', + 'javax.management.ObjectName', + 'javax.management.StandardMBean', + + # Explicitly guarded by try (NoClassDefFoundError) in Firebase's + # KotlinDetector: com.google.firebase.platforminfo.KotlinDetector. + 'kotlin.KotlinVersion', + + # Not sure why these two are missing, but they do not seem important. + 'ResultIgnorabilityUnspecified', + 'kotlin.DeprecationLevel', + ] + + had_unfiltered_items = ' ' in stderr + stderr = build_utils.FilterLines( + stderr, '|'.join(re.escape(x) for x in ignored_lines)) + if stderr: + if 'Missing' in stderr: + failed_holder[0] = True + stderr = 'TraceReferences failed: ' + error_title + """ +Tip: Build with: + is_java_debug=false + treat_warnings_as_errors=false + enable_proguard_obfuscation=false + and then use dexdump to see which class(s) reference them. + + E.g.: + third_party/android_sdk/public/build-tools/*/dexdump -d \ +out/Release/apks/YourApk.apk > dex.txt +""" + stderr + elif had_unfiltered_items: + # Left only with empty headings. All indented items filtered out. + stderr = '' + return stderr + + try: + if options.verbose: + stderr_filter = None + build_utils.CheckOutput(cmd, + print_stdout=True, + stderr_filter=stderr_filter, + fail_on_output=options.warnings_as_errors) + except build_utils.CalledProcessError as e: + # Do not output command line because it is massive and makes the actual + # error message hard to find. + sys.stderr.write(e.output) + sys.exit(1) + return failed_holder[0] + + +def main(): + build_utils.InitLogging('TRACEREFS_DEBUG') + + parser = argparse.ArgumentParser() + parser.add_argument('--tracerefs-json') + parser.add_argument('--use-build-server', + action='store_true', + help='Always use the build server.') + parser.add_argument('--stamp') + parser.add_argument('--depfile') + parser.add_argument('--warnings-as-errors', + action='store_true', + help='Treat all warnings as errors.') + parser.add_argument('--dump-inputs', + action='store_true', + help='Use when filing R8 bugs to capture inputs.' + ' Stores inputs to r8inputs.zip') + parser.add_argument('--verbose', + action='store_true', + help='Do not filter output') + args = parser.parse_args() + + with open(args.tracerefs_json) as f: + spec = json.load(f) + r8jar = spec['r8jar'] + libs = spec['libs'] + + # No need for r8jar here because GN knows about it already. + depfile_deps = [] + depfile_deps += libs + for job in spec['jobs']: + depfile_deps += job['jars'] + + action_helpers.write_depfile(args.depfile, args.stamp, depfile_deps) + + if server_utils.MaybeRunCommand(name=args.stamp, + argv=sys.argv, + stamp_file=args.stamp, + use_build_server=args.use_build_server): + return + + if args.dump_inputs: + # Dumping inputs causes output to be emitted, avoid failing due to stdout. + args.warnings_as_errors = False + + # Use dumpinputtodirectory instead of dumpinputtofile to avoid failing the + # build and keep running tracereferences. + dump_dir_name = _DUMP_DIR_NAME + dump_dir_path = pathlib.Path(dump_dir_name) + if dump_dir_path.exists(): + shutil.rmtree(dump_dir_path) + # The directory needs to exist before r8 adds the zip files in it. + dump_dir_path.mkdir() + + logging.debug('Running TraceReferences') + error_title = 'DEX contains references to non-existent symbols after R8.' + for job in spec['jobs']: + name = job['name'] + dex_files = job['jars'] + if _RunTraceReferences(error_title, r8jar, libs, dex_files, args): + # Failed but didn't raise due to warnings_as_errors=False + break + error_title = (f'DEX within module "{name}" contains reference(s) to ' + 'symbols within child splits') + + logging.info('Checks completed.') + server_utils.MaybeTouch(args.stamp) + + +if __name__ == '__main__': + main() diff --git a/naiveproxy/src/build/android/gyp/tracereferences.pydeps b/naiveproxy/src/build/android/gyp/tracereferences.pydeps new file mode 100644 index 0000000000..9b39669506 --- /dev/null +++ b/naiveproxy/src/build/android/gyp/tracereferences.pydeps @@ -0,0 +1,8 @@ +# Generated by running: +# build/print_python_deps.py --root build/android/gyp --output build/android/gyp/tracereferences.pydeps build/android/gyp/tracereferences.py +../../action_helpers.py +../../gn_helpers.py +tracereferences.py +util/__init__.py +util/build_utils.py +util/server_utils.py diff --git a/naiveproxy/src/build/android/gyp/util/server_utils.py b/naiveproxy/src/build/android/gyp/util/server_utils.py index bc8a96b868..535b7c725d 100644 --- a/naiveproxy/src/build/android/gyp/util/server_utils.py +++ b/naiveproxy/src/build/android/gyp/util/server_utils.py @@ -9,9 +9,7 @@ import pathlib import socket import platform import sys -import subprocess import struct -import time sys.path.insert(1, os.path.join(os.path.dirname(__file__), '..')) from util import build_utils @@ -65,8 +63,7 @@ def MaybeRunCommand(name, argv, stamp_file, use_build_server=False): raise e SendMessage( - sock, - json.dumps({ + sock, { 'name': name, 'message_type': ADD_TASK, 'cmd': argv, @@ -74,21 +71,32 @@ def MaybeRunCommand(name, argv, stamp_file, use_build_server=False): 'tty': autoninja_tty, 'build_id': autoninja_build_id, 'stamp_file': stamp_file, - }).encode('utf8')) + }) # Siso needs the stamp file to be created in order for the build step to # complete. If the task fails when the build server runs it, the build server # will delete the stamp file so that it will be run again next build. - pathlib.Path(stamp_file).touch() + build_utils.Touch(stamp_file) return True -def SendMessage(sock: socket.socket, message: bytes): - size_prefix = struct.pack('!i', len(message)) - sock.sendall(size_prefix + message) +def MaybeTouch(stamp_file): + """Touch |stamp_file| if we are not running under the build_server.""" + # If we are running under the build server, the stamp file has already been + # touched when the task was created. If we touch it again, siso will consider + # the target dirty. + if BUILD_SERVER_ENV_VARIABLE in os.environ: + return + build_utils.Touch(stamp_file) -def ReceiveMessage(sock: socket.socket): +def SendMessage(sock: socket.socket, message: dict): + data = json.dumps(message).encode('utf-8') + size_prefix = struct.pack('!i', len(data)) + sock.sendall(size_prefix + data) + + +def ReceiveMessage(sock: socket.socket) -> dict: size_prefix = b'' remaining = 4 # sizeof(int) while remaining > 0: @@ -105,4 +113,6 @@ def ReceiveMessage(sock: socket.socket): break received.append(data) remaining -= len(data) - return b''.join(received) + if received: + return json.loads(b''.join(received)) + return None diff --git a/naiveproxy/src/build/android/gyp/write_build_config.py b/naiveproxy/src/build/android/gyp/write_build_config.py index f8916e7795..b42e774969 100755 --- a/naiveproxy/src/build/android/gyp/write_build_config.py +++ b/naiveproxy/src/build/android/gyp/write_build_config.py @@ -1271,6 +1271,10 @@ def main(argv): parser.add_option('--version-name', help='Version name for this APK.') parser.add_option('--version-code', help='Version code for this APK.') + # dist_jar options + parser.add_option('--use-interface-jars', action='store_true') + parser.add_option('--direct-deps-only', action='store_true') + options, args = parser.parse_args(argv) if args: @@ -2103,14 +2107,21 @@ def main(argv): if options.tested_apk_config: deps_info['device_classpath_extended'] = device_classpath_extended - if options.type in ('android_apk', 'dist_jar'): - all_interface_jars = [] - if options.interface_jar_path: - all_interface_jars.append(options.interface_jar_path) - all_interface_jars.extend(c['interface_jar_path'] for c in all_library_deps) + if options.type == 'dist_jar': + if options.direct_deps_only: + if options.use_interface_jars: + dist_jars = config['javac']['interface_classpath'] + else: + dist_jars = sorted(c['device_jar_path'] + for c in classpath_direct_library_deps) + else: + if options.use_interface_jars: + dist_jars = [c['interface_jar_path'] for c in all_library_deps] + else: + dist_jars = deps_info['device_classpath'] config['dist_jar'] = { - 'all_interface_jars': all_interface_jars, + 'jars': dist_jars, } if is_apk_or_module_target: diff --git a/naiveproxy/src/build/android/incremental_install/BUILD.gn b/naiveproxy/src/build/android/incremental_install/BUILD.gn index 196e155c6d..6682cbc041 100644 --- a/naiveproxy/src/build/android/incremental_install/BUILD.gn +++ b/naiveproxy/src/build/android/incremental_install/BUILD.gn @@ -16,7 +16,7 @@ android_library("bootstrap_java") { ] deps = [ "third_party/AndroidHiddenApiBypass:hidden_api_bypass_java" ] jacoco_never_instrument = true - no_build_hooks = true + chromium_code = false # Disable build_java default dep. } dist_dex("apk_dex") { diff --git a/naiveproxy/src/build/android/list_java_targets.py b/naiveproxy/src/build/android/list_java_targets.py index 309b33a338..aeca42ef7d 100755 --- a/naiveproxy/src/build/android/list_java_targets.py +++ b/naiveproxy/src/build/android/list_java_targets.py @@ -234,10 +234,17 @@ def main(): constants.CheckOutputDirectory() output_dir = constants.GetOutDirectory() + if args.build: + _compile(output_dir, ['build.ninja']) + # Query ninja for all __build_config_crbug_908819 targets. targets = _query_for_build_config_targets(output_dir) entries = [_TargetEntry(t) for t in targets] + if not entries: + logging.warning('No targets found. Run with --build') + sys.exit(1) + if args.build: logging.warning('Building %d .build_config.json files...', len(entries)) _compile(output_dir, [e.ninja_build_config_target for e in entries], diff --git a/naiveproxy/src/build/android/pylib/gtest/gtest_test_instance.py b/naiveproxy/src/build/android/pylib/gtest/gtest_test_instance.py index 13ece6486b..e4b76b321e 100644 --- a/naiveproxy/src/build/android/pylib/gtest/gtest_test_instance.py +++ b/naiveproxy/src/build/android/pylib/gtest/gtest_test_instance.py @@ -355,6 +355,7 @@ class GtestTestInstance(test_instance.TestInstance): self._total_external_shards = args.test_launcher_total_shards self._wait_for_java_debugger = args.wait_for_java_debugger self._use_existing_test_data = args.use_existing_test_data + self._deploy_mock_openxr_runtime = args.deploy_mock_openxr_runtime # GYP: if args.executable_dist_dir: @@ -476,6 +477,10 @@ class GtestTestInstance(test_instance.TestInstance): def coverage_dir(self): return self._coverage_dir + @property + def deploy_mock_openxr_runtime(self): + return self._deploy_mock_openxr_runtime + @property def enable_xml_result_parsing(self): return self._enable_xml_result_parsing diff --git a/naiveproxy/src/build/android/pylib/local/device/local_device_gtest_run.py b/naiveproxy/src/build/android/pylib/local/device/local_device_gtest_run.py index 92a4db4199..226ade42e0 100644 --- a/naiveproxy/src/build/android/pylib/local/device/local_device_gtest_run.py +++ b/naiveproxy/src/build/android/pylib/local/device/local_device_gtest_run.py @@ -13,6 +13,7 @@ import os import posixpath import subprocess import shutil +import sys import time from devil import base_error @@ -21,6 +22,8 @@ from devil.android import device_errors from devil.android import device_temp_file from devil.android import logcat_monitor from devil.android import ports +from devil.android.ndk import abis +from devil.android.tools import system_app from devil.android.sdk import version_codes from devil.utils import reraiser_thread from incremental_install import installer @@ -543,9 +546,54 @@ class LocalDeviceGtestRun(local_device_test_run.LocalDeviceTestRun): for step in steps: step() - self._env.parallel_devices.pMap( - individual_device_set_up, - self._test_instance.GetDataDependencies()) + if self._test_instance.deploy_mock_openxr_runtime: + + def deploy_openxr_runtime(dev): + apk_path = dev.GetApplicationPaths( + self._test_instance.apk_helper.GetPackageName()) + apk_dir = os.path.dirname(apk_path[0]) + + abi = device.product_cpu_abi + # Some architectures don't map 1:1 with the folder names. + arch_path = {abis.ARM_64: 'arm64', abis.ARM: 'arm'}.get(abi, abi) + + device_openxr_runtime_path = os.path.join(apk_dir, 'lib', arch_path, + 'libopenxrruntime.so') + if not dev.PathExists(device_openxr_runtime_path, as_root=True): + logging.exception('Could not locate OpenXr runtime on device. ' + 'Note that openxr deployment seems to fail with ' + 'incremental_install=True') + sys.exit(1) + + local_json_path = os.path.join(constants.GetOutDirectory(), + 'mock_vr_clients', 'bin', 'openxr', + 'openxr.json') + device_json_path = '/product/etc/openxr/1/active_runtime.json' + with open(local_json_path, 'r') as local_json_file: + openxr_json_contents = local_json_file.read() + openxr_json_contents = openxr_json_contents.replace( + 'OPENXR_RUNTIME_PATH', device_openxr_runtime_path) + + # Enabling SystemAppModification is a slow process, and the files that + # need to be deployed this way are pretty static. As an optimization + # (especially for local development), only attempt a re-deployment if + # the contents of the files have changed. + if dev.PathExists(device_json_path, as_root=True): + device_json_contents = dev.ReadFile(device_json_path, as_root=True) + replace_openxr_json = (device_json_contents != openxr_json_contents) + else: + replace_openxr_json = True + + if replace_openxr_json: + with system_app.EnableSystemAppModification(device): + dev.WriteFile(device_json_path, + openxr_json_contents, + as_root=True) + + deploy_openxr_runtime(device) + + self._env.parallel_devices.pMap(individual_device_set_up, + self._test_instance.GetDataDependencies()) #override def _ShouldShardTestsForDevices(self): diff --git a/naiveproxy/src/build/android/pylib/local/device/local_device_gtest_run_test.py b/naiveproxy/src/build/android/pylib/local/device/local_device_gtest_run_test.py index dc947e7327..bc78184fe1 100755 --- a/naiveproxy/src/build/android/pylib/local/device/local_device_gtest_run_test.py +++ b/naiveproxy/src/build/android/pylib/local/device/local_device_gtest_run_test.py @@ -17,8 +17,10 @@ sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), from pylib.gtest import gtest_test_instance from pylib.local.device import local_device_environment from pylib.local.device import local_device_gtest_run +from pylib.local.device import local_device_test_run import mock # pylint: disable=import-error +from unittest.mock import MagicMock def isSliceInList(s, l): @@ -132,26 +134,41 @@ class LocalDeviceGtestRunTest(unittest.TestCase): class LocalDeviceGtestTestRunShardingTest(unittest.TestCase): def setUp(self): + self._env = mock.MagicMock( + spec=local_device_environment.LocalDeviceEnvironment) + self._test_instance = mock.MagicMock( + spec=gtest_test_instance.GtestTestInstance) self._obj = local_device_gtest_run.LocalDeviceGtestRun( - mock.MagicMock(spec=local_device_environment.LocalDeviceEnvironment), - mock.MagicMock(spec=gtest_test_instance.GtestTestInstance)) + self._env, self._test_instance) - def test_CreateShardsForDevices(self): - self._obj._env.devices = [1] - self._obj._test_instance.test_launcher_batch_limit = 2 - tests = [ + self.test_list = [ 'TestClass1.testcase1', 'TestClass2.testcase1', 'TestClass1.def_testcase3', 'TestClass1.abc_testcase2', 'TestClass3.testcase1' ] + + # Mock these methods called in RunTests + self._env.ResetCurrentTry = MagicMock(side_effect = self.reset_try) + self._env.IncrementCurrentTry = MagicMock(side_effect = self.increment_try) + self._obj._GetTests = MagicMock(return_value=self.test_list) + + def reset_try(self): + self._env.current_try = 0 + + def increment_try(self): + self._env.current_try += 1 + + def test_CreateShardsForDevices(self): + self._obj._env.devices = [1] + self._obj._test_instance.test_launcher_batch_limit = 2 expected_shards = [ ['TestClass1.testcase1', 'TestClass2.testcase1'], ['TestClass1.def_testcase3', 'TestClass1.abc_testcase2'], ['TestClass3.testcase1'] ] - actual_shards = self._obj._CreateShardsForDevices(tests) + actual_shards = self._obj._CreateShardsForDevices(self.test_list) self.assertEqual(expected_shards, actual_shards) def test_ApplyExternalSharding_1_shard(self): @@ -182,6 +199,57 @@ class LocalDeviceGtestTestRunShardingTest(unittest.TestCase): self.assertEqual(expected_shard1, expected_shard1) self.assertSetEqual(set(actual_shard0 + actual_shard1), set(tests)) + def test_deterministic_sharding_grouped_tests(self): + self._test_instance.external_shard_index = 0 + self._test_instance.total_external_shards = 1 + self._test_instance.test_launcher_batch_limit = 2 + self._env.devices = [1] + self._env.recover_devices = False + # 1 try and just the last try of mock_RunTestsOnDevice call is asserted + self._env.max_tries = 1 + + expected_shards = [ + ['TestClass1.def_testcase3', 'TestClass1.abc_testcase2'], + ['TestClass1.testcase1', 'TestClass3.testcase1'], + ['TestClass2.testcase1'] + ] + + # Mock pMap to call the provided function + def mock_pMap(func, *args): + for _ in self._env.devices: + func(*args) + return MagicMock() + + # Process test collection arg of last mock_RunTestsOnDevice call + def get_actual_shards(): + actual_shards = [] + # mock_RunTestsOnDevice must be called for call_args to not be None + mock_RunTestsOnDevice.assert_called() + tc = mock_RunTestsOnDevice.call_args.args[0] + for group in tc: + actual_shards.append(group) + tc.test_completed() + return actual_shards + + mock_RunTestsOnDevice = MagicMock( + autospec='local_device_test_run.LocalDeviceTestRun._RunTestsOnDevice') + # Monkey patch needed to call mock. Decorator patch calls original method + # instead of mock possibly due to decorator or pMap on original method. + (local_device_test_run.LocalDeviceTestRun + ._RunTestsOnDevice) = mock_RunTestsOnDevice + + with mock.patch.object( + self._env.parallel_devices, "pMap", side_effect=mock_pMap + ): + self._obj.RunTests(results=[]) + actual_shards = get_actual_shards() + self.assertEqual(actual_shards, expected_shards) + + # Check "Retry shards with patch" has deterministic test ordering + self._obj.RunTests(results=[]) + actual_shards = get_actual_shards() + self.assertEqual(actual_shards, expected_shards) + if __name__ == '__main__': unittest.main(verbosity=2) diff --git a/naiveproxy/src/build/android/pylib/local/device/local_device_instrumentation_test_run_test.py b/naiveproxy/src/build/android/pylib/local/device/local_device_instrumentation_test_run_test.py index 9111b12252..5f5e746b90 100755 --- a/naiveproxy/src/build/android/pylib/local/device/local_device_instrumentation_test_run_test.py +++ b/naiveproxy/src/build/android/pylib/local/device/local_device_instrumentation_test_run_test.py @@ -19,8 +19,10 @@ from pylib.base import base_test_result from pylib.base import mock_environment from pylib.base import mock_test_instance from pylib.local.device import local_device_instrumentation_test_run +from pylib.local.device import local_device_test_run import mock # pylint: disable=import-error +from unittest.mock import MagicMock class LocalDeviceInstrumentationTestRunTest(unittest.TestCase): @@ -195,6 +197,17 @@ class LocalDeviceInstrumentationTestRunShardingTest(unittest.TestCase): self.test8 ] + # Mock these methods called in RunTests + self._env.ResetCurrentTry = MagicMock(side_effect = self.reset_try) + self._env.IncrementCurrentTry = MagicMock(side_effect = self.increment_try) + self._obj._GetTests = MagicMock(return_value=self.test_list) + + def reset_try(self): + self._env.current_try = 0 + + def increment_try(self): + self._env.current_try += 1 + def test_GroupTestsIntoBatchesAndOthers(self): expected_batched_tests = { 'batch1': [self.test1_batch1, self.test4_batch1, self.test5_batch1] @@ -213,8 +226,8 @@ class LocalDeviceInstrumentationTestRunShardingTest(unittest.TestCase): def test_GroupTests(self): expected_tests = [ [self.test1_batch1, self.test4_batch1], - self.test3_multiprocess, self.test8, self.test2, self.test7, - self.test6, + self.test3_multiprocess, self.test8, self.test2, + self.test7, self.test6, [self.test5_batch1], self.test3 ] @@ -224,8 +237,8 @@ class LocalDeviceInstrumentationTestRunShardingTest(unittest.TestCase): def test_GroupTestsAfterSharding(self): expected_tests = [ [self.test1_batch1, self.test4_batch1, self.test5_batch1], - self.test3_multiprocess, self.test8, self.test2, self.test7, - self.test6, self.test3 + self.test3_multiprocess, self.test8, self.test2, + self.test7, self.test6, self.test3 ] actual_tests = self._obj._GroupTestsAfterSharding(self.test_list) self.assertEqual(actual_tests, expected_tests) @@ -265,6 +278,54 @@ class LocalDeviceInstrumentationTestRunShardingTest(unittest.TestCase): actual_tests = self._obj._CreateShardsForDevices(self.test_list) self.assertEqual(actual_tests, self.test_list) + def test_deterministic_sharding_grouped_tests(self): + self._env.devices = [1] + # 1 try and just the last try of mock_RunTestsOnDevice call is asserted + self._env.max_tries = 1 + + expected_shards = [ + [self.test1_batch1, self.test4_batch1, self.test5_batch1], + self.test3_multiprocess, self.test8, self.test2, + self.test7, self.test6, self.test3 + ] + + # Mock pMap to call the provided function + def mock_pMap(func, *args): + for _ in self._env.devices: + func(*args) + return MagicMock() + + # Store test collection arg as actual_shards + def get_actual_shards(): + actual_shards = [] + # mock_RunTestsOnDevice must be called for call_args to not be None + mock_RunTestsOnDevice.assert_called() + tc = mock_RunTestsOnDevice.call_args.args[0] + for group in tc: + actual_shards.append(group) + tc.test_completed() + return actual_shards + + mock_RunTestsOnDevice = MagicMock( + autospec='local_device_test_run.LocalDeviceTestRun._RunTestsOnDevice') + # Monkey patch needed to call mock. Decorator patch calls original method + # instead of mock possibly due to decorator or pMap on original method. + (local_device_test_run.LocalDeviceTestRun + ._RunTestsOnDevice) = mock_RunTestsOnDevice + + with mock.patch.object( + self._env.parallel_devices, "pMap", side_effect=mock_pMap + ): + self._obj.RunTests(results=[]) + actual_shards = get_actual_shards() + self.assertEqual(actual_shards, expected_shards) + + # Check "Retry shards with patch" has deterministic test ordering + self._obj.RunTests(results=[]) + actual_shards = get_actual_shards() + self.assertEqual(actual_shards, expected_shards) + + def create_test(annotation_dict, class_name, method_name): # Helper function to generate test dict test = { diff --git a/naiveproxy/src/build/android/pylib/local/device/local_device_test_run.py b/naiveproxy/src/build/android/pylib/local/device/local_device_test_run.py index add1ea6185..af14761eb7 100644 --- a/naiveproxy/src/build/android/pylib/local/device/local_device_test_run.py +++ b/naiveproxy/src/build/android/pylib/local/device/local_device_test_run.py @@ -46,102 +46,102 @@ class LocalDeviceTestRun(test_run.TestRun): self._installed_packages = [] env.SetPreferredAbis(test_instance.GetPreferredAbis()) + @local_device_environment.handle_shard_failures + def _RunTestsOnDevice(self, dev, tests, results, exit_now): + # This is performed here instead of during setup because restarting the + # device clears app compatibility flags, which will happen if a device + # needs to be recovered. + SetAppCompatibilityFlagsIfNecessary(self._installed_packages, dev) + consecutive_device_errors = 0 + for test in tests: + if not test: + logging.warning('No tests in shard. Continuing.') + tests.test_completed() + continue + if exit_now.isSet(): + thread.exit() + + result = None + rerun = None + try: + result, rerun = crash_handler.RetryOnSystemCrash( + lambda d, t=test: self._RunTest(d, t), + device=dev) + consecutive_device_errors = 0 + if isinstance(result, base_test_result.BaseTestResult): + results.AddResult(result) + elif isinstance(result, list): + results.AddResults(result) + else: + raise Exception( + 'Unexpected result type: %s' % type(result).__name__) + except device_errors.CommandTimeoutError as e: + exception_recorder.register(e) + # Test timeouts don't count as device errors for the purpose + # of bad device detection. + consecutive_device_errors = 0 + + if isinstance(test, list): + result_log = '' + if len(test) > 1: + result_log = ('The test command timed out when running multiple ' + 'tests including this test. It does not ' + 'necessarily mean this specific test timed out.') + # Ensure instrumentation tests not batched at env level retries. + for t in test: + # |dict| type infers it's an instrumentation test. + if isinstance(t, dict) and t['annotations']: + t['annotations'].pop('Batch', None) + + results.AddResults( + base_test_result.BaseTestResult( + self._GetUniqueTestName(t), + base_test_result.ResultType.TIMEOUT, + log=result_log) for t in test) + else: + results.AddResult( + base_test_result.BaseTestResult( + self._GetUniqueTestName(test), + base_test_result.ResultType.TIMEOUT)) + except device_errors.DeviceUnreachableError as e: + exception_recorder.register(e) + # If the device is no longer reachable then terminate this + # _RunTestsOnDevice call. + raise + except base_error.BaseError as e: + exception_recorder.register(e) + # If we get a device error but believe the device is still + # reachable, attempt to continue using it. + if isinstance(tests, test_collection.TestCollection): + rerun = test + + consecutive_device_errors += 1 + if consecutive_device_errors >= 3: + # We believe the device is still reachable and may still be usable, + # but if it fails repeatedly, we shouldn't attempt to keep using + # it. + logging.error('Repeated failures on device %s. Abandoning.', + str(dev)) + raise + + logging.exception( + 'Attempting to continue using device %s despite failure (%d/3).', + str(dev), consecutive_device_errors) + + finally: + if isinstance(tests, test_collection.TestCollection): + if rerun: + tests.add(rerun) + tests.test_completed() + + logging.info('Finished running tests on this device.') + #override def RunTests(self, results, raw_logs_fh=None): tests = self._GetTests() exit_now = threading.Event() - @local_device_environment.handle_shard_failures - def run_tests_on_device(dev, tests, results): - # This is performed here instead of during setup because restarting the - # device clears app compatibility flags, which will happen if a device - # needs to be recovered. - SetAppCompatibilityFlagsIfNecessary(self._installed_packages, dev) - consecutive_device_errors = 0 - for test in tests: - if not test: - logging.warning('No tests in shard. Continuing.') - tests.test_completed() - continue - if exit_now.isSet(): - thread.exit() - - result = None - rerun = None - try: - result, rerun = crash_handler.RetryOnSystemCrash( - lambda d, t=test: self._RunTest(d, t), - device=dev) - consecutive_device_errors = 0 - if isinstance(result, base_test_result.BaseTestResult): - results.AddResult(result) - elif isinstance(result, list): - results.AddResults(result) - else: - raise Exception( - 'Unexpected result type: %s' % type(result).__name__) - except device_errors.CommandTimeoutError as e: - exception_recorder.register(e) - # Test timeouts don't count as device errors for the purpose - # of bad device detection. - consecutive_device_errors = 0 - - if isinstance(test, list): - result_log = '' - if len(test) > 1: - result_log = ('The test command timed out when running multiple ' - 'tests including this test. It does not ' - 'necessarily mean this specific test timed out.') - # Ensure instrumentation tests not batched at env level retries. - for t in test: - # |dict| type infers it's an instrumentation test. - if isinstance(t, dict) and t['annotations']: - t['annotations'].pop('Batch', None) - - results.AddResults( - base_test_result.BaseTestResult( - self._GetUniqueTestName(t), - base_test_result.ResultType.TIMEOUT, - log=result_log) for t in test) - else: - results.AddResult( - base_test_result.BaseTestResult( - self._GetUniqueTestName(test), - base_test_result.ResultType.TIMEOUT)) - except device_errors.DeviceUnreachableError as e: - exception_recorder.register(e) - # If the device is no longer reachable then terminate this - # run_tests_on_device call. - raise - except base_error.BaseError as e: - exception_recorder.register(e) - # If we get a device error but believe the device is still - # reachable, attempt to continue using it. - if isinstance(tests, test_collection.TestCollection): - rerun = test - - consecutive_device_errors += 1 - if consecutive_device_errors >= 3: - # We believe the device is still reachable and may still be usable, - # but if it fails repeatedly, we shouldn't attempt to keep using - # it. - logging.error('Repeated failures on device %s. Abandoning.', - str(dev)) - raise - - logging.exception( - 'Attempting to continue using device %s despite failure (%d/3).', - str(dev), consecutive_device_errors) - - finally: - if isinstance(tests, test_collection.TestCollection): - if rerun: - tests.add(rerun) - tests.test_completed() - - logging.info('Finished running tests on this device.') - def stop_tests(_signum, _frame): logging.critical('Received SIGTERM. Stopping test execution.') exit_now.set() @@ -192,11 +192,13 @@ class LocalDeviceTestRun(test_run.TestRun): tc = test_collection.TestCollection( self._CreateShardsForDevices(grouped_tests)) self._env.parallel_devices.pMap( - run_tests_on_device, tc, try_results).pGet(None) + self._RunTestsOnDevice, + tc, try_results, exit_now).pGet(None) else: - self._env.parallel_devices.pMap(run_tests_on_device, + self._env.parallel_devices.pMap(self._RunTestsOnDevice, grouped_tests, - try_results).pGet(None) + try_results, + exit_now).pGet(None) except TestsTerminated: for unknown_result in try_results.GetUnknown(): try_results.AddResult( diff --git a/naiveproxy/src/build/android/pylib/local/emulator/avd.py b/naiveproxy/src/build/android/pylib/local/emulator/avd.py index 66178ae889..2c10b14467 100644 --- a/naiveproxy/src/build/android/pylib/local/emulator/avd.py +++ b/naiveproxy/src/build/android/pylib/local/emulator/avd.py @@ -632,9 +632,11 @@ class AvdConfig: instance.device.RunShellCommand(['svc', 'wifi', 'disable'], as_root=True, check_return=True) + # Certain system image like tablet does not have data service + # So don't check return status here. instance.device.RunShellCommand(['svc', 'data', 'disable'], as_root=True, - check_return=True) + check_return=False) if snapshot: logging.info('Wait additional 60 secs before saving snapshot for AVD') diff --git a/naiveproxy/src/build/android/test_runner.py b/naiveproxy/src/build/android/test_runner.py index a8c9d628a3..2422c042c8 100755 --- a/naiveproxy/src/build/android/test_runner.py +++ b/naiveproxy/src/build/android/test_runner.py @@ -428,13 +428,18 @@ def AddGTestOptions(parser): help="Path to executable's dist directory for native" " (non-apk) tests.") parser.add_argument( - '--extract-test-list-from-filter', + '--deploy-mock-openxr-runtime', action='store_true', - help='When a test filter is specified, and the list of ' - 'tests can be determined from it, skip querying the ' - 'device for the list of all tests. Speeds up local ' - 'development, but is not safe to use on bots (' - 'http://crbug.com/549214') + help=('Prepares the device by deploying a mock OpenXR runtime to use for ' + 'testing. Note that this *may* override a runtime specialization ' + 'already present on the device.')) + parser.add_argument('--extract-test-list-from-filter', + action='store_true', + help='When a test filter is specified, and the list of ' + 'tests can be determined from it, skip querying the ' + 'device for the list of all tests. Speeds up local ' + 'development, but is not safe to use on bots (' + 'http://crbug.com/549214') parser.add_argument( '--gs-test-artifacts-bucket', help=('If present, test artifacts will be uploaded to this Google ' @@ -560,10 +565,11 @@ def AddInstrumentationTestOptions(parser): type=os.path.realpath, help='Directory in which to place all generated ' 'Jacoco coverage files.') - parser.add_argument( - '--disable-dalvik-asserts', - dest='set_asserts', action='store_false', default=True, - help='Removes the dalvik.vm.enableassertions property') + parser.add_argument('--disable-dalvik-asserts', + dest='set_asserts', + action='store_false', + default=True, + help='Removes the dalvik.vm.enableassertions property') parser.add_argument( '--proguard-mapping-path', help='.mapping file to use to Deobfuscate java stack traces in test ' diff --git a/naiveproxy/src/build/check_gn_headers.py b/naiveproxy/src/build/check_gn_headers.py index 6bfb878a0a..60beb6dff6 100755 --- a/naiveproxy/src/build/check_gn_headers.py +++ b/naiveproxy/src/build/check_gn_headers.py @@ -23,20 +23,33 @@ SRC_DIR = os.path.abspath( os.path.join(os.path.abspath(os.path.dirname(__file__)), os.path.pardir)) DEPOT_TOOLS_DIR = os.path.join(SRC_DIR, 'third_party', 'depot_tools') +SISO_PATH = os.path.join(SRC_DIR, 'third_party', 'siso', 'cipd', 'siso') +NINJA_PATH = os.path.join(SRC_DIR, 'third_party', 'ninja', 'ninja') + + +def IsSisoUsed(out_dir): + return os.path.exists(os.path.join(out_dir, ".siso_deps")) + def GetHeadersFromNinja(out_dir, skip_obj, q): """Return all the header files from ninja_deps""" def NinjaSource(): - cmd = [ - os.path.join(SRC_DIR, 'third_party', 'ninja', 'ninja'), '-C', out_dir, - '-t', 'deps' - ] + if IsSisoUsed(out_dir): + cmd = [ + SISO_PATH, + 'query', + 'deps', + '-C', + out_dir, + ] + else: + cmd = [NINJA_PATH, '-C', out_dir, '-t', 'deps'] # A negative bufsize means to use the system default, which usually # means fully buffered. popen = subprocess.Popen(cmd, stdout=subprocess.PIPE, bufsize=-1) - for line in iter(popen.stdout.readline, ''): - yield line.rstrip() + for line in iter(popen.stdout.readline, b''): + yield line.rstrip().decode('utf-8') popen.stdout.close() return_code = popen.wait() @@ -136,10 +149,11 @@ def GetDepsPrefixes(q): try: gclient_exe = 'gclient.bat' if sys.platform == 'win32' else 'gclient' gclient_out = subprocess.check_output([ - os.path.join(DEPOT_TOOLS_DIR, gclient_exe), - 'recurse', '--no-progress', '-j1', - 'python', '-c', 'import os;print os.environ["GCLIENT_DEP_PATH"]'], - universal_newlines=True) + os.path.join(DEPOT_TOOLS_DIR, + gclient_exe), 'recurse', '--no-progress', '-j1', 'python3', + '-c', 'import os;print(os.environ["GCLIENT_DEP_PATH"])' + ], + universal_newlines=True) for i in gclient_out.split('\n'): if i.startswith('src/'): i = i[4:] @@ -150,17 +164,21 @@ def GetDepsPrefixes(q): def IsBuildClean(out_dir): - cmd = [os.path.join(DEPOT_TOOLS_DIR, 'ninja'), '-C', out_dir, '-n'] + if IsSisoUsed(out_dir): + cmd = [SISO_PATH, 'ninja', '-C', out_dir, '-n'] + else: + cmd = [NINJA_PATH, '-C', out_dir, '-n'] try: out = subprocess.check_output(cmd) - return 'no work to do.' in out + return b'no work to do.' in out except Exception as e: print(e) return False -def ParseWhiteList(whitelist): + +def ParseAllowlist(allowlist): out = set() - for line in whitelist.split('\n'): + for line in allowlist.split('\n'): line = re.sub(r'#.*', '', line).strip() if line: out.add(line) @@ -197,8 +215,9 @@ def main(): help='output directory of the build') parser.add_argument('--json', help='JSON output filename for missing headers') - parser.add_argument('--whitelist', help='file containing whitelist') - parser.add_argument('--skip-dirty-check', action='store_true', + parser.add_argument('--allowlist', help='file containing allowlist') + parser.add_argument('--skip-dirty-check', + action='store_true', help='skip checking whether the build is dirty') parser.add_argument('--verbose', action='store_true', help='print more diagnostic info') @@ -261,10 +280,10 @@ def main(): if any((('/gen/' in i) for i in nonexisting)): PrintError('OUT_DIR looks wrong. You should build all there.') - if args.whitelist: - whitelist = ParseWhiteList(open(args.whitelist).read()) - missing -= whitelist - nonexisting -= whitelist + if args.allowlist: + allowlist = ParseAllowlist(open(args.allowlist).read()) + missing -= allowlist + nonexisting -= allowlist missing = sorted(missing) nonexisting = sorted(nonexisting) diff --git a/naiveproxy/src/build/check_gn_headers_whitelist.txt b/naiveproxy/src/build/check_gn_headers_allowlist.txt similarity index 99% rename from naiveproxy/src/build/check_gn_headers_whitelist.txt rename to naiveproxy/src/build/check_gn_headers_allowlist.txt index 0fe56456a9..7538e722b1 100644 --- a/naiveproxy/src/build/check_gn_headers_whitelist.txt +++ b/naiveproxy/src/build/check_gn_headers_allowlist.txt @@ -1,4 +1,4 @@ -# Do not add files to this whitelist unless you are adding a new OS or +# Do not add files to this allowlist unless you are adding a new OS or # changing the GN arguments on bots. ash/accelerators/accelerator_table.h diff --git a/naiveproxy/src/build/check_gn_headers_unittest.py b/naiveproxy/src/build/check_gn_headers_unittest.py index 954d95bfc9..ab1a250eb4 100755 --- a/naiveproxy/src/build/check_gn_headers_unittest.py +++ b/naiveproxy/src/build/check_gn_headers_unittest.py @@ -51,7 +51,7 @@ gn_input = json.loads(r''' ''') -whitelist = r''' +allowlist = r''' white-front.c a/b/c/white-end.c # comment dir/white-both.c #more comment @@ -85,8 +85,8 @@ class CheckGnHeadersTest(unittest.TestCase): ]) self.assertEqual(headers, expected) - def testWhitelist(self): - output = check_gn_headers.ParseWhiteList(whitelist) + def testAllowlist(self): + output = check_gn_headers.ParseAllowlist(allowlist) expected = set([ 'white-front.c', 'a/b/c/white-end.c', diff --git a/naiveproxy/src/build/config/BUILDCONFIG.gn b/naiveproxy/src/build/config/BUILDCONFIG.gn index 459d56f4da..5f4b2204b8 100644 --- a/naiveproxy/src/build/config/BUILDCONFIG.gn +++ b/naiveproxy/src/build/config/BUILDCONFIG.gn @@ -362,7 +362,6 @@ default_compiler_configs = [ "//build/config/compiler:no_rtti", "//build/config/compiler:no_unresolved_symbols", "//build/config/compiler:runtime_library", - "//build/config/compiler:rust_integer_overflow_checks", "//build/config/compiler:thin_archive", "//build/config/compiler:thinlto_optimize_max", "//build/config/compiler/pgo:default_pgo_flags", diff --git a/naiveproxy/src/build/config/android/BUILD.gn b/naiveproxy/src/build/config/android/BUILD.gn index 9162edaf82..8c77eb2c9b 100644 --- a/naiveproxy/src/build/config/android/BUILD.gn +++ b/naiveproxy/src/build/config/android/BUILD.gn @@ -57,7 +57,7 @@ config("compiler") { if (current_cpu == "arm64") { if (arm_control_flow_integrity == "standard") { cflags += [ "-mbranch-protection=standard" ] - rustflags = [ "-Zbranch-protection=bti" ] + rustflags = [ "-Zbranch-protection=pac-ret,bti" ] } else if (arm_control_flow_integrity == "pac") { cflags += [ "-mbranch-protection=pac-ret" ] rustflags = [ "-Zbranch-protection=pac-ret" ] diff --git a/naiveproxy/src/build/config/android/config.gni b/naiveproxy/src/build/config/android/config.gni index db376254dc..5480b31d91 100644 --- a/naiveproxy/src/build/config/android/config.gni +++ b/naiveproxy/src/build/config/android/config.gni @@ -309,7 +309,7 @@ if (is_android) { # value of the arguments set above. declare_args() { # Default value for targetSdkVersion for APK and bundle targets. - default_target_sdk_version = "34" + default_target_sdk_version = "35" # Whether java assertions and Preconditions checks are enabled. enable_java_asserts = dcheck_always_on || !is_official_build diff --git a/naiveproxy/src/build/config/android/internal_rules.gni b/naiveproxy/src/build/config/android/internal_rules.gni index 6eb4b4b48e..04dc65115f 100644 --- a/naiveproxy/src/build/config/android/internal_rules.gni +++ b/naiveproxy/src/build/config/android/internal_rules.gni @@ -559,6 +559,12 @@ template("write_build_config") { invoker.main_class, ] } + if (defined(invoker.direct_deps_only) && invoker.direct_deps_only) { + args += [ "--direct-deps-only" ] + } + if (defined(invoker.use_interface_jars) && invoker.use_interface_jars) { + args += [ "--use-interface-jars" ] + } if (defined(invoker.base_module_target)) { _dep_label = invoker.base_module_target _dep_gen_dir = get_label_info(_dep_label, "target_gen_dir") @@ -1228,6 +1234,34 @@ if (enable_java_templates) { } } + template("trace_references") { + action_with_pydeps(target_name) { + forward_variables_from(invoker, + TESTONLY_AND_VISIBILITY + [ "public_deps" ]) + script = "//build/android/gyp/tracereferences.py" + inputs = java_paths_for_inputs + [ + _r8_path, + invoker.tracerefs_json, + ] + depfile = "$target_gen_dir/$target_name.d" + outputs = [ "$target_out_dir/$target_name.tracereferences.stamp" ] + args = [ + "--depfile", + rebase_path(depfile, root_build_dir), + "--tracerefs-json", + rebase_path(invoker.tracerefs_json, root_build_dir), + "--stamp", + rebase_path(outputs[0], root_build_dir), + ] + if (android_static_analysis == "build_server") { + args += [ "--use-build-server" ] + } + if (treat_warnings_as_errors) { + args += [ "--warnings-as-errors" ] + } + } + } + template("proguard") { forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) _script = "//build/android/gyp/proguard.py" @@ -1349,8 +1383,9 @@ if (enable_java_templates) { } _outputs += [ _mapping_path ] - if (defined(invoker.enable_proguard_checks) && - !invoker.enable_proguard_checks) { + _enable_checks = !defined(invoker.enable_proguard_checks) || + invoker.enable_proguard_checks + if (!_enable_checks) { _args += [ "--disable-checks" ] } @@ -1422,7 +1457,14 @@ if (enable_java_templates) { } _deps += [ ":$_expectations_target" ] } - action_with_pydeps(target_name) { + + if (_enable_checks) { + _tracerefs_json = "$target_gen_dir/$target_name.tracerefs.json" + _proguard_target_name = "${target_name}__r8" + } else { + _proguard_target_name = target_name + } + action_with_pydeps(_proguard_target_name) { forward_variables_from(invoker, [ "data", @@ -1438,6 +1480,13 @@ if (enable_java_templates) { "--depfile", rebase_path(depfile, root_build_dir), ] + if (_enable_checks) { + outputs += [ _tracerefs_json ] + args += [ + "--tracerefs-json", + rebase_path(_tracerefs_json, root_build_dir), + ] + } # http://crbug.com/725224. Fix for bots running out of memory. if (defined(java_cmd_pool_size)) { @@ -1446,6 +1495,13 @@ if (enable_java_templates) { pool = "//build/toolchain:link_pool($default_toolchain)" } } + + if (_enable_checks) { + trace_references(target_name) { + tracerefs_json = _tracerefs_json + public_deps = [ ":$_proguard_target_name" ] + } + } } # Generates a script in the build bin directory to run a java binary. @@ -2261,11 +2317,6 @@ if (enable_java_templates) { "--webp-cache-dir=obj/android-webp-cache", ] - # TODO(b/355432192): Remove this flag once not needed by Compose. - if (defined(enable_hilt_internal) && enable_hilt_internal) { - _args += [ "--xml-namespaces" ] - } - _inputs += [ invoker.android_manifest ] _outputs = [ _final_srcjar_path ] _args += [ @@ -3032,19 +3083,21 @@ if (enable_java_templates) { _srcjar_deps = invoker.srcjar_deps } - _java_srcjars = [] - foreach(dep, _srcjar_deps) { - _dep_gen_dir = get_label_info(dep, "target_gen_dir") - _dep_name = get_label_info(dep, "name") - _java_srcjars += [ "$_dep_gen_dir/$_dep_name.srcjar" ] - } - if (defined(invoker.srcjars)) { - _java_srcjars += invoker.srcjars - } + if (!invoker.enable_errorprone) { + _java_srcjars = [] + foreach(dep, _srcjar_deps) { + _dep_gen_dir = get_label_info(dep, "target_gen_dir") + _dep_name = get_label_info(dep, "name") + _java_srcjars += [ "$_dep_gen_dir/$_dep_name.srcjar" ] + } + if (defined(invoker.srcjars)) { + _java_srcjars += invoker.srcjars + } - # generated_jar_path is an output when use_turbine and an input otherwise. - if (!invoker.use_turbine && defined(invoker.generated_jar_path)) { - _java_srcjars += [ invoker.generated_jar_path ] + # generated_jar_path is an output when use_turbine and an input otherwise. + if (!invoker.use_turbine && defined(invoker.generated_jar_path)) { + _java_srcjars += [ invoker.generated_jar_path ] + } } _javac_args = [] @@ -3059,6 +3112,9 @@ if (enable_java_templates) { "//third_party/jdk/current/bin/java", android_sdk_jar, ] + } else if (invoker.enable_errorprone) { + script = "//build/android/gyp/errorprone.py" + inputs = javac_paths_for_inputs } else { script = "//build/android/gyp/compile_java.py" inputs = javac_paths_for_inputs @@ -3076,11 +3132,33 @@ if (enable_java_templates) { deps += invoker.deps } - outputs = [ invoker.output_jar_path ] - if (!invoker.enable_errorprone && !invoker.use_turbine) { - outputs += [ invoker.output_jar_path + ".info" ] + args = [] + if (invoker.enable_errorprone) { + _stamp_file = "$target_out_dir/$target_name.stamp" + outputs = [ _stamp_file ] + _rebased_stamp_file = rebase_path(_stamp_file, root_build_dir) + args += [ "--stamp=$_rebased_stamp_file" ] + } else { + outputs = [ invoker.output_jar_path ] + if (!invoker.use_turbine) { + outputs += [ invoker.output_jar_path + ".info" ] + } + _rebased_output_jar_path = + rebase_path(invoker.output_jar_path, root_build_dir) + + # Error Prone does not run on srcjar, and they are not needed as inputs thanks to Turbine. + _rebased_java_srcjars = rebase_path(_java_srcjars, root_build_dir) + _rebased_generated_dir = rebase_path( + "$target_gen_dir/${invoker.main_target_name}/generated_java", + root_build_dir) + args += [ + "--jar-path=$_rebased_output_jar_path", + "--java-srcjars=$_rebased_java_srcjars", + "--generated-dir=$_rebased_generated_dir", + ] + inputs += _java_srcjars } - inputs += invoker.source_files + _java_srcjars + [ + inputs += invoker.source_files + [ "$android_sdk/optional/android.test.base.jar", "$android_sdk/optional/org.apache.http.legacy.jar", _build_config, @@ -3091,18 +3169,9 @@ if (enable_java_templates) { } _rebased_build_config = rebase_path(_build_config, root_build_dir) - _rebased_output_jar_path = - rebase_path(invoker.output_jar_path, root_build_dir) - _rebased_java_srcjars = rebase_path(_java_srcjars, root_build_dir) _rebased_depfile = rebase_path(depfile, root_build_dir) - _rebased_generated_dir = rebase_path( - "$target_gen_dir/${invoker.main_target_name}/generated_java", - root_build_dir) - args = [ + args += [ "--depfile=$_rebased_depfile", - "--generated-dir=$_rebased_generated_dir", - "--jar-path=$_rebased_output_jar_path", - "--java-srcjars=$_rebased_java_srcjars", "--target-name", get_label_info(":${target_name}", "label_no_toolchain"), ] @@ -3165,7 +3234,7 @@ if (enable_java_templates) { args += [ "--enable-kythe-annotations" ] } if (_chromium_code) { - args += [ "--chromium-code=1" ] + args += [ "--chromium-code" ] if (treat_warnings_as_errors) { args += [ "--warnings-as-errors" ] } @@ -3183,10 +3252,7 @@ if (enable_java_templates) { _rebased_errorprone_buildconfig = rebase_path("$_dep_gen_dir/$_dep_name.build_config.json", root_build_dir) - args += [ - "--processorpath=@FileArg($_rebased_errorprone_buildconfig:deps_info:host_classpath)", - "--enable-errorprone", - ] + args += [ "--processorpath=@FileArg($_rebased_errorprone_buildconfig:deps_info:host_classpath)" ] inputs += [ # errorprone requires the plugin directory to detect src dir. # https://source.chromium.org/chromium/chromium/src/+/main:tools/android/errorprone_plugin/src/org/chromium/tools/errorprone/plugin/UseNetworkAnnotations.java;l=84;drc=dfd88085261b662a5c0a1abea1a3b120b08e8e48 @@ -3201,12 +3267,12 @@ if (enable_java_templates) { "--enable-nullaway", ] } - } - if (defined(invoker.skip_build_server) && invoker.skip_build_server) { - # Nocompile tests need lint to fail through ninja. - args += [ "--skip-build-server" ] - } else if (android_static_analysis == "build_server") { - args += [ "--use-build-server" ] + if (defined(invoker.skip_build_server) && invoker.skip_build_server) { + # Nocompile tests need lint to fail through ninja. + args += [ "--skip-build-server" ] + } else if (android_static_analysis == "build_server") { + args += [ "--use-build-server" ] + } } foreach(e, _processor_args) { @@ -3476,9 +3542,6 @@ if (enable_java_templates) { # generated wrapper script. # template("java_library_impl") { - # TODO(crbug.com/40114668): Remove. - not_needed(invoker, [ "no_build_hooks" ]) - forward_variables_from(invoker, [ "testonly" ]) _target_dir = get_label_info(":any_name_here", "dir") @@ -3755,6 +3818,7 @@ if (enable_java_templates) { "aar_path", "annotation_processor_deps", "base_allowlist_rtxt_path", + "direct_deps_only", "gradle_treat_as_prebuilt", "input_jars_paths", "preferred_dep", @@ -3770,6 +3834,7 @@ if (enable_java_templates) { "r_text_path", "suffix_apk_assets_used_by", "type", + "use_interface_jars", "version_code", "version_name", ]) @@ -3905,6 +3970,8 @@ if (enable_java_templates) { filter_exclude(_java_files, [ "$root_gen_dir*" ]) _enable_errorprone = _enable_errorprone && _errorprone_source_files != [] + } else { + not_needed(invoker, [ "errorprone_args" ]) } if (defined(invoker.resources_package) && _type == "java_library") { @@ -3932,15 +3999,17 @@ if (enable_java_templates) { } if (_kt_files != []) { + _abs_kt_files = get_path_info(_kt_files, "abspath") _kt_allowlist = [ - "android/java/src/org/chromium/chrome/browser/tabmodel/AsyncTabParamsManagerImpl.kt", - "java/androidx/core/os/BuildCompat.kt", - "webengine_shell_apk/src/org/chromium/webengine/shell/*.kt", + "*/AsyncTabParamsManagerImpl.kt", + "//third_party/androidx/*", + "*/webengine_shell_apk/*", + "local_modifications/pdf/java/androidx/pdf/viewer/fragment/PdfViewerFragment.kt", ] - _found_kt = filter_exclude(_kt_files, _kt_allowlist) + _found_kt = filter_exclude(_abs_kt_files, _kt_allowlist) assert( _found_kt == [], - "Only a files in the allowlist can be included for now. Feel " + "free to remove this assert when experimenting locally. Found: $_found_kt") + "Only a files in the allowlist can be included for now. Feel free to remove this assert when experimenting locally. Found: $_found_kt") _compile_kt_target_name = "${_main_target_name}__compile_kt" _kotlinc_jar_path = "$target_out_dir/$_output_name.kotlinc.jar" _kotlin_interface_jar_path = @@ -3972,7 +4041,6 @@ if (enable_java_templates) { if (defined(invoker.deps)) { deps += invoker.deps } - output_jar_path = invoker.output_jar_path if (defined(invoker.kotlin_jar_path)) { deps += [ ":$_compile_kt_target_name" ] kotlin_jar_path = invoker.kotlin_jar_path @@ -3980,14 +4048,15 @@ if (enable_java_templates) { enable_errorprone = _enable_errorprone use_turbine = defined(invoker.use_turbine) && invoker.use_turbine - main_target_name = _main_target_name build_config = _build_config if (_enable_errorprone) { source_files = _errorprone_source_files } else { + main_target_name = _main_target_name source_files = _source_files srcjar_deps = _srcjar_deps + srcjars = _srcjars } if (source_files != []) { @@ -4003,8 +4072,6 @@ if (enable_java_templates) { "jar_excluded_patterns", "javac_args", "processor_args_javac", - "skip_build_server", - "srcjars", ] if (!_skip_header_jar) { @@ -4043,6 +4110,7 @@ if (enable_java_templates) { _compile_java_errorprone_target = "${_main_target_name}__errorprone" compile_java_helper(_compile_java_errorprone_target) { forward_variables_from(invoker, _compile_java_forward_variables) + forward_variables_from(invoker, [ "skip_build_server" ]) enable_errorprone = true if (defined(invoker.errorprone_args)) { if (!defined(javac_args)) { @@ -4056,9 +4124,7 @@ if (enable_java_templates) { if (!_skip_header_jar) { deps = [ ":$_header_target_name" ] header_jar_path = _final_ijar_path - generated_jar_path = _generated_jar_path } - output_jar_path = "$target_out_dir/$target_name.errorprone.stamp" } _java_validate_deps += [ ":$_compile_java_errorprone_target" ] } diff --git a/naiveproxy/src/build/config/android/rules.gni b/naiveproxy/src/build/config/android/rules.gni index 1a313ac60b..be82605fa8 100644 --- a/naiveproxy/src/build/config/android/rules.gni +++ b/naiveproxy/src/build/config/android/rules.gni @@ -1441,17 +1441,12 @@ if (!is_robolectric && enable_java_templates) { # output = "$root_build_dir/MyLibrary.jar" # } template("dist_jar") { - # TODO(crbug.com/40114668): Remove. - not_needed(invoker, [ "no_build_hooks" ]) forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) + + # TODO: Remove uses. + not_needed(invoker, [ "use_unprocessed_jars" ]) _use_interface_jars = defined(invoker.use_interface_jars) && invoker.use_interface_jars - _use_unprocessed_jars = - defined(invoker.use_unprocessed_jars) && invoker.use_unprocessed_jars - _direct_deps_only = - defined(invoker.direct_deps_only) && invoker.direct_deps_only - assert(!(_use_unprocessed_jars && _use_interface_jars), - "Cannot set both use_interface_jars and use_unprocessed_jars") _supports_android = !defined(invoker.supports_android) || invoker.supports_android _requires_android = @@ -1500,8 +1495,9 @@ if (!is_robolectric && enable_java_templates) { java_library_impl(target_name) { forward_variables_from(invoker, [ - "jar_excluded_patterns", "deps", + "direct_deps_only", + "jar_excluded_patterns", ]) type = "dist_jar" if (!defined(deps)) { @@ -1513,14 +1509,17 @@ if (!is_robolectric && enable_java_templates) { requires_android = _requires_android jar_path = invoker.output enable_bytecode_checks = false + use_interface_jars = _use_interface_jars } } else { write_build_config(_build_config_target_name) { type = "dist_jar" + forward_variables_from(invoker, [ "direct_deps_only" ]) supports_android = _supports_android requires_android = _requires_android possible_config_deps = invoker.deps build_config = _build_config + use_interface_jars = _use_interface_jars } } @@ -1556,30 +1555,9 @@ if (!is_robolectric && enable_java_templates) { "--output", rebase_path(_zip_jar_path, root_build_dir), "--no-compress", + "--input-zips=@FileArg($_rebased_build_config:dist_jar:jars)", ] - if (_direct_deps_only) { - if (_use_interface_jars) { - args += [ "--input-zips=@FileArg($_rebased_build_config:javac:interface_classpath)" ] - } else if (_use_unprocessed_jars) { - args += [ - "--input-zips=@FileArg($_rebased_build_config:javac:classpath)", - ] - } else { - assert( - false, - "direct_deps_only does not work without use_interface_jars or use_unprocessed_jars") - } - } else { - if (_use_interface_jars) { - args += [ "--input-zips=@FileArg($_rebased_build_config:dist_jar:all_interface_jars)" ] - } else if (_use_unprocessed_jars) { - args += [ "--input-zips=@FileArg($_rebased_build_config:deps_info:javac_full_classpath)" ] - } else { - args += [ "--input-zips=@FileArg($_rebased_build_config:deps_info:device_classpath)" ] - } - } - _excludes = [] if (defined(invoker.jar_excluded_patterns)) { _excludes += invoker.jar_excluded_patterns @@ -3289,8 +3267,6 @@ if (!is_robolectric && enable_java_templates) { # ] # } template("android_apk") { - # TODO(crbug.com/40114668): Remove. - not_needed(invoker, [ "no_build_hooks" ]) android_apk_or_module(target_name) { forward_variables_from( invoker, @@ -3318,6 +3294,7 @@ if (!is_robolectric && enable_java_templates) { "deps", "enable_lint", "enable_proguard_checks", + "errorprone_args", "disable_strict_mode_context", "enforce_resource_overlays_in_tests", "expected_android_manifest", @@ -4286,7 +4263,7 @@ if (!is_robolectric && enable_java_templates) { assert( !_scanned_files.has_native_libraries || (_ignore_native_libraries || _extract_native_libraries), - "android_aar_prebuilt() contains .so files." + + "android_aar_prebuilt(" + target_name + ") contains .so files." + " Please set ignore_native_libraries or extract_native_libraries.") assert( !(_ignore_native_libraries && _extract_native_libraries), diff --git a/naiveproxy/src/build/config/android/system_image.gni b/naiveproxy/src/build/config/android/system_image.gni index 990fc3b0e9..e62d7e885e 100644 --- a/naiveproxy/src/build/config/android/system_image.gni +++ b/naiveproxy/src/build/config/android/system_image.gni @@ -10,8 +10,8 @@ import("//build/config/android/rules.gni") # package_name: Package name to use for the stub. # version_code: Version code for the stub. # version_name: Version name for the stub. -# package_info_from_target: Use the package name and version_code from this -# apk/bundle target. +# package_info_from_target: Use the package name, version_code, and s +# from this apk/bundle target. # static_library_name: For static library apks, name for the . # static_library_version: For static library apks, version for the # tag (for TrichromeLibrary, we set this to be the same @@ -29,7 +29,15 @@ template("system_image_stub_apk") { _manifest_target_name = "${target_name}__manifest" _manifest_path = "$target_gen_dir/$_manifest_target_name.xml" - action("$_manifest_target_name") { + + if (defined(invoker.package_info_from_target)) { + _apk_or_bundle_target = invoker.package_info_from_target + _build_config = + get_label_info(_apk_or_bundle_target, "target_gen_dir") + "/" + + get_label_info(_apk_or_bundle_target, "name") + ".build_config.json" + _rebased_build_config = rebase_path(_build_config, root_build_dir) + } + action_with_pydeps("$_manifest_target_name") { outputs = [ _manifest_path ] script = "//build/android/gyp/create_stub_manifest.py" args = [ @@ -52,6 +60,11 @@ template("system_image_stub_apk") { args += [ "--static-library-version=1" ] } } + if (defined(_apk_or_bundle_target)) { + deps = [ "$_apk_or_bundle_target$build_config_target_suffix" ] + inputs = [ _build_config ] + args += [ "--use-permissions-from=@FileArg($_rebased_build_config:deps_info:lint_android_manifest)" ] + } } _target_sdk_version = default_target_sdk_version @@ -149,12 +162,8 @@ template("system_image_stub_apk") { "$invoker.static_library_version must equal $_version_code.") } } else { - _target = invoker.package_info_from_target - deps += [ "${_target}$build_config_target_suffix" ] - _build_config = get_label_info(_target, "target_gen_dir") + "/" + - get_label_info(_target, "name") + ".build_config.json" + deps += [ "${_apk_or_bundle_target}$build_config_target_suffix" ] inputs += [ _build_config ] - _rebased_build_config = rebase_path(_build_config, root_build_dir) _package_name = "@FileArg($_rebased_build_config:deps_info:package_name)" _version_code = "@FileArg($_rebased_build_config:deps_info:version_code)" _version_name = "@FileArg($_rebased_build_config:deps_info:version_name)" diff --git a/naiveproxy/src/build/config/apple/codesign.py b/naiveproxy/src/build/config/apple/codesign.py index be6afb5afb..d6cf9b7d0d 100644 --- a/naiveproxy/src/build/config/apple/codesign.py +++ b/naiveproxy/src/build/config/apple/codesign.py @@ -17,6 +17,17 @@ import stat import sys import tempfile +# Keys that should not be copied from mobileprovision +BANNED_KEYS = [ + "com.apple.developer.cs.allow-jit", + "com.apple.developer.memory.transfer-send", + "com.apple.developer.web-browser", + "com.apple.developer.web-browser-engine.host", + "com.apple.developer.web-browser-engine.networking", + "com.apple.developer.web-browser-engine.rendering", + "com.apple.developer.web-browser-engine.webcontent", +] + if sys.version_info.major < 3: basestring_compat = basestring else: @@ -266,7 +277,7 @@ class Entitlements(object): def LoadDefaults(self, defaults): for key, value in defaults.items(): - if key not in self._data: + if key not in self._data and key not in BANNED_KEYS: self._data[key] = value def WriteTo(self, target_path): @@ -690,7 +701,7 @@ class FindProvisioningProfileAction(Action): provisioning_profile_info = {} provisioning_profile = FindProvisioningProfile(args.mobileprovision_files, args.bundle_id, False) - for key in ('team_identifier', 'name'): + for key in ('team_identifier', 'name', 'path'): if provisioning_profile: provisioning_profile_info[key] = getattr(provisioning_profile, key) else: diff --git a/naiveproxy/src/build/config/apple/mobile_config.gni b/naiveproxy/src/build/config/apple/mobile_config.gni index d296b7ec0d..7f556a30d0 100644 --- a/naiveproxy/src/build/config/apple/mobile_config.gni +++ b/naiveproxy/src/build/config/apple/mobile_config.gni @@ -29,6 +29,14 @@ declare_args() { # TODO(crbug.com/378918882): Prefix with apple_mobile_ instead of ios_. ios_app_bundle_id_prefix = "org.chromium.ost" + # Suffix for CFBundleIdentifier property of iOS Chrome signed bundles + # (main bundle and extensions). Code signing will fail if no mobile + # provisioning for the selected code signing identify support that suffix. + # For extension, the suffix will be added before the extension identifier. + # The suffix is not added to test applications. + # No dot is added before the suffix, so add one if needed. + apple_mobile_app_bundle_id_suffix = ".dev" + # Paths to the mobileprovision files for the chosen code signing # identity description and app bundle id prefix. # TODO(crbug.com/378918882): Prefix with apple_mobile_ instead of ios_. diff --git a/naiveproxy/src/build/config/chromeos/args.gni b/naiveproxy/src/build/config/chromeos/args.gni index aa14f10319..44da3c45c4 100644 --- a/naiveproxy/src/build/config/chromeos/args.gni +++ b/naiveproxy/src/build/config/chromeos/args.gni @@ -40,5 +40,5 @@ declare_args() { is_reven = false # Build Mojo Proxy binary, to be used as a IPCZ <=> Mojo Core translation layer. - build_mojo_proxy = false + build_mojo_proxy = true } diff --git a/naiveproxy/src/build/config/compiler/BUILD.gn b/naiveproxy/src/build/config/compiler/BUILD.gn index 6f506d0fd9..ca7fe7c88b 100644 --- a/naiveproxy/src/build/config/compiler/BUILD.gn +++ b/naiveproxy/src/build/config/compiler/BUILD.gn @@ -437,7 +437,7 @@ config("compiler") { # Explicitly pass --build-id to ld. Compilers used to always pass this # implicitly but don't any more (in particular clang when built without # ENABLE_LINKER_BUILD_ID=ON). - if (is_official_build) { + if (is_official_build || is_chrome_branded) { # The sha1 build id has lower risk of collision but is more expensive to # compute, so only use it in the official build to avoid slowing down # links. @@ -1127,13 +1127,7 @@ config("libcxx_hardening") { # TODO(crbug.com/40511454): Move this back to the `runtime_library` config # when NaCl is removed. if (use_safe_libcxx) { - # TODO(crbug.com/40275904): Switch saigo to hardened mode once it's rolled - # in. - if (is_nacl_saigo) { - defines = [ "_LIBCPP_ENABLE_ASSERTIONS=1" ] - } else { - defines = [ "_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_EXTENSIVE" ] - } + defines = [ "_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_EXTENSIVE" ] } else { defines = [ "_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_NONE" ] } @@ -2020,9 +2014,6 @@ config("default_warnings") { # TODO(crbug.com/344680447): Fix and re-enable. cflags_cc += [ "-Wno-missing-template-arg-list-after-template-kw" ] - # TODO(crbug.com/356172342): Fix and re-enable. - cflags_cc += [ "-Wno-dangling-assignment-gsl" ] - # TODO(crbug.com/376641662): Fix and re-enable. cflags += [ "-Wno-nontrivial-memcall" ] } @@ -2099,25 +2090,6 @@ config("prevent_unsafe_narrowing") { } } -config("rust_integer_overflow_checks") { - rustflags = [ - # Overflow checks are optional in Rust, but even if switched off they do - # not cause undefined behavior (the overflowing behavior is defined). - # Because containers are bounds-checked in safe Rust, they also can't - # provoke buffer overflows. As such these checks may be less important in - # Rust than C++ and by default the Rust compiler checks for unexpected - # integer overflows only in debug mode (where such overflows panic) and - # skips the checks in release mode (where the overflows wrap around). - # - # But in (simplistic) testing the checks have negligible performance - # overhead, and this helps to provide consistent behavior between different - # configurations, so in Chromium we diverge from the default Rust compiler - # behavior and keep the integer overflow checks even in release mode. We - # may revisit if we discover a reason to turn them off. - "-Coverflow-checks=on", - ] -} - # chromium_code --------------------------------------------------------------- # # Toggles between higher and lower warnings for code that is (or isn't) diff --git a/naiveproxy/src/build/config/features.gni b/naiveproxy/src/build/config/features.gni index a372d7f7d4..a142b455b4 100644 --- a/naiveproxy/src/build/config/features.gni +++ b/naiveproxy/src/build/config/features.gni @@ -39,10 +39,6 @@ declare_args() { use_gio = is_linux && !is_castos use_blink = !is_ios - - # Enables inclusion of glic in the build. Defined here for visibility from - # //tools/grit/grit_args.gni - enable_glic = is_mac || is_win || is_linux } # # ============================================= diff --git a/naiveproxy/src/build/config/fuchsia/BUILD.gn b/naiveproxy/src/build/config/fuchsia/BUILD.gn index 858b3f01a4..b6ef61df75 100644 --- a/naiveproxy/src/build/config/fuchsia/BUILD.gn +++ b/naiveproxy/src/build/config/fuchsia/BUILD.gn @@ -42,11 +42,22 @@ group("deployment_resources") { } } - if (test_isolate_uses_emulator && test_host_cpu == "arm64") { - data += [ - "//third_party/qemu-${host_os}-${test_host_cpu}/", - "//third_party/edk2/", - ] + if (test_isolate_uses_emulator) { + # This assumes we are testing on QEMU with (U)EFI emulation only + # if host_cpu == target_cpu, and also that these tests are executed + # on x64 and arm64 only. + if (test_host_cpu == "arm64") { + data += [ + "//third_party/fuchsia-sdk/sdk/tools/qemu_uefi_internal/arm64", + "//third_party/fuchsia-sdk/sdk/tools/qemu_uefi_internal/arm64-meta.json", + "//third_party/qemu-${host_os}-${test_host_cpu}/", + ] + } else { + data += [ + "//third_party/fuchsia-sdk/sdk/tools/qemu_uefi_internal/x64", + "//third_party/fuchsia-sdk/sdk/tools/qemu_uefi_internal/x64-meta.json", + ] + } } } diff --git a/naiveproxy/src/build/config/fuchsia/test/minimum.shard.test-cml b/naiveproxy/src/build/config/fuchsia/test/minimum.shard.test-cml index 6f0fed9f53..d446ccbf8c 100644 --- a/naiveproxy/src/build/config/fuchsia/test/minimum.shard.test-cml +++ b/naiveproxy/src/build/config/fuchsia/test/minimum.shard.test-cml @@ -5,15 +5,17 @@ include: [ "syslog/client.shard.cml", ], - // Add capability providers. + // The following components must be subpackaged by all Chromium tests that + // aren't system tests, to provide implementations of always-required + // capabilities (see the `use`s and `offer`s). children: [ { name: "build-info-service", - url: "fuchsia-pkg://fuchsia.com/fake-build-info#meta/fake_build_info.cm", + url: "fake-build-info#meta/fake_build_info.cm", }, { name: "intl_property_manager", - url: "fuchsia-pkg://fuchsia.com/intl_property_manager#meta/intl_property_manager.cm", + url: "intl_property_manager#meta/intl_property_manager.cm", }, ], offer: [ diff --git a/naiveproxy/src/build/config/sanitizers/BUILD.gn b/naiveproxy/src/build/config/sanitizers/BUILD.gn index 350e967d1b..224d887da9 100644 --- a/naiveproxy/src/build/config/sanitizers/BUILD.gn +++ b/naiveproxy/src/build/config/sanitizers/BUILD.gn @@ -465,7 +465,15 @@ config("coverage_flags") { if (use_centipede) { # Centipede intercepts calls such as memcmp and memcpy in order to improve # its testcase generation. - cflags += [ "-fno-builtin" ] + # + # We explicitly list the intercepted calls instead of opting out of all + # builtins to work around a miscompile (crbug.com/380508212). + cflags += [ + "-fno-builtin-memcmp", + "-fno-builtin-pthread_create", + "-fno-builtin-strcmp", + "-fno-builtin-strncmp", + ] } } diff --git a/naiveproxy/src/build/config/siso/android.star b/naiveproxy/src/build/config/siso/android.star index 6951d3663e..2902a1e806 100644 --- a/naiveproxy/src/build/config/siso/android.star +++ b/naiveproxy/src/build/config/siso/android.star @@ -41,6 +41,15 @@ def __filegroups(ctx): def __step_config(ctx, step_config): remote_run = True # Turn this to False when you do file access trace. + + # Run static analysis steps locally when build server is enabled. + # https://chromium.googlesource.com/chromium/src/+/main/docs/android_build_instructions.md#asynchronous-static-analysis + remote_run_static_analysis = True + if "args.gn" in ctx.metadata: + gn_args = gn.args(ctx) + if gn_args.get("android_static_analysis") == '"build_server"': + remote_run_static_analysis = False + step_config["rules"].extend([ # See also https://chromium.googlesource.com/chromium/src/build/+/HEAD/android/docs/java_toolchain.md { @@ -109,6 +118,25 @@ def __step_config(ctx, step_config): "canonicalize_dir": True, "timeout": "2m", }, + { + "name": "android/errorprone", + "command_prefix": "python3 ../../build/android/gyp/errorprone.py", + "handler": "android_compile_java", + "exclude_input_patterns": [ + "*.a", + "*.cc", + "*.h", + "*.inc", + "*.info", + "*.o", + "*.pak", + "*.sql", + ], + "remote": remote_run_static_analysis, + "platform_ref": "large", + "canonicalize_dir": True, + "timeout": "2m", + }, { "name": "android/compile_kt", "command_prefix": "python3 ../../build/android/gyp/compile_kt.py", diff --git a/naiveproxy/src/build/config/siso/clang_all.star b/naiveproxy/src/build/config/siso/clang_all.star index 90034bd15c..82005cf172 100644 --- a/naiveproxy/src/build/config/siso/clang_all.star +++ b/naiveproxy/src/build/config/siso/clang_all.star @@ -35,8 +35,7 @@ def __filegroups(ctx): "*.h", "bin/clang", "bin/clang++", - "bin/clang-cl", - "bin/clang-cl.exe", + "bin/clang-*", # clang-cl, clang- "*_ignorelist.txt", # https://crbug.com/335997052 "clang_rt.profile*.lib", diff --git a/naiveproxy/src/build/config/siso/clang_exception.star b/naiveproxy/src/build/config/siso/clang_exception.star index 87b7b05411..c2e8d6e326 100644 --- a/naiveproxy/src/build/config/siso/clang_exception.star +++ b/naiveproxy/src/build/config/siso/clang_exception.star @@ -23,7 +23,18 @@ def __step_config(ctx, step_config): "./obj/chrome/test/fuzzing/webidl_fuzzing/webidl_fuzzer_grammar_proto_gen/webidl_fuzzer_grammar.pb.o", "./obj/chrome/test/fuzzing/webidl_fuzzing/webidlfuzzer/webidlfuzzer.o", "./obj/chrome/test/fuzzing/webidl_fuzzing/webidlfuzzer_proto_gen/webidlfuzzer.pb.o", - "./obj/chrome/test/fuzzing/webidl_fuzzing/webidlfuzzer_proto_gen/webidlfuzzer_sub.pb.o", + "./obj/chrome/test/fuzzing/webidl_fuzzing/webidlfuzzer_proto_gen/webidlfuzzer_sub0.pb.o", + "./obj/chrome/test/fuzzing/webidl_fuzzing/webidlfuzzer_proto_gen/webidlfuzzer_sub1.pb.o", + "./obj/chrome/test/fuzzing/webidl_fuzzing/webidlfuzzer_proto_gen/webidlfuzzer_sub2.pb.o", + "./obj/chrome/test/fuzzing/webidl_fuzzing/webidlfuzzer_proto_gen/webidlfuzzer_sub3.pb.o", + "./obj/chrome/test/fuzzing/webidl_fuzzing/webidlfuzzer_proto_gen/webidlfuzzer_sub4.pb.o", + "./obj/chrome/test/fuzzing/webidl_fuzzing/webidlfuzzer_proto_gen/webidlfuzzer_sub5.pb.o", + "./obj/chrome/test/fuzzing/webidl_fuzzing/webidlfuzzer_proto_gen/webidlfuzzer_sub6.pb.o", + "./obj/chrome/test/fuzzing/webidl_fuzzing/webidlfuzzer_proto_gen/webidlfuzzer_sub7.pb.o", + "./obj/chrome/test/fuzzing/webidl_fuzzing/webidlfuzzer_proto_gen/webidlfuzzer_sub8.pb.o", + "./obj/chrome/test/fuzzing/webidl_fuzzing/webidlfuzzer_proto_gen/webidlfuzzer_sub9.pb.o", + "./obj/chrome/test/fuzzing/webidl_fuzzing/webidlfuzzer_proto_gen/webidlfuzzer_sub10.pb.o", + "./obj/chrome/test/fuzzing/webidl_fuzzing/webidlfuzzer_proto_gen/webidlfuzzer_sub11.pb.o", ], "timeout": "15m", # need 9G for debug build diff --git a/naiveproxy/src/build/config/siso/clang_unix.star b/naiveproxy/src/build/config/siso/clang_unix.star index 8062cb4ebd..8103a3c42b 100644 --- a/naiveproxy/src/build/config/siso/clang_unix.star +++ b/naiveproxy/src/build/config/siso/clang_unix.star @@ -263,9 +263,10 @@ def __rules(ctx): "*.stamp", ], "remote": config.get(ctx, "remote-link"), + "restat_content": True, "canonicalize_dir": True, "platform_ref": "large", - "timeout": "2m", + "timeout": "4m", }, { "name": "clang/solink_module", @@ -282,7 +283,7 @@ def __rules(ctx): "remote": config.get(ctx, "remote-link"), "canonicalize_dir": True, "platform_ref": "large", - "timeout": "2m", + "timeout": "4m", }, { "name": "clang/link", diff --git a/naiveproxy/src/build/config/siso/cros.star b/naiveproxy/src/build/config/siso/cros.star index cdbf8e7c03..c9b1a66281 100644 --- a/naiveproxy/src/build/config/siso/cros.star +++ b/naiveproxy/src/build/config/siso/cros.star @@ -138,6 +138,8 @@ def __step_config(ctx, step_config): "action": "(.*_)?cxx", "command_prefix": path.join("../../", cros_target_cxx), "remote": True, + # fast-deps is not safe with cros toolchain. crbug.com/391160876 + "no_fast_deps": True, "canonicalize_dir": True, "timeout": "5m", }, @@ -151,6 +153,8 @@ def __step_config(ctx, step_config): "action": "(.*_)?cc", "command_prefix": path.join("../../", cros_target_cc), "remote": True, + # fast-deps is not safe with cros toolchain. crbug.com/391160876 + "no_fast_deps": True, "canonicalize_dir": True, "timeout": "5m", }, diff --git a/naiveproxy/src/build/config/unsafe_buffers_paths.txt b/naiveproxy/src/build/config/unsafe_buffers_paths.txt index fc702d0596..56866063fc 100644 --- a/naiveproxy/src/build/config/unsafe_buffers_paths.txt +++ b/naiveproxy/src/build/config/unsafe_buffers_paths.txt @@ -50,22 +50,13 @@ # # See `docs/unsafe_buffers.md`. --android_webview/ -base/allocator/ -base/third_party/ -chrome/browser/platform_experience/win/ -chrome/chrome_elf/third_party_dlls/ --chrome/common/profiler/ --chrome/credential_provider/ --chrome/elevation_service/ --chrome/services/cups_proxy/ --chrome/services/ipp_parser/public/cpp/ --chrome/services/sharing/nearby/decoder/ --chrome/test/ --chrome/tools/service_discovery_sniffer/ --chrome/updater/net/ +-chrome/elevation_service/internal/ +-chrome/installer/mac/third_party/ -chromecast/ --clank/ -components/optimization_guide/internal/ -ios/ -ios_internal/ @@ -74,6 +65,7 @@ -testing/iossim/ -third_party/ +third_party/blink/ ++third_party/ipcz/ +third_party/pdfium/ -third_party/pdfium/testing/ -third_party/pdfium/third_party/ @@ -81,24 +73,10 @@ -url/third_party/ -v8/ -# Before clearing this directory, make sure to run against a bot running -# with the build flag: use_internal_isolated_origins. There are none on the CQ -# by default. See file components/site_isolation/preloaded_isolated_origins.cc --components/site_isolation/ - # TODO(crbug.com/41497066#comment22) The Win SDK headers don't get categorized # as system headers when building with DEPOT_TOOLS_WIN_TOOLCHAIN=0 ? -Program Files (x86)/Windows Kits/ -# Please be cautious before removing this opt-out, because it won't show up on -# the Mega-CQ, nor Sheriffs' dashboards. See https://crbug.com/361760067 -# Removing this directory may fail on the bot CI bot: -# https://luci-milo.appspot.com/ui/p/chrome/builders/official/win-arm64-clang --chrome/installer/ - -# Please check 'linux-v4l2-codec-rel' bot before removing this opt-out. --media/gpu/v4l2/ - # //codelabs is a directory that contains examples for developers to modify as # they learn about chromium development. This is indefinitely opt-out because # it is not part of the main build, and we don't want developers to be blocked diff --git a/naiveproxy/src/build/dotfile_settings.gni b/naiveproxy/src/build/dotfile_settings.gni index e004eb5322..29e0130612 100644 --- a/naiveproxy/src/build/dotfile_settings.gni +++ b/naiveproxy/src/build/dotfile_settings.gni @@ -6,7 +6,7 @@ # to make it easier to roll new versions of //build in. build_dotfile_settings = { - exec_script_whitelist = [ + exec_script_allowlist = [ "//build/config/android/rules.gni", "//build/config/apple/mobile_config.gni", "//build/config/chromeos/rules.gni", @@ -42,4 +42,8 @@ build_dotfile_settings = { "//build/toolchain/zos/BUILD.gn", "//build/util/branding.gni", ] + + # TODO(crbug.com/389986807) - move other clients to `exec_script_allowlist` + # so that we don't need to keep supporting `exec_script_whitelist`. + exec_script_whitelist = exec_script_allowlist } diff --git a/naiveproxy/src/build/fuchsia/linux_internal.sdk.sha1 b/naiveproxy/src/build/fuchsia/linux_internal.sdk.sha1 index 8ebaa9f7ac..b53d2cc97a 100644 --- a/naiveproxy/src/build/fuchsia/linux_internal.sdk.sha1 +++ b/naiveproxy/src/build/fuchsia/linux_internal.sdk.sha1 @@ -1 +1 @@ -26.20250104.100.1 +26.20250111.100.1 diff --git a/naiveproxy/src/build/fuchsia/test/ffx_emulator.py b/naiveproxy/src/build/fuchsia/test/ffx_emulator.py index adfacb3645..4f58ff391e 100644 --- a/naiveproxy/src/build/fuchsia/test/ffx_emulator.py +++ b/naiveproxy/src/build/fuchsia/test/ffx_emulator.py @@ -82,9 +82,6 @@ class FfxEmulator(AbstractContextManager): 'sdk.overrides.qemu_internal=' + os.path.join(DIR_SRC_ROOT, 'third_party', 'qemu-linux-arm64', 'bin', 'qemu-system-aarch64')) - configs.append('sdk.overrides.uefi_internal=' + - os.path.join(DIR_SRC_ROOT, 'third_party', 'edk2', - 'qemu-arm64', 'QEMU_EFI.fd')) # Always use qemu for arm64 images, no matter it runs on arm64 hosts or # x64 hosts with simulation. diff --git a/naiveproxy/src/build/fuchsia/update_sdk.py b/naiveproxy/src/build/fuchsia/update_sdk.py index 9abe3be425..d75bc4c39b 100755 --- a/naiveproxy/src/build/fuchsia/update_sdk.py +++ b/naiveproxy/src/build/fuchsia/update_sdk.py @@ -58,7 +58,11 @@ def _GetCurrentVersionFromManifest() -> Optional[str]: if not os.path.exists(_VERSION_FILE): return None with open(_VERSION_FILE) as f: - return json.load(f)['id'] + data = json.load(f) + if not data: + logging.warning('Unexpected empty manifest.json file.') + return None + return data['id'] def main(): diff --git a/naiveproxy/src/build/gn_helpers.py b/naiveproxy/src/build/gn_helpers.py index 4e98200541..90ac0694fd 100644 --- a/naiveproxy/src/build/gn_helpers.py +++ b/naiveproxy/src/build/gn_helpers.py @@ -30,8 +30,9 @@ import sys _CHROMIUM_ROOT = os.path.abspath( os.path.join(os.path.dirname(__file__), os.pardir)) +ARGS_GN_FILENAME = 'args.gn' BUILD_VARS_FILENAME = 'build_vars.json' -IMPORT_RE = re.compile(r'^import\("//(\S+)"\)') +IMPORT_RE = re.compile(r'^import\("(\S+)"\)') class GNError(Exception): @@ -286,7 +287,20 @@ class GNValueParser(object): regex_match = IMPORT_RE.match(line) if not regex_match: raise GNError('Not a valid import string: %s' % line) - import_path = os.path.join(self.checkout_root, regex_match.group(1)) + import_path = regex_match.group(1) + + if import_path.startswith("//"): + import_path = os.path.join(self.checkout_root, import_path[2:]) + elif sys.platform.startswith('win32'): + if import_path.startswith("/"): + # gn users '/C:/path/to/foo.gn', not 'C:/path/to/foo.gn' on windows + import_path = import_path[1:] + else: + raise GNError('Need /-prefix for an absolute path: %s' % import_path) + + if not os.path.isabs(import_path): + raise GNError('Unable to use relative path in import path: %s' % + import_path) with open(import_path) as f: imported_args = f.read() self.input = self.input.replace(line, imported_args) @@ -544,6 +558,15 @@ def ReadBuildVars(output_directory): return json.load(f) +def ReadArgsGN(output_directory): + """Parses $output_directory/args.gn into a dict.""" + fname = os.path.join(output_directory, ARGS_GN_FILENAME) + if not os.path.exists(fname): + return {} + with open(fname) as f: + return FromGNArgs(f.read()) + + def CreateBuildCommand(output_directory): """Returns [cmd, -C, output_directory]. diff --git a/naiveproxy/src/build/gn_helpers_unittest.py b/naiveproxy/src/build/gn_helpers_unittest.py index ed3df422cf..634e9f42cc 100755 --- a/naiveproxy/src/build/gn_helpers_unittest.py +++ b/naiveproxy/src/build/gn_helpers_unittest.py @@ -315,6 +315,29 @@ class UnitTest(unittest.TestCase): textwrap.dedent('import("some/relative/args/file.gni")')) parser.ReplaceImports() + if sys.platform.startswith('win32'): + parser = gn_helpers.GNValueParser( + textwrap.dedent(""" + some_arg1 = "val1" + import("/c:/some/args/file.gni") + some_arg2 = "val2" + """)) + with mock.patch(open_fun, mock.mock_open(read_data=fake_import)): + parser.ReplaceImports() + self.assertEqual( + parser.input, + textwrap.dedent(""" + some_arg1 = "val1" + some_imported_arg = "imported_val" + some_arg2 = "val2" + """)) + + # A path that's not source absolute should raise an exception. + with self.assertRaises(gn_helpers.GNError): + parser = gn_helpers.GNValueParser( + textwrap.dedent('import("c:/some/args/file.gni")')) + parser.ReplaceImports() + def test_CreateBuildCommand(self): with tempfile.TemporaryDirectory() as temp_dir: suffix = '.bat' if sys.platform.startswith('win32') else '' diff --git a/naiveproxy/src/build/linux/sysroot_scripts/build_and_upload.py b/naiveproxy/src/build/linux/sysroot_scripts/build_and_upload.py index 92ef3cde1d..42d2089e0b 100755 --- a/naiveproxy/src/build/linux/sysroot_scripts/build_and_upload.py +++ b/naiveproxy/src/build/linux/sysroot_scripts/build_and_upload.py @@ -62,12 +62,12 @@ def main(): print("Updating DEPS files") for key, objects in updates.items(): - obj = objects[0] + obj = objects["objects"][0] object_info = ','.join([ - obj['object_name'], - obj['sha256sum'], - str(obj['size_bytes']), - str(obj['generation']), + obj["object_name"], + obj["sha256sum"], + str(obj["size_bytes"]), + str(obj["generation"]), ]) print(f"Updating {key} in src/DEPS") diff --git a/naiveproxy/src/build/linux/sysroot_scripts/generated_package_lists/bullseye.amd64 b/naiveproxy/src/build/linux/sysroot_scripts/generated_package_lists/bullseye.amd64 index b4288256b8..10c7c4a105 100644 --- a/naiveproxy/src/build/linux/sysroot_scripts/generated_package_lists/bullseye.amd64 +++ b/naiveproxy/src/build/linux/sysroot_scripts/generated_package_lists/bullseye.amd64 @@ -1,471 +1,640 @@ -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/alsa-lib/libasound2-dev_1.2.4-1.1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/alsa-lib/libasound2_1.2.4-1.1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/aom/libaom0_1.0.0.errata1-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/aom/libaom3_3.6.0-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.38.0-4~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.38.0-4~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-core/libatspi2.0-0_2.44.1-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-core/libatspi2.0-dev_2.44.1-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/atk1.0/libatk1.0-0_2.38.0-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/atk1.0/libatk1.0-dev_2.38.0-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/attr/libattr1_2.4.48-6_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/audit/libaudit1_3.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/avahi/libavahi-client3_0.8-5+deb11u2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/avahi/libavahi-common3_0.8-5+deb11u2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/bluez/libbluetooth-dev_5.55-3.1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/bluez/libbluetooth3_5.55-3.1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/brotli/libbrotli-dev_1.0.9-2+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/brotli/libbrotli1_1.0.9-2+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/bzip2/libbz2-1.0_1.0.8-4_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo-gobject2_1.16.0-5_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo-script-interpreter2_1.16.0-5_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo2-dev_1.16.0-5_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo2_1.16.0-5_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/chromaprint/libchromaprint1_1.5.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cjson/libcjson1_1.7.14-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/codec2/libcodec2-0.9_0.9.2-4_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/codec2/libcodec2-1.0_1.0.5-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/colord/libcolord2_1.4.5-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcups2-dev_2.3.3op2-3+deb11u2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcups2_2.3.3op2-3+deb11u2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcupsimage2-dev_2.3.3op2-3+deb11u2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcupsimage2_2.3.3op2-3+deb11u2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/curl/libcurl3-gnutls_7.88.1-7~bpo11+2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/curl/libcurl4-gnutls-dev_7.88.1-7~bpo11+2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cyrus-sasl2/libsasl2-2_2.1.27+dfsg-2.1+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dav1d/libdav1d4_0.7.1-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dav1d/libdav1d6_1.0.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.8_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-6_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dbus/libdbus-1-3_1.12.24-0+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dbus/libdbus-1-dev_1.12.24-0+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/double-conversion/libdouble-conversion3_3.1.5-6.1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/e2fsprogs/comerr-dev_2.1-1.46.6-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/e2fsprogs/libcom-err2_1.46.6-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/elfutils/libelf-dev_0.187-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/elfutils/libelf1_0.187-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/expat/libexpat1-dev_2.2.10-2+deb11u5_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/expat/libexpat1_2.2.10-2+deb11u5_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavcodec-dev_4.3.5-0+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavcodec58_4.3.5-0+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavcodec59_5.1.3-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavformat-dev_4.3.5-0+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavformat59_5.1.3-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavutil-dev_4.3.5-0+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavutil56_4.3.5-0+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavutil57_5.1.3-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libswresample-dev_4.3.5-0+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libswresample3_4.3.5-0+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libswresample4_5.1.3-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/flac/libflac-dev_1.3.3-2+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/flac/libflac8_1.3.3-2+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fontconfig/libfontconfig-dev_2.13.1-4.2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fontconfig/libfontconfig1_2.13.1-4.2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/freetype/libfreetype-dev_2.10.4+dfsg-1+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/freetype/libfreetype6_2.10.4+dfsg-1+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fribidi/libfribidi-dev_1.0.8-2+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fribidi/libfribidi0_1.0.8-2+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/game-music-emu/libgme0_0.6.3-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libasan6_10.2.1-6_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libatomic1_10.2.1-6_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libgcc-10-dev_10.2.1-6_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libgcc-s1_10.2.1-6_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libgomp1_10.2.1-6_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libitm1_10.2.1-6_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/liblsan0_10.2.1-6_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libquadmath0_10.2.1-6_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libstdc++-10-dev_10.2.1-6_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libstdc++6_10.2.1-6_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libtsan0_10.2.1-6_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libubsan1_10.2.1-6_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-0_2.42.2+dfsg-1+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-dev_2.42.2+dfsg-1+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glib2.0/libglib2.0-0_2.66.8-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glib2.0/libglib2.0-dev_2.66.8-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glibc/libc6-dev_2.31-13+deb11u5_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glibc/libc6_2.31-13+deb11u5_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gmp/libgmp10_6.2.1+dfsg-1+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls-dane0_3.7.1-5+deb11u3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls-openssl27_3.7.1-5+deb11u3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls28-dev_3.7.1-5+deb11u3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls30_3.7.1-5+deb11u3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutlsxx28_3.7.1-5+deb11u3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphene/libgraphene-1.0-0_1.10.4+dfsg1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphene/libgraphene-1.0-dev_1.10.4+dfsg1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphite2/libgraphite2-3_1.3.14-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphite2/libgraphite2-dev_1.3.14-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.33-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk+3.0/libgtk-3-0_3.24.24-4+deb11u3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.24-4+deb11u3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk4/libgtk-4-1_4.8.3+ds-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk4/libgtk-4-dev_4.8.3+ds-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz-dev_2.7.4-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz-gobject0_2.7.4-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz-icu0_2.7.4-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz0b_2.7.4-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/highway/libhwy1_1.0.3-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git180724-3+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/i/icu/libicu67_67.1-7_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/i/intel-mediasdk/libmfx1_21.1.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/jbigkit/libjbig-dev_2.1-3.1+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/jpeg-xl/libjxl0.7_0.7.0-10_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/json-glib/libjson-glib-1.0-0_1.6.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/keyutils/libkeyutils1_1.6.1-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/krb5-multidev_1.18.3-6+deb11u3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libgssapi-krb5-2_1.18.3-6+deb11u3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libgssrpc4_1.18.3-6+deb11u3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libk5crypto3_1.18.3-6+deb11u3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkadm5clnt-mit12_1.18.3-6+deb11u3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkadm5srv-mit12_1.18.3-6+deb11u3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkdb5-10_1.18.3-6+deb11u3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkrb5-3_1.18.3-6+deb11u3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkrb5-dev_1.18.3-6+deb11u3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkrb5support0_1.18.3-6+deb11u3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lame/libmp3lame0_3.100-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lcms2/liblcms2-2_2.12~rc1-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lerc/liblerc4_4.0.0+ds-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/linux/linux-libc-dev_6.1.20-2~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lz4/liblz4-1_1.9.3-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lzo2/liblzo2-2_2.10-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/liba/libasyncns/libasyncns0_0.8-6+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libb/libb2/libb2-1_0.98.1-1.1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libb/libbluray/libbluray2_1.2.1-4+deb11u2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libb/libbsd/libbsd0_0.11.3-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-2.2+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcap2/libcap-dev_2.44-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcap2/libcap2_2.44-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcloudproviders/libcloudproviders0_0.3.0-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdatrie/libdatrie-dev_0.2.13-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdatrie/libdatrie1_0.2.13-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr492+repack1-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr492+repack1-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_18.10.20180917~bzr492+repack1-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_18.10.20180917~bzr492+repack1-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdeflate/libdeflate-dev_1.10-2~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdeflate/libdeflate0_1.10-2~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.104-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-dev_2.4.104-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-intel1_2.4.104-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-nouveau2_2.4.104-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-radeon1_2.4.104-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm2_2.4.104-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libepoxy/libepoxy-dev_1.5.8-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libepoxy/libepoxy0_1.5.8-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libevdev/libevdev-dev_1.11.0+dfsg-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libevdev/libevdev2_1.11.0+dfsg-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libevent/libevent-2.1-7_2.1.12-stable-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libf/libffi/libffi-dev_3.3-6_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libf/libffi/libffi7_3.3-6_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.7-6_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgcrypt20/libgcrypt20_1.8.7-6_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libegl-dev_1.3.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libegl1_1.3.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgl-dev_1.3.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgl1_1.3.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgles-dev_1.3.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgles1_1.3.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgles2_1.3.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglvnd-dev_1.3.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglvnd0_1.3.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglx-dev_1.3.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglx0_1.3.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libopengl0_1.3.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgpg-error/libgpg-error-dev_1.38-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgpg-error/libgpg-error0_1.38-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgsm/libgsm1_1.0.18-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgudev/libgudev-1.0-0_234-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libice/libice6_1.0.10-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libidl/libidl-2-0_0.8.14-4+b12_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libidn/libidn11_1.33-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libidn2/libidn2-0_2.3.0-5_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libinput/libinput-dev_1.16.4-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libinput/libinput10_1.16.4-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_2.0.6-4_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_2.0.6-4_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.9.4-4_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjsoncpp/libjsoncpp24_1.9.4-4_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libm/libmd/libmd0_1.0.3-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libn/libnsl/libnsl2_1.3.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b10_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libo/libogg/libogg-dev_1.3.4-0.1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libo/libogg/libogg0_1.3.4-0.1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libo/libopenmpt/libopenmpt0_0.4.11-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpciaccess/libpciaccess0_0.16-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpgm/libpgm-5.3-0_5.3.128~dfsg-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpng1.6/libpng-dev_1.6.37-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpng1.6/libpng16-16_1.6.37-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libproxy/libproxy1v5_0.4.17-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpsl/libpsl5_0.21.0-1.2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.4-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libr/librabbitmq/librabbitmq4_0.10.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libr/librest/librest-0.7-0_0.8.1-1.1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libr/librist/librist4_0.2.7+dfsg-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libr/librsvg/librsvg2-2_2.50.3+dfsg-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libselinux/libselinux1-dev_3.1-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libselinux/libselinux1_3.1-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsepol/libsepol1-dev_3.1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsepol/libsepol1_3.1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsm/libsm6_1.2.3-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsndfile/libsndfile1_1.0.31-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsodium/libsodium23_1.0.18-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.72.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsoup2.4/libsoup2.4-1_2.72.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsoxr/libsoxr0_0.1.3-4_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libssh/libssh-gcrypt-4_0.9.5-1+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libssh2/libssh2-1_1.9.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtasn1-6/libtasn1-6_4.16.0-2+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libthai/libthai-dev_0.1.28-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libthai/libthai0_0.1.28-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtheora/libtheora0_1.1.1+dfsg.1-15_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtirpc/libtirpc3_1.3.1-1+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtool/libltdl7_2.4.6-15_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libudfread/libudfread0_1.1.1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libunistring/libunistring2_0.9.10-4_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libutempter/libutempter-dev_1.2.1-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libutempter/libutempter0_1.2.1-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-dev_2.17.0-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-drm2_2.17.0-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-glx2_2.17.0-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-wayland2_2.17.0-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-x11-2_2.17.0-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva2_2.17.0-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvdpau/libvdpau1_1.4-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvorbis/libvorbis0a_1.3.7-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvorbis/libvorbisenc2_1.3.7-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvorbis/libvorbisfile3_1.3.7-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvpx/libvpx-dev_1.9.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvpx/libvpx6_1.9.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvpx/libvpx7_1.12.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwacom/libwacom2_1.8-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebp-dev_0.6.1-2.1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebp6_0.6.1-2.1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebp7_1.2.4-0.2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2.1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebpmux3_0.6.1-2.1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-6_1.7.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-dev_1.7.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-xcb-dev_1.7.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-xcb1_1.7.2-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxau/libxau-dev_1.0.9-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxau/libxau6_1.0.9-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri2-0_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri3-0_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri3-dev_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-glx0-dev_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-glx0_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-present-dev_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-present0_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-randr0-dev_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-randr0_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-render0-dev_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-render0_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shape0-dev_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shape0_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shm0-dev_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shm0_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-sync-dev_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-sync1_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xfixes0-dev_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xfixes0_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xinerama0_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xinput0_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xkb1_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb1-dev_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb1_1.14-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.5-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcomposite/libxcomposite1_0.4.5-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcrypt/libcrypt-dev_4.4.18-4_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcrypt/libcrypt1_4.4.18-4_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcursor/libxcursor-dev_1.2.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcursor/libxcursor1_1.2.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdamage/libxdamage-dev_1.1.5-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdamage/libxdamage1_1.1.5-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxext/libxext-dev_1.3.3-1.1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxext/libxext6_1.3.3-1.1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxfixes/libxfixes3_5.0.3-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxi/libxi-dev_1.7.10-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxi/libxi6_1.7.10-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxinerama/libxinerama1_1.1.4-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxkbcommon/libxkbcommon-dev_1.0.3-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxkbcommon/libxkbcommon-x11-0_1.0.3-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxkbcommon/libxkbcommon0_1.0.3-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxml2/libxml2-dev_2.9.10+dfsg-6.7+deb11u4_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxml2/libxml2_2.9.10+dfsg-6.7+deb11u4_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxshmfence/libxshmfence-dev_1.3-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxslt/libxslt1-dev_1.1.34-4+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxslt/libxslt1.1_1.1.34-4+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxss/libxss-dev_1.2.3-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxss/libxss1_1.2.3-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxt/libxt-dev_1.2.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxt/libxt6_1.2.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxtst/libxtst6_1.2.3-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libz/libzstd/libzstd1_1.4.8+dfsg-2.1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mbedtls/libmbedcrypto7_2.28.3-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/md4c/libmd4c0_0.4.7-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libegl1-mesa-dev_20.3.5-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libegl1-mesa_20.3.5-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgbm-dev_20.3.5-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgbm1_20.3.5-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgl1-mesa-dev_20.3.5-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgl1-mesa-glx_20.3.5-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libglapi-mesa_20.3.5-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libwayland-egl1-mesa_20.3.5-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/mesa-common-dev_20.3.5-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/minizip/libminizip-dev_1.1-8+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/minizip/libminizip1_1.1-8+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mpg123/libmpg123-0_1.26.4-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mtdev/libmtdev1_1.1.6-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libncurses-dev_6.2+20201114-2+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libncurses6_6.2+20201114-2+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libncursesw6_6.2+20201114-2+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libtinfo6_6.2+20201114-2+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nettle/libhogweed6_3.7.3-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nettle/libnettle8_3.7.3-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nghttp2/libnghttp2-14_1.43.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/norm/libnorm1_1.5.9+dfsg-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nspr/libnspr4-dev_4.29-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nspr/libnspr4_4.29-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nss/libnss3-dev_3.61-1+deb11u3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nss/libnss3_3.61-1+deb11u3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/numactl/libnuma1_2.0.12-1+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/ocl-icd/ocl-icd-libopencl1_2.2.14-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openjpeg2/libopenjp2-7_2.4.0-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openldap/libldap-2.4-2_2.4.59+dfsg-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openssl/libssl-dev_1.1.1n-0+deb11u4_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openssl/libssl1.1_1.1.1n-0+deb11u4_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/opus/libopus-dev_1.3.1-0.1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/opus/libopus0_1.3.1-0.1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/p11-kit/libp11-kit0_0.23.22-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pam/libpam0g-dev_1.4.0-9+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pam/libpam0g_1.4.0-9+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpango-1.0-0_1.46.2-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpango1.0-dev_1.46.2-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpangocairo-1.0-0_1.46.2-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpangoft2-1.0-0_1.46.2-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpangoxft-1.0-0_1.46.2-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5.1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pciutils/libpci-dev_3.7.0-5_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pciutils/libpci3_3.7.0-5_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-16-0_10.36-2+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-32-0_10.36-2+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-8-0_10.36-2+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-dev_10.36-2+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-posix2_10.36-2+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre16-3_8.39-13_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre3-dev_8.39-13_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre32-3_8.39-13_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre3_8.39-13_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcrecpp0v5_8.39-13_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pipewire/libpipewire-0.3-0_0.3.65-2~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pipewire/libpipewire-0.3-dev_0.3.65-2~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pipewire/libspa-0.2-dev_0.3.65-2~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pixman/libpixman-1-0_0.40.0-1.1~deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pixman/libpixman-1-dev_0.40.0-1.1~deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pulseaudio/libpulse-dev_14.2-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pulseaudio/libpulse-mainloop-glib0_14.2-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pulseaudio/libpulse0_14.2-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6concurrent6_6.4.2+dfsg-10~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6core6_6.4.2+dfsg-10~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6dbus6_6.4.2+dfsg-10~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6gui6_6.4.2+dfsg-10~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6network6_6.4.2+dfsg-10~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6opengl6_6.4.2+dfsg-10~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6openglwidgets6_6.4.2+dfsg-10~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6printsupport6_6.4.2+dfsg-10~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6sql6_6.4.2+dfsg-10~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6test6_6.4.2+dfsg-10~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6widgets6_6.4.2+dfsg-10~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6xml6_6.4.2+dfsg-10~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/qt6-base-dev-tools_6.4.2+dfsg-10~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/qt6-base-dev_6.4.2+dfsg-10~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5concurrent5_5.15.2+dfsg-9_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5core5a_5.15.2+dfsg-9_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5dbus5_5.15.2+dfsg-9_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5gui5_5.15.2+dfsg-9_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5network5_5.15.2+dfsg-9_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5printsupport5_5.15.2+dfsg-9_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5sql5_5.15.2+dfsg-9_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5test5_5.15.2+dfsg-9_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5widgets5_5.15.2+dfsg-9_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5xml5_5.15.2+dfsg-9_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/qtbase5-dev-tools_5.15.2+dfsg-9_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/qtbase5-dev_5.15.2+dfsg-9_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/re2/libre2-9_20210201+dfsg-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/re2/libre2-dev_20210201+dfsg-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/rtmpdump/librtmp1_2.4+20151223.gitfa8646d.1-2+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/rust-rav1e/librav1e0_0.5.1-6_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/shared-mime-info/shared-mime-info_2.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/shine/libshine3_3.1.1-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/snappy/libsnappy-dev_1.1.8-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/snappy/libsnappy1v5_1.1.8-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/speech-dispatcher/libspeechd-dev_0.11.4-2~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/speech-dispatcher/libspeechd2_0.11.4-2~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/speex/libspeex1_1.2~rc1.2-1.1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/sqlite3/libsqlite3-0_3.34.1-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/srt/libsrt1.5-gnutls_1.5.1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/svt-av1/libsvtav1enc1_1.4.1+dfsg-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libsystemd-dev_252.5-2~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libsystemd0_252.5-2~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libudev-dev_252.5-2~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libudev1_252.5-2~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tcp-wrappers/libwrap0_7.6.q-31_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiff-dev_4.2.0-1+deb11u4_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiff5_4.2.0-1+deb11u4_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiff6_4.5.0-6_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiffxx5_4.2.0-1+deb11u4_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tslib/libts0_1.22-1+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/twolame/libtwolame0_0.4.0-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/unbound/libunbound8_1.17.1-2~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libblkid-dev_2.36.1-8+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libblkid1_2.36.1-8+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libmount-dev_2.36.1-8+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libmount1_2.36.1-8+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libuuid1_2.36.1-8+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/uuid-dev_2.36.1-8+deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/v/valgrind/valgrind_3.16.1-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/v/vulkan-loader/libvulkan-dev_1.3.224.0-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/v/vulkan-loader/libvulkan1_1.3.224.0-1~bpo11+1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wavpack/libwavpack1_5.4.0-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland-protocols/wayland-protocols_1.20-1_all.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-bin_1.18.0-2~exp1.1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-client0_1.18.0-2~exp1.1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-cursor0_1.18.0-2~exp1.1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-dev_1.18.0-2~exp1.1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-egl-backend-dev_1.18.0-2~exp1.1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-egl1_1.18.0-2~exp1.1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-server0_1.18.0-2~exp1.1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/x264/libx264-160_0.160.3011+gitcde9a93-2.1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/x264/libx264-164_0.164.3095+gitbaee400-3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/x265/libx265-192_3.4-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/x265/libx265-199_3.5-2+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-image/libxcb-image0-dev_0.4.0-1+b3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-image/libxcb-image0_0.4.0-1+b3_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-keysyms/libxcb-keysyms1_0.4.0-1+b2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0-dev_0.3.9-1+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0_0.3.9-1+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-wm/libxcb-icccm4_0.4.1-1.1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util/libxcb-util-dev_0.4.0-1+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util/libxcb-util1_0.4.0-1+b1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xft/libxft-dev_2.3.2-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xft/libxft2_2.3.2-2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xorgproto/x11proto-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xvidcore/libxvidcore4_1.3.7-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xz-utils/liblzma5_5.2.5-2.1~deb11u1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/z/zeromq3/libzmq5_4.3.4-1_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-2+deb11u2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/z/zlib/zlib1g_1.2.11.dfsg-2+deb11u2_amd64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/z/zvbi/libzvbi0_0.2.35-18_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/acl/libacl1_2.2.53-10_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/adduser/adduser_3.118+deb11u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/adwaita-icon-theme/adwaita-icon-theme_3.38.0-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/alsa-lib/libasound2-data_1.2.4-1.1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/alsa-lib/libasound2-dev_1.2.4-1.1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/alsa-lib/libasound2_1.2.4-1.1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/aom/libaom0_1.0.0.errata1-3+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/apparmor/libapparmor1_2.13.6-10_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/argon2/libargon2-1_0~20171227-0.2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.38.0-4~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.38.0-4~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/at-spi2-core/gir1.2-atspi-2.0_2.44.1-1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/at-spi2-core/libatspi2.0-0_2.44.1-1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/at-spi2-core/libatspi2.0-dev_2.44.1-1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/atk1.0/gir1.2-atk-1.0_2.38.0-1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/atk1.0/libatk1.0-0_2.38.0-1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/atk1.0/libatk1.0-data_2.38.0-1~bpo11+1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/atk1.0/libatk1.0-dev_2.38.0-1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/audit/libaudit-common_3.0-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/audit/libaudit1_3.0-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/avahi/libavahi-client3_0.8-5+deb11u2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/avahi/libavahi-common-data_0.8-5+deb11u2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/avahi/libavahi-common3_0.8-5+deb11u2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/binutils/binutils-common_2.35.2-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/binutils/binutils-x86-64-linux-gnu_2.35.2-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/binutils/binutils_2.35.2-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/binutils/libbinutils_2.35.2-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/binutils/libctf-nobfd0_2.35.2-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/binutils/libctf0_2.35.2-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/bluez/libbluetooth-dev_5.55-3.1+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/bluez/libbluetooth3_5.55-3.1+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/brotli/libbrotli-dev_1.0.9-2+b2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/brotli/libbrotli1_1.0.9-2+b2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/build-essential/build-essential_12.9_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/bzip2/bzip2_1.0.8-4_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/bzip2/libbz2-1.0_1.0.8-4_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cairo/libcairo-gobject2_1.16.0-5_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cairo/libcairo-script-interpreter2_1.16.0-5_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cairo/libcairo2-dev_1.16.0-5_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cairo/libcairo2_1.16.0-5_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/chromaprint/libchromaprint1_1.5.0-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/codec2/libcodec2-0.9_0.9.2-4_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/colord/gir1.2-colord-1.0_1.4.5-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/colord/libcolord-dev_1.4.5-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/colord/libcolord2_1.4.5-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/coreutils/coreutils_8.32-4+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cryptsetup/libcryptsetup12_2.3.7-1+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cups/libcups2-dev_2.3.3op2-3+deb11u8_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cups/libcups2_2.3.3op2-3+deb11u8_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cups/libcupsimage2-dev_2.3.3op2-3+deb11u8_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cups/libcupsimage2_2.3.3op2-3+deb11u8_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/curl/libcurl3-gnutls_7.88.1-10+deb12u6~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/curl/libcurl4-gnutls-dev_7.88.1-10+deb12u6~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cyrus-sasl2/libsasl2-2_2.1.27+dfsg-2.1+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cyrus-sasl2/libsasl2-modules-db_2.1.27+dfsg-2.1+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dav1d/libdav1d4_0.7.1-3+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.8_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/dbus-bin_1.14.10-1~deb12u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/dbus-daemon_1.14.10-1~deb12u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/dbus-session-bus-common_1.14.10-1~deb12u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/dbus-system-bus-common_1.14.10-1~deb12u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/dbus-user-session_1.14.10-1~deb12u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/dbus_1.14.10-1~deb12u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/libdbus-1-3_1.12.28-0+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/libdbus-1-dev_1.12.28-0+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dconf/dconf-gsettings-backend_0.38.0-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dconf/dconf-service_0.38.0-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dconf/libdconf1_0.38.0-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/debconf/debconf_1.5.77_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/double-conversion/libdouble-conversion3_3.1.5-6.1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dpkg/dpkg-dev_1.20.13_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dpkg/dpkg_1.20.13_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dpkg/libdpkg-perl_1.20.13_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/e/e2fsprogs/comerr-dev_2.1-1.46.6-1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/e/e2fsprogs/libcom-err2_1.46.6-1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/e/elfutils/libelf-dev_0.187-1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/e/elfutils/libelf1_0.187-1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/e/expat/libexpat1-dev_2.2.10-2+deb11u5_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/e/expat/libexpat1_2.2.10-2+deb11u5_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libavcodec-dev_4.3.7-0+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libavcodec58_4.3.7-0+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libavformat-dev_4.3.7-0+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libavformat58_4.3.7-0+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libavutil-dev_4.3.7-0+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libavutil56_4.3.7-0+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libswresample-dev_4.3.7-0+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libswresample3_4.3.7-0+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/flac/libflac-dev_1.3.3-2+deb11u2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/flac/libflac8_1.3.3-2+deb11u2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fontconfig/fontconfig-config_2.13.1-4.2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fontconfig/fontconfig_2.13.1-4.2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fontconfig/libfontconfig-dev_2.13.1-4.2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fontconfig/libfontconfig1-dev_2.13.1-4.2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fontconfig/libfontconfig1_2.13.1-4.2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fonts-dejavu/fonts-dejavu-core_2.37-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/freetype/libfreetype-dev_2.10.4+dfsg-1+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/freetype/libfreetype6-dev_2.10.4+dfsg-1+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/freetype/libfreetype6_2.10.4+dfsg-1+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fribidi/libfribidi-dev_1.0.8-2+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fribidi/libfribidi0_1.0.8-2+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/game-music-emu/libgme0_0.6.3-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/cpp-10_10.2.1-6_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/g++-10_10.2.1-6_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/gcc-10-base_10.2.1-6_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/gcc-10_10.2.1-6_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libasan6_10.2.1-6_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libatomic1_10.2.1-6_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libcc1-0_10.2.1-6_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libgcc-10-dev_10.2.1-6_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libgcc-s1_10.2.1-6_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libgomp1_10.2.1-6_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libitm1_10.2.1-6_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/liblsan0_10.2.1-6_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libquadmath0_10.2.1-6_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libstdc++-10-dev_10.2.1-6_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libstdc++6_10.2.1-6_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libtsan0_10.2.1-6_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libubsan1_10.2.1-6_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-defaults/cpp_10.2.1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-defaults/g++_10.2.1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-defaults/gcc_10.2.1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdbm/libgdbm-compat4_1.19-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdbm/libgdbm6_1.19-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdk-pixbuf/gir1.2-gdkpixbuf-2.0_2.42.2+dfsg-1+deb11u2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-0_2.42.2+dfsg-1+deb11u2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-dev_2.42.2+dfsg-1+deb11u2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-bin_2.42.2+dfsg-1+deb11u2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-common_2.42.2+dfsg-1+deb11u2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib-networking/glib-networking-common_2.66.0-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib-networking/glib-networking-services_2.66.0-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib-networking/glib-networking_2.66.0-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib2.0/libglib2.0-0_2.66.8-1+deb11u4_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib2.0/libglib2.0-bin_2.66.8-1+deb11u4_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib2.0/libglib2.0-data_2.66.8-1+deb11u4_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib2.0/libglib2.0-dev-bin_2.66.8-1+deb11u4_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib2.0/libglib2.0-dev_2.66.8-1+deb11u4_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glibc/libc-dev-bin_2.31-13+deb11u5_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glibc/libc6-dbg_2.31-13+deb11u5_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glibc/libc6-dev_2.31-13+deb11u11_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glibc/libc6-dev_2.31-13+deb11u5_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glibc/libc6_2.31-13+deb11u5_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gmp/libgmp-dev_6.2.1+dfsg-1+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gmp/libgmp10_6.2.1+dfsg-1+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gmp/libgmpxx4ldbl_6.2.1+dfsg-1+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gnutls28/libgnutls-dane0_3.7.1-5+deb11u5_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gnutls28/libgnutls-openssl27_3.7.1-5+deb11u5_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gnutls28/libgnutls28-dev_3.7.1-5+deb11u5_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gnutls28/libgnutls30_3.7.1-5+deb11u5_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gnutls28/libgnutlsxx28_3.7.1-5+deb11u5_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gobject-introspection/gir1.2-freedesktop_1.66.1-1+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gobject-introspection/gir1.2-glib-2.0_1.66.1-1+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gobject-introspection/gobject-introspection_1.66.1-1+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gobject-introspection/libgirepository-1.0-1_1.66.1-1+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gobject-introspection/libgirepository1.0-dev_1.66.1-1+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/graphene/gir1.2-graphene-1.0_1.10.4+dfsg1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/graphene/libgraphene-1.0-0_1.10.4+dfsg1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/graphene/libgraphene-1.0-dev_1.10.4+dfsg1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/graphite2/libgraphite2-3_1.3.14-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/graphite2/libgraphite2-dev_1.3.14-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gsettings-desktop-schemas/gsettings-desktop-schemas_3.38.0-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+2.0/gir1.2-gtk-2.0_2.24.33-2+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.33-2+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+2.0/libgtk2.0-common_2.24.33-2+deb11u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+2.0/libgtk2.0-dev_2.24.33-2+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+3.0/gir1.2-gtk-3.0_3.24.24-4+deb11u4_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+3.0/gtk-update-icon-cache_3.24.24-4+deb11u4_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+3.0/libgtk-3-0_3.24.24-4+deb11u4_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+3.0/libgtk-3-common_3.24.24-4+deb11u4_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.24-4+deb11u4_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk4/gir1.2-gtk-4.0_4.8.3+ds-2+deb12u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk4/libgtk-4-1_4.8.3+ds-2+deb12u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk4/libgtk-4-common_4.8.3+ds-2+deb12u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk4/libgtk-4-dev_4.8.3+ds-2+deb12u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/h/harfbuzz/gir1.2-harfbuzz-0.0_2.7.4-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/h/harfbuzz/libharfbuzz-dev_2.7.4-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/h/harfbuzz/libharfbuzz-gobject0_2.7.4-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/h/harfbuzz/libharfbuzz-icu0_2.7.4-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/h/harfbuzz/libharfbuzz0b_2.7.4-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/h/hicolor-icon-theme/hicolor-icon-theme_0.17-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/i/icu/icu-devtools_67.1-7_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/i/icu/libicu-dev_67.1-7_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/i/icu/libicu67_67.1-7_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/i/intel-mediasdk/libmfx1_21.1.0-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/i/iptables/libip4tc2_1.8.7-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/i/isl/libisl23_0.23-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/j/jbigkit/libjbig-dev_2.1-3.1+b2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/j/json-c/libjson-c5_0.15-2+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/j/json-glib/libjson-glib-1.0-0_1.6.2-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/j/json-glib/libjson-glib-1.0-common_1.6.2-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/keyutils/libkeyutils1_1.6.1-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/kmod/libkmod2_28-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/krb5-multidev_1.18.3-6+deb11u5_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libgssapi-krb5-2_1.18.3-6+deb11u5_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libgssrpc4_1.18.3-6+deb11u5_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libk5crypto3_1.18.3-6+deb11u5_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libkadm5clnt-mit12_1.18.3-6+deb11u5_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libkadm5srv-mit12_1.18.3-6+deb11u5_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libkdb5-10_1.18.3-6+deb11u5_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libkrb5-3_1.18.3-6+deb11u5_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libkrb5-dev_1.18.3-6+deb11u5_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libkrb5support0_1.18.3-6+deb11u5_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lame/libmp3lame0_3.100-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lcms2/liblcms2-2_2.12~rc1-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lcms2/liblcms2-dev_2.12~rc1-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lerc/liblerc4_4.0.0+ds-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/linux/linux-libc-dev_6.1.94-1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/llvm-toolchain-11/libllvm11_11.0.1-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lm-sensors/libsensors-config_3.6.0-7_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lm-sensors/libsensors5_3.6.0-7_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lsb/lsb-base_11.1.0_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lvm2/dmsetup_1.02.175-2.1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lvm2/libdevmapper1.02.1_1.02.175-2.1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lz4/liblz4-1_1.9.3-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lzo2/liblzo2-2_2.10-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/liba/libasyncns/libasyncns0_0.8-6+b2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libb/libb2/libb2-1_0.98.1-1.1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libb/libbluray/libbluray2_1.2.1-4+deb11u2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libb/libbsd/libbsd0_0.11.3-1+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-2.2+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libc/libcap2/libcap-dev_2.44-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libc/libcap2/libcap2_2.44-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libc/libcloudproviders/libcloudproviders0_0.3.0-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdatrie/libdatrie-dev_0.2.13-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdatrie/libdatrie1_0.2.13-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdbusmenu/gir1.2-dbusmenu-glib-0.4_18.10.20180917~bzr492+repack1-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr492+repack1-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr492+repack1-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdeflate/libdeflate-dev_1.10-2~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdeflate/libdeflate0_1.10-2~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.104-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-common_2.4.104-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-dev_2.4.104-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-intel1_2.4.104-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-nouveau2_2.4.104-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-radeon1_2.4.104-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm2_2.4.104-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libe/libedit/libedit2_3.1-20191231-2+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libe/libepoxy/libepoxy-dev_1.5.8-1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libe/libepoxy/libepoxy0_1.5.8-1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libe/libevdev/libevdev-dev_1.11.0+dfsg-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libe/libevdev/libevdev2_1.11.0+dfsg-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libe/libevent/libevent-2.1-7_2.1.12-stable-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libf/libffi/libffi-dev_3.3-6_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libf/libffi/libffi7_3.3-6_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.7-6_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgcrypt20/libgcrypt20_1.8.7-6_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglu/libglu1-mesa-dev_9.0.1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglu/libglu1-mesa_9.0.1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libegl-dev_1.3.2-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libegl1_1.3.2-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libgl-dev_1.3.2-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libgl1_1.3.2-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libgles-dev_1.3.2-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libgles1_1.3.2-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libgles2_1.3.2-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libglvnd-dev_1.3.2-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libglvnd0_1.3.2-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libglx-dev_1.3.2-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libglx0_1.3.2-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libopengl-dev_1.3.2-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libopengl0_1.3.2-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgpg-error/libgpg-error-dev_1.38-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgpg-error/libgpg-error0_1.38-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgsm/libgsm1_1.0.18-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgudev/gir1.2-gudev-1.0_234-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgudev/libgudev-1.0-0_234-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgudev/libgudev-1.0-dev_234-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libice/libice-dev_1.0.10-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libice/libice6_1.0.10-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libidn2/libidn2-0_2.3.0-5_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libidn2/libidn2-dev_2.3.0-5_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libinput/libinput-bin_1.16.4-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libinput/libinput-dev_1.16.4-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libinput/libinput10_1.16.4-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libj/libjpeg-turbo/libjpeg-dev_2.0.6-4_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_2.0.6-4_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_2.0.6-4_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.9.4-4_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libj/libjsoncpp/libjsoncpp24_1.9.4-4_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libm/libmd/libmd0_1.0.3-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libn/libnsl/libnsl-dev_1.3.0-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libn/libnsl/libnsl2_1.3.0-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libo/libogg/libogg-dev_1.3.4-0.1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libo/libogg/libogg0_1.3.4-0.1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libo/libopenmpt/libopenmpt0_0.4.11-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libpciaccess/libpciaccess0_0.16-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libpgm/libpgm-5.3-0_5.3.128~dfsg-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libpng1.6/libpng-dev_1.6.37-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libpng1.6/libpng16-16_1.6.37-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libproxy/libproxy1v5_0.4.17-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libpsl/libpsl5_0.21.0-1.2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.4-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libr/librabbitmq/librabbitmq4_0.10.0-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libr/librest/librest-0.7-0_0.8.1-1.1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libr/librsvg/librsvg2-2_2.50.3+dfsg-1+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libseccomp/libseccomp2_2.5.1-1+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libselinux/libselinux1-dev_3.1-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libselinux/libselinux1_3.1-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsemanage/libsemanage-common_3.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsemanage/libsemanage1_3.1-1+b2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsepol/libsepol1-dev_3.1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsepol/libsepol1_3.1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libset-scalar-perl/libset-scalar-perl_1.29-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsm/libsm-dev_1.2.3-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsm/libsm6_1.2.3-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsndfile/libsndfile1_1.0.31-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsodium/libsodium23_1.0.18-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.72.0-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsoup2.4/libsoup2.4-1_2.72.0-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsoxr/libsoxr0_0.1.3-4_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libssh/libssh-gcrypt-4_0.9.8-0+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libssh2/libssh2-1_1.9.0-2+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libtasn1-6/libtasn1-6-dev_4.16.0-2+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libtasn1-6/libtasn1-6_4.16.0-2+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libthai/libthai-data_0.1.28-3_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libthai/libthai-dev_0.1.28-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libthai/libthai0_0.1.28-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libtheora/libtheora0_1.1.1+dfsg.1-15_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libtirpc/libtirpc-common_1.3.1-1+deb11u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libtirpc/libtirpc-dev_1.3.1-1+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libtirpc/libtirpc3_1.3.1-1+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libu/libudfread/libudfread0_1.1.1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libu/libunistring/libunistring2_0.9.10-4_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libu/libutempter/libutempter-dev_1.2.1-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libu/libutempter/libutempter0_1.2.1-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libva/libva-dev_2.17.0-1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libva/libva-drm2_2.17.0-1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libva/libva-glx2_2.17.0-1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libva/libva-wayland2_2.17.0-1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libva/libva-x11-2_2.17.0-1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libva/libva2_2.17.0-1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libvdpau/libvdpau1_1.4-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libvorbis/libvorbis0a_1.3.7-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libvorbis/libvorbisenc2_1.3.7-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libvorbis/libvorbisfile3_1.3.7-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libvpx/libvpx-dev_1.9.0-1+deb11u3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libvpx/libvpx6_1.9.0-1+deb11u3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwacom/libwacom-common_1.8-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwacom/libwacom-dev_1.8-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwacom/libwacom2_1.8-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwebp/libwebp-dev_0.6.1-2.1+deb11u2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwebp/libwebp6_0.6.1-2.1+deb11u2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwebp/libwebp7_1.2.4-0.2+deb12u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2.1+deb11u2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwebp/libwebpmux3_0.6.1-2.1+deb11u2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libx11/libx11-6_1.7.2-1+deb11u2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libx11/libx11-data_1.7.2-1+deb11u2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libx11/libx11-dev_1.7.2-1+deb11u2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libx11/libx11-xcb-dev_1.7.2-1+deb11u2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libx11/libx11-xcb1_1.7.2-1+deb11u2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxau/libxau-dev_1.0.9-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxau/libxau6_1.0.9-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-dri2-0_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-dri3-0_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-dri3-dev_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-glx0-dev_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-glx0_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-present-dev_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-present0_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-randr0-dev_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-randr0_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-render0-dev_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-render0_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-shape0-dev_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-shape0_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-shm0-dev_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-shm0_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-sync-dev_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-sync1_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-xfixes0-dev_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-xfixes0_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-xinerama0_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-xinput0_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-xkb1_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb1-dev_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb1_1.14-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.5-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcomposite/libxcomposite1_0.4.5-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcrypt/libcrypt-dev_4.4.18-4_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcrypt/libcrypt1_4.4.18-4_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcursor/libxcursor-dev_1.2.0-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcursor/libxcursor1_1.2.0-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxdamage/libxdamage-dev_1.1.5-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxdamage/libxdamage1_1.1.5-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxext/libxext-dev_1.3.3-1.1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxext/libxext6_1.3.3-1.1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxfixes/libxfixes3_5.0.3-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxi/libxi-dev_1.7.10-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxi/libxi6_1.7.10-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxinerama/libxinerama1_1.1.4-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxkbcommon/libxkbcommon-dev_1.0.3-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxkbcommon/libxkbcommon-x11-0_1.0.3-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxkbcommon/libxkbcommon0_1.0.3-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxml2/libxml2-dev_2.9.10+dfsg-6.7+deb11u4_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxml2/libxml2-utils_2.9.10+dfsg-6.7+deb11u4_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxml2/libxml2_2.9.10+dfsg-6.7+deb11u4_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxshmfence/libxshmfence-dev_1.3-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxslt/libxslt1-dev_1.1.34-4+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxslt/libxslt1.1_1.1.34-4+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxss/libxss-dev_1.2.3-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxss/libxss1_1.2.3-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxt/libxt-dev_1.2.0-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxt/libxt6_1.2.0-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxtst/libxtst6_1.2.3-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libz/libzstd/libzstd1_1.4.8+dfsg-2.1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/make-dfsg/make_4.3-4.1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mako/python3-mako_1.1.3+ds1-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/markupsafe/python3-markupsafe_2.0.1-2~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/md4c/libmd4c0_0.4.7-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/media-types/media-types_4.0.0_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libegl-mesa0_20.3.5-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libegl1-mesa-dev_20.3.5-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libgbm-dev_20.3.5-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libgbm1_20.3.5-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libgl1-mesa-dev_20.3.5-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libgl1-mesa-dri_20.3.5-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libglapi-mesa_20.3.5-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libglx-mesa0_20.3.5-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/mesa-common-dev_20.3.5-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/minizip/libminizip-dev_1.1-8+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/minizip/libminizip1_1.1-8+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mpclib3/libmpc3_1.2.0-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mpdecimal/libmpdec3_2.5.1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mpfr4/libmpfr6_4.1.0-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mpg123/libmpg123-0_1.26.4-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mtdev/libmtdev-dev_1.1.6-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mtdev/libmtdev1_1.1.6-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/ncurses/libncurses-dev_6.2+20201114-2+deb11u2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/ncurses/libncurses6_6.2+20201114-2+deb11u2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/ncurses/libncursesw6_6.2+20201114-2+deb11u2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/ncurses/libtinfo6_6.2+20201114-2+deb11u2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/ncurses/ncurses-bin_6.2+20201114-2+deb11u2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nettle/libhogweed6_3.7.3-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nettle/libnettle8_3.7.3-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nettle/nettle-dev_3.7.3-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nghttp2/libnghttp2-14_1.43.0-1+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/norm/libnorm1_1.5.9+dfsg-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nspr/libnspr4-dev_4.29-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nspr/libnspr4_4.29-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nss/libnss3-dev_3.61-1+deb11u3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nss/libnss3_3.61-1+deb11u3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/numactl/libnuma1_2.0.12-1+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/ocl-icd/ocl-icd-libopencl1_2.2.14-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/openjpeg2/libopenjp2-7_2.4.0-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/openldap/libldap-2.4-2_2.4.57+dfsg-3+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/openssl/libssl-dev_1.1.1w-0+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/openssl/libssl1.1_1.1.1w-0+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/opus/libopus-dev_1.3.1-0.1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/opus/libopus0_1.3.1-0.1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/p11-kit/libp11-kit-dev_0.23.22-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/p11-kit/libp11-kit0_0.23.22-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pam/libpam-modules_1.4.0-9+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pam/libpam-runtime_1.4.0-9+deb11u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pam/libpam0g-dev_1.4.0-9+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pam/libpam0g_1.4.0-9+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/gir1.2-pango-1.0_1.46.2-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/libpango-1.0-0_1.46.2-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/libpango1.0-dev_1.46.2-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/libpangocairo-1.0-0_1.46.2-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/libpangoft2-1.0-0_1.46.2-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/libpangoxft-1.0-0_1.46.2-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/pango1.0-tools_1.46.2-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/patch/patch_2.7.6-7_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pci.ids/pci.ids_0.0~2021.02.08-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pciutils/libpci-dev_3.7.0-5_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pciutils/libpci3_3.7.0-5_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre2/libpcre2-16-0_10.36-2+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre2/libpcre2-32-0_10.36-2+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre2/libpcre2-8-0_10.36-2+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre2/libpcre2-dev_10.36-2+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre2/libpcre2-posix2_10.36-2+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre3/libpcre16-3_8.39-13_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre3/libpcre3-dev_8.39-13_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre3/libpcre32-3_8.39-13_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre3/libpcre3_8.39-13_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre3/libpcrecpp0v5_8.39-13_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/perl/libperl5.32_5.32.1-4+deb11u3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/perl/perl-base_5.32.1-4+deb11u3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/perl/perl-modules-5.32_5.32.1-4+deb11u3_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/perl/perl_5.32.1-4+deb11u3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pipewire/libpipewire-0.3-0_0.3.65-2~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pipewire/libpipewire-0.3-dev_0.3.65-2~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pipewire/libspa-0.2-dev_0.3.65-2~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pipewire/libspa-0.2-modules_0.3.65-2~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pixman/libpixman-1-0_0.40.0-1.1~deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pixman/libpixman-1-dev_0.40.0-1.1~deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pkg-config/pkg-config_0.29.2-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pulseaudio/libpulse-dev_14.2-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pulseaudio/libpulse-mainloop-glib0_14.2-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pulseaudio/libpulse0_14.2-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python-markdown/python3-markdown_3.3.4-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3-defaults/libpython3-stdlib_3.9.2-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3-defaults/python3_3.9.2-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3-stdlib-extensions/python3-distutils_3.9.2-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3-stdlib-extensions/python3-lib2to3_3.9.2-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3.9/libpython3.9-minimal_3.9.2-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3.9/libpython3.9-stdlib_3.9.2-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3.9/python3.9-minimal_3.9.2-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3.9/python3.9_3.9.2-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6concurrent6_6.4.2+dfsg-11~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6core6_6.4.2+dfsg-11~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6dbus6_6.4.2+dfsg-11~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6gui6_6.4.2+dfsg-11~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6network6_6.4.2+dfsg-11~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6opengl6_6.4.2+dfsg-11~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6openglwidgets6_6.4.2+dfsg-11~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6printsupport6_6.4.2+dfsg-11~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6sql6_6.4.2+dfsg-11~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6test6_6.4.2+dfsg-11~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6widgets6_6.4.2+dfsg-11~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6xml6_6.4.2+dfsg-11~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/qmake6-bin_6.4.2+dfsg-11~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/qmake6_6.4.2+dfsg-11~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/qt6-base-dev-tools_6.4.2+dfsg-11~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/qt6-base-dev_6.4.2+dfsg-11~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/qt6-qpa-plugins_6.4.2+dfsg-11~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5concurrent5_5.15.2+dfsg-9+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5core5a_5.15.2+dfsg-9+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5dbus5_5.15.2+dfsg-9+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5gui5_5.15.2+dfsg-9+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5network5_5.15.2+dfsg-9+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5printsupport5_5.15.2+dfsg-9+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5sql5_5.15.2+dfsg-9+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5test5_5.15.2+dfsg-9+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5widgets5_5.15.2+dfsg-9+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5xml5_5.15.2+dfsg-9+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/qt5-qmake-bin_5.15.2+dfsg-9+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/qt5-qmake_5.15.2+dfsg-9+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/qtbase5-dev-tools_5.15.2+dfsg-9+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/qtbase5-dev_5.15.2+dfsg-9+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtchooser/qtchooser_66-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/r/re2/libre2-9_20210201+dfsg-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/r/re2/libre2-dev_20210201+dfsg-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/r/readline/libreadline8_8.1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/r/readline/readline-common_8.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/r/rtmpdump/librtmp1_2.4+20151223.gitfa8646d.1-2+b2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/sensible-utils/sensible-utils_0.0.14_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/setuptools/python3-pkg-resources_66.1.1-1~bpo11+1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/shadow/login_4.8.1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/shadow/passwd_4.8.1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/shared-mime-info/shared-mime-info_2.0-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/shine/libshine3_3.1.1-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/snappy/libsnappy-dev_1.1.8-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/snappy/libsnappy1v5_1.1.8-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/speech-dispatcher/libspeechd-dev_0.11.4-2~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/speech-dispatcher/libspeechd2_0.11.4-2~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/speex/libspeex1_1.2~rc1.2-1.1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/sqlite3/libsqlite3-0_3.34.1-3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/srt/libsrt1.4-gnutls_1.4.2-1.3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/libpam-systemd_252.29-1~deb12u1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/libsystemd-dev_252.29-1~deb12u1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/libsystemd-shared_252.29-1~deb12u1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/libsystemd0_252.29-1~deb12u1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/libudev-dev_252.29-1~deb12u1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/libudev1_252.29-1~deb12u1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/systemd-sysv_252.29-1~deb12u1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/systemd_252.29-1~deb12u1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tar/tar_1.34+dfsg-1+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tcp-wrappers/libwrap0_7.6.q-31_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tiff/libtiff-dev_4.2.0-1+deb11u5_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tiff/libtiff5_4.2.0-1+deb11u5_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tiff/libtiff6_4.5.0-6+deb12u2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tiff/libtiffxx5_4.2.0-1+deb11u5_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tslib/libts0_1.22-1+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/twolame/libtwolame0_0.4.0-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tzdata/tzdata_2021a-1+deb11u11_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/ucf/ucf_3.0043_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/unbound/libunbound8_1.17.1-2~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/libblkid-dev_2.36.1-8+deb11u2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/libblkid1_2.36.1-8+deb11u2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/libfdisk1_2.36.1-8+deb11u2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/libmount-dev_2.36.1-8+deb11u2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/libmount1_2.36.1-8+deb11u2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/libuuid1_2.36.1-8+deb11u2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/mount_2.36.1-8+deb11u2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/util-linux_2.36.1-8+deb11u2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/uuid-dev_2.36.1-8+deb11u2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/v/valgrind/valgrind_3.16.1-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/v/vulkan-loader/libvulkan-dev_1.3.224.0-1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/v/vulkan-loader/libvulkan1_1.3.224.0-1~bpo11+1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wavpack/libwavpack1_5.4.0-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland-protocols/wayland-protocols_1.20-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-bin_1.18.0-2~exp1.1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-client0_1.18.0-2~exp1.1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-cursor0_1.18.0-2~exp1.1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-dev_1.18.0-2~exp1.1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-egl-backend-dev_1.18.0-2~exp1.1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-egl1_1.18.0-2~exp1.1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-server0_1.18.0-2~exp1.1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/webrtc-audio-processing/libwebrtc-audio-processing1_0.3-1+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/x264/libx264-160_0.160.3011+gitcde9a93-2.1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/x265/libx265-192_3.4-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util-image/libxcb-image0-dev_0.4.0-1+b3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util-image/libxcb-image0_0.4.0-1+b3_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util-keysyms/libxcb-keysyms1_0.4.0-1+b2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0-dev_0.3.9-1+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0_0.3.9-1+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util-wm/libxcb-icccm4_0.4.1-1.1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util/libxcb-util-dev_0.4.0-1+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util/libxcb-util1_0.4.0-1+b1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xft/libxft-dev_2.3.2-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xft/libxft2_2.3.2-2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xkeyboard-config/xkb-data_2.29-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorg-sgml-doctools/xorg-sgml-doctools_1.11-1.1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorg/x11-common_7.7+22_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-core-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-input-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-randr-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-record-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-render-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-scrnsaver-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-xext-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-xf86vidmode-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-xinerama-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xtrans/xtrans-dev_1.4.0-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xvidcore/libxvidcore4_1.3.7-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xz-utils/liblzma-dev_5.2.5-2.1~deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xz-utils/liblzma5_5.2.5-2.1~deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xz-utils/xz-utils_5.2.5-2.1~deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/z/z3/libz3-4_4.8.10-1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/z/zeromq3/libzmq5_4.3.4-1+deb11u1_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-2+deb11u2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/z/zlib/zlib1g_1.2.11.dfsg-2+deb11u2_amd64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/z/zvbi/libzvbi-common_0.2.35-18_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/z/zvbi/libzvbi0_0.2.35-18_amd64.deb diff --git a/naiveproxy/src/build/linux/sysroot_scripts/generated_package_lists/bullseye.arm64 b/naiveproxy/src/build/linux/sysroot_scripts/generated_package_lists/bullseye.arm64 index a9290d4ad0..dc91af3448 100644 --- a/naiveproxy/src/build/linux/sysroot_scripts/generated_package_lists/bullseye.arm64 +++ b/naiveproxy/src/build/linux/sysroot_scripts/generated_package_lists/bullseye.arm64 @@ -1,471 +1,639 @@ -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/alsa-lib/libasound2-dev_1.2.4-1.1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/alsa-lib/libasound2_1.2.4-1.1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/aom/libaom0_1.0.0.errata1-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/aom/libaom3_3.6.0-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.38.0-4~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.38.0-4~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-core/libatspi2.0-0_2.44.1-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-core/libatspi2.0-dev_2.44.1-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/atk1.0/libatk1.0-0_2.38.0-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/atk1.0/libatk1.0-dev_2.38.0-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/attr/libattr1_2.4.48-6_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/audit/libaudit1_3.0-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/avahi/libavahi-client3_0.8-5+deb11u2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/avahi/libavahi-common3_0.8-5+deb11u2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/bluez/libbluetooth-dev_5.55-3.1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/bluez/libbluetooth3_5.55-3.1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/brotli/libbrotli-dev_1.0.9-2+b2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/brotli/libbrotli1_1.0.9-2+b2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/bzip2/libbz2-1.0_1.0.8-4_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo-gobject2_1.16.0-5_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo-script-interpreter2_1.16.0-5_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo2-dev_1.16.0-5_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo2_1.16.0-5_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/chromaprint/libchromaprint1_1.5.0-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cjson/libcjson1_1.7.14-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/codec2/libcodec2-0.9_0.9.2-4_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/codec2/libcodec2-1.0_1.0.5-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/colord/libcolord2_1.4.5-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcups2-dev_2.3.3op2-3+deb11u2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcups2_2.3.3op2-3+deb11u2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcupsimage2-dev_2.3.3op2-3+deb11u2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcupsimage2_2.3.3op2-3+deb11u2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/curl/libcurl3-gnutls_7.88.1-7~bpo11+2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/curl/libcurl4-gnutls-dev_7.88.1-7~bpo11+2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cyrus-sasl2/libsasl2-2_2.1.27+dfsg-2.1+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dav1d/libdav1d4_0.7.1-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dav1d/libdav1d6_1.0.0-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.8_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-6_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dbus/libdbus-1-3_1.12.24-0+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dbus/libdbus-1-dev_1.12.24-0+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/double-conversion/libdouble-conversion3_3.1.5-6.1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/e2fsprogs/comerr-dev_2.1-1.46.6-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/e2fsprogs/libcom-err2_1.46.6-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/elfutils/libelf-dev_0.187-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/elfutils/libelf1_0.187-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/expat/libexpat1-dev_2.2.10-2+deb11u5_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/expat/libexpat1_2.2.10-2+deb11u5_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavcodec-dev_4.3.5-0+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavcodec58_4.3.5-0+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavcodec59_5.1.3-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavformat-dev_4.3.5-0+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavformat59_5.1.3-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavutil-dev_4.3.5-0+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavutil56_4.3.5-0+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavutil57_5.1.3-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libswresample-dev_4.3.5-0+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libswresample3_4.3.5-0+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libswresample4_5.1.3-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/flac/libflac-dev_1.3.3-2+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/flac/libflac8_1.3.3-2+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fontconfig/libfontconfig-dev_2.13.1-4.2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fontconfig/libfontconfig1_2.13.1-4.2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/freetype/libfreetype-dev_2.10.4+dfsg-1+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/freetype/libfreetype6_2.10.4+dfsg-1+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fribidi/libfribidi-dev_1.0.8-2+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fribidi/libfribidi0_1.0.8-2+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/game-music-emu/libgme0_0.6.3-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libasan6_10.2.1-6_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libatomic1_10.2.1-6_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libgcc-10-dev_10.2.1-6_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libgcc-s1_10.2.1-6_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libgomp1_10.2.1-6_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libitm1_10.2.1-6_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/liblsan0_10.2.1-6_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libstdc++-10-dev_10.2.1-6_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libstdc++6_10.2.1-6_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libtsan0_10.2.1-6_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libubsan1_10.2.1-6_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-0_2.42.2+dfsg-1+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-dev_2.42.2+dfsg-1+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glib2.0/libglib2.0-0_2.66.8-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glib2.0/libglib2.0-dev_2.66.8-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glibc/libc6-dev_2.31-13+deb11u5_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glibc/libc6_2.31-13+deb11u5_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gmp/libgmp10_6.2.1+dfsg-1+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls-dane0_3.7.1-5+deb11u3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls-openssl27_3.7.1-5+deb11u3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls28-dev_3.7.1-5+deb11u3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls30_3.7.1-5+deb11u3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutlsxx28_3.7.1-5+deb11u3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphene/libgraphene-1.0-0_1.10.4+dfsg1-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphene/libgraphene-1.0-dev_1.10.4+dfsg1-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphite2/libgraphite2-3_1.3.14-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphite2/libgraphite2-dev_1.3.14-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.33-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk+3.0/libgtk-3-0_3.24.24-4+deb11u3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.24-4+deb11u3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk4/libgtk-4-1_4.8.3+ds-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk4/libgtk-4-dev_4.8.3+ds-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz-dev_2.7.4-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz-gobject0_2.7.4-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz-icu0_2.7.4-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz0b_2.7.4-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/highway/libhwy1_1.0.3-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git180724-3+b2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/i/icu/libicu67_67.1-7_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/jbigkit/libjbig-dev_2.1-3.1+b2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/jpeg-xl/libjxl0.7_0.7.0-10_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/json-glib/libjson-glib-1.0-0_1.6.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/keyutils/libkeyutils1_1.6.1-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/krb5-multidev_1.18.3-6+deb11u3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libgssapi-krb5-2_1.18.3-6+deb11u3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libgssrpc4_1.18.3-6+deb11u3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libk5crypto3_1.18.3-6+deb11u3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkadm5clnt-mit12_1.18.3-6+deb11u3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkadm5srv-mit12_1.18.3-6+deb11u3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkdb5-10_1.18.3-6+deb11u3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkrb5-3_1.18.3-6+deb11u3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkrb5-dev_1.18.3-6+deb11u3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkrb5support0_1.18.3-6+deb11u3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lame/libmp3lame0_3.100-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lcms2/liblcms2-2_2.12~rc1-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lerc/liblerc4_4.0.0+ds-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/linux/linux-libc-dev_6.1.20-2~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lz4/liblz4-1_1.9.3-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lzo2/liblzo2-2_2.10-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/liba/libasyncns/libasyncns0_0.8-6+b2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libb/libb2/libb2-1_0.98.1-1.1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libb/libbluray/libbluray2_1.2.1-4+deb11u2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libb/libbsd/libbsd0_0.11.3-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-2.2+b1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcap2/libcap-dev_2.44-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcap2/libcap2_2.44-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcloudproviders/libcloudproviders0_0.3.0-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdatrie/libdatrie-dev_0.2.13-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdatrie/libdatrie1_0.2.13-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr492+repack1-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr492+repack1-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_18.10.20180917~bzr492+repack1-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_18.10.20180917~bzr492+repack1-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdeflate/libdeflate-dev_1.10-2~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdeflate/libdeflate0_1.10-2~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.104-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-dev_2.4.104-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-etnaviv1_2.4.104-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-freedreno1_2.4.104-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-nouveau2_2.4.104-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-radeon1_2.4.104-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-tegra0_2.4.104-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm2_2.4.104-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libepoxy/libepoxy-dev_1.5.8-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libepoxy/libepoxy0_1.5.8-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libevdev/libevdev-dev_1.11.0+dfsg-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libevdev/libevdev2_1.11.0+dfsg-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libevent/libevent-2.1-7_2.1.12-stable-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libf/libffi/libffi-dev_3.3-6_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libf/libffi/libffi7_3.3-6_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.7-6_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgcrypt20/libgcrypt20_1.8.7-6_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libegl-dev_1.3.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libegl1_1.3.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgl-dev_1.3.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgl1_1.3.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgles-dev_1.3.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgles1_1.3.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgles2_1.3.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglvnd-dev_1.3.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglvnd0_1.3.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglx-dev_1.3.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglx0_1.3.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libopengl0_1.3.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgpg-error/libgpg-error-dev_1.38-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgpg-error/libgpg-error0_1.38-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgsm/libgsm1_1.0.18-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgudev/libgudev-1.0-0_234-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libice/libice6_1.0.10-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libidl/libidl-2-0_0.8.14-4+b12_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libidn/libidn11_1.33-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libidn2/libidn2-0_2.3.0-5_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libinput/libinput-dev_1.16.4-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libinput/libinput10_1.16.4-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_2.0.6-4_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_2.0.6-4_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.9.4-4_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjsoncpp/libjsoncpp24_1.9.4-4_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libm/libmd/libmd0_1.0.3-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libn/libnsl/libnsl2_1.3.0-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b10_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libo/libogg/libogg-dev_1.3.4-0.1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libo/libogg/libogg0_1.3.4-0.1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libo/libopenmpt/libopenmpt0_0.4.11-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpciaccess/libpciaccess0_0.16-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpgm/libpgm-5.3-0_5.3.128~dfsg-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpng1.6/libpng-dev_1.6.37-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpng1.6/libpng16-16_1.6.37-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libproxy/libproxy1v5_0.4.17-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpsl/libpsl5_0.21.0-1.2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.4-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libr/librabbitmq/librabbitmq4_0.10.0-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libr/librest/librest-0.7-0_0.8.1-1.1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libr/librist/librist4_0.2.7+dfsg-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libr/librsvg/librsvg2-2_2.50.3+dfsg-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libselinux/libselinux1-dev_3.1-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libselinux/libselinux1_3.1-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsepol/libsepol1-dev_3.1-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsepol/libsepol1_3.1-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsm/libsm6_1.2.3-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsndfile/libsndfile1_1.0.31-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsodium/libsodium23_1.0.18-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.72.0-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsoup2.4/libsoup2.4-1_2.72.0-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsoxr/libsoxr0_0.1.3-4_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libssh/libssh-gcrypt-4_0.9.5-1+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libssh2/libssh2-1_1.9.0-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtasn1-6/libtasn1-6_4.16.0-2+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libthai/libthai-dev_0.1.28-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libthai/libthai0_0.1.28-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtheora/libtheora0_1.1.1+dfsg.1-15_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtirpc/libtirpc3_1.3.1-1+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtool/libltdl7_2.4.6-15_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libudfread/libudfread0_1.1.1-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libunistring/libunistring2_0.9.10-4_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libutempter/libutempter-dev_1.2.1-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libutempter/libutempter0_1.2.1-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-dev_2.17.0-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-drm2_2.17.0-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-glx2_2.17.0-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-wayland2_2.17.0-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-x11-2_2.17.0-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva2_2.17.0-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvdpau/libvdpau1_1.4-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvorbis/libvorbis0a_1.3.7-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvorbis/libvorbisenc2_1.3.7-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvorbis/libvorbisfile3_1.3.7-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvpx/libvpx-dev_1.9.0-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvpx/libvpx6_1.9.0-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvpx/libvpx7_1.12.0-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwacom/libwacom2_1.8-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebp-dev_0.6.1-2.1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebp6_0.6.1-2.1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebp7_1.2.4-0.2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2.1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebpmux3_0.6.1-2.1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-6_1.7.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-dev_1.7.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-xcb-dev_1.7.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-xcb1_1.7.2-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxau/libxau-dev_1.0.9-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxau/libxau6_1.0.9-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri2-0_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri3-0_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri3-dev_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-glx0-dev_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-glx0_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-present-dev_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-present0_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-randr0-dev_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-randr0_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-render0-dev_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-render0_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shape0-dev_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shape0_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shm0-dev_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shm0_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-sync-dev_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-sync1_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xfixes0-dev_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xfixes0_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xinerama0_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xinput0_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xkb1_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb1-dev_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb1_1.14-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.5-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcomposite/libxcomposite1_0.4.5-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcrypt/libcrypt-dev_4.4.18-4_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcrypt/libcrypt1_4.4.18-4_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcursor/libxcursor-dev_1.2.0-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcursor/libxcursor1_1.2.0-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdamage/libxdamage-dev_1.1.5-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdamage/libxdamage1_1.1.5-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxext/libxext-dev_1.3.3-1.1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxext/libxext6_1.3.3-1.1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxfixes/libxfixes3_5.0.3-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxi/libxi-dev_1.7.10-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxi/libxi6_1.7.10-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxinerama/libxinerama1_1.1.4-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxkbcommon/libxkbcommon-dev_1.0.3-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxkbcommon/libxkbcommon-x11-0_1.0.3-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxkbcommon/libxkbcommon0_1.0.3-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxml2/libxml2-dev_2.9.10+dfsg-6.7+deb11u4_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxml2/libxml2_2.9.10+dfsg-6.7+deb11u4_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxshmfence/libxshmfence-dev_1.3-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxslt/libxslt1-dev_1.1.34-4+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxslt/libxslt1.1_1.1.34-4+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxss/libxss-dev_1.2.3-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxss/libxss1_1.2.3-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxt/libxt-dev_1.2.0-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxt/libxt6_1.2.0-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxtst/libxtst6_1.2.3-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libz/libzstd/libzstd1_1.4.8+dfsg-2.1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mbedtls/libmbedcrypto7_2.28.3-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/md4c/libmd4c0_0.4.7-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libegl1-mesa-dev_20.3.5-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libegl1-mesa_20.3.5-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgbm-dev_20.3.5-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgbm1_20.3.5-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgl1-mesa-dev_20.3.5-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgl1-mesa-glx_20.3.5-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libglapi-mesa_20.3.5-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libwayland-egl1-mesa_20.3.5-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/mesa-common-dev_20.3.5-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/minizip/libminizip-dev_1.1-8+b1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/minizip/libminizip1_1.1-8+b1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mpg123/libmpg123-0_1.26.4-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mtdev/libmtdev1_1.1.6-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libncurses-dev_6.2+20201114-2+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libncurses6_6.2+20201114-2+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libncursesw6_6.2+20201114-2+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libtinfo6_6.2+20201114-2+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nettle/libhogweed6_3.7.3-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nettle/libnettle8_3.7.3-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nghttp2/libnghttp2-14_1.43.0-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/norm/libnorm1_1.5.9+dfsg-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nspr/libnspr4-dev_4.29-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nspr/libnspr4_4.29-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nss/libnss3-dev_3.61-1+deb11u3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nss/libnss3_3.61-1+deb11u3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/numactl/libnuma1_2.0.12-1+b1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/ocl-icd/ocl-icd-libopencl1_2.2.14-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openjpeg2/libopenjp2-7_2.4.0-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openldap/libldap-2.4-2_2.4.59+dfsg-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openssl/libssl-dev_1.1.1n-0+deb11u4_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openssl/libssl1.1_1.1.1n-0+deb11u4_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/opus/libopus-dev_1.3.1-0.1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/opus/libopus0_1.3.1-0.1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/p11-kit/libp11-kit0_0.23.22-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pam/libpam0g-dev_1.4.0-9+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pam/libpam0g_1.4.0-9+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpango-1.0-0_1.46.2-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpango1.0-dev_1.46.2-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpangocairo-1.0-0_1.46.2-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpangoft2-1.0-0_1.46.2-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpangoxft-1.0-0_1.46.2-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5.1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pciutils/libpci-dev_3.7.0-5_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pciutils/libpci3_3.7.0-5_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-16-0_10.36-2+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-32-0_10.36-2+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-8-0_10.36-2+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-dev_10.36-2+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-posix2_10.36-2+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre16-3_8.39-13_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre3-dev_8.39-13_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre32-3_8.39-13_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre3_8.39-13_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcrecpp0v5_8.39-13_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pipewire/libpipewire-0.3-0_0.3.65-2~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pipewire/libpipewire-0.3-dev_0.3.65-2~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pipewire/libspa-0.2-dev_0.3.65-2~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pixman/libpixman-1-0_0.40.0-1.1~deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pixman/libpixman-1-dev_0.40.0-1.1~deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pulseaudio/libpulse-dev_14.2-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pulseaudio/libpulse-mainloop-glib0_14.2-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pulseaudio/libpulse0_14.2-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6concurrent6_6.4.2+dfsg-10~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6core6_6.4.2+dfsg-10~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6dbus6_6.4.2+dfsg-10~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6gui6_6.4.2+dfsg-10~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6network6_6.4.2+dfsg-10~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6opengl6_6.4.2+dfsg-10~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6openglwidgets6_6.4.2+dfsg-10~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6printsupport6_6.4.2+dfsg-10~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6sql6_6.4.2+dfsg-10~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6test6_6.4.2+dfsg-10~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6widgets6_6.4.2+dfsg-10~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6xml6_6.4.2+dfsg-10~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/qt6-base-dev-tools_6.4.2+dfsg-10~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/qt6-base-dev_6.4.2+dfsg-10~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5concurrent5_5.15.2+dfsg-9_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5core5a_5.15.2+dfsg-9_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5dbus5_5.15.2+dfsg-9_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5gui5_5.15.2+dfsg-9_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5network5_5.15.2+dfsg-9_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5printsupport5_5.15.2+dfsg-9_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5sql5_5.15.2+dfsg-9_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5test5_5.15.2+dfsg-9_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5widgets5_5.15.2+dfsg-9_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5xml5_5.15.2+dfsg-9_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/qtbase5-dev-tools_5.15.2+dfsg-9_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/qtbase5-dev_5.15.2+dfsg-9_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/re2/libre2-9_20210201+dfsg-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/re2/libre2-dev_20210201+dfsg-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/rtmpdump/librtmp1_2.4+20151223.gitfa8646d.1-2+b2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/rust-rav1e/librav1e0_0.5.1-6_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/shared-mime-info/shared-mime-info_2.0-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/shine/libshine3_3.1.1-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/snappy/libsnappy-dev_1.1.8-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/snappy/libsnappy1v5_1.1.8-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/speech-dispatcher/libspeechd-dev_0.11.4-2~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/speech-dispatcher/libspeechd2_0.11.4-2~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/speex/libspeex1_1.2~rc1.2-1.1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/sqlite3/libsqlite3-0_3.34.1-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/srt/libsrt1.5-gnutls_1.5.1-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/svt-av1/libsvtav1enc1_1.4.1+dfsg-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libsystemd-dev_252.5-2~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libsystemd0_252.5-2~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libudev-dev_252.5-2~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libudev1_252.5-2~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tcp-wrappers/libwrap0_7.6.q-31_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiff-dev_4.2.0-1+deb11u4_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiff5_4.2.0-1+deb11u4_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiff6_4.5.0-6_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiffxx5_4.2.0-1+deb11u4_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tslib/libts0_1.22-1+b1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/twolame/libtwolame0_0.4.0-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/unbound/libunbound8_1.17.1-2~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libblkid-dev_2.36.1-8+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libblkid1_2.36.1-8+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libmount-dev_2.36.1-8+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libmount1_2.36.1-8+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libuuid1_2.36.1-8+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/uuid-dev_2.36.1-8+deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/v/valgrind/valgrind_3.16.1-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/v/vulkan-loader/libvulkan-dev_1.3.224.0-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/v/vulkan-loader/libvulkan1_1.3.224.0-1~bpo11+1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wavpack/libwavpack1_5.4.0-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland-protocols/wayland-protocols_1.20-1_all.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-bin_1.18.0-2~exp1.1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-client0_1.18.0-2~exp1.1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-cursor0_1.18.0-2~exp1.1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-dev_1.18.0-2~exp1.1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-egl-backend-dev_1.18.0-2~exp1.1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-egl1_1.18.0-2~exp1.1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-server0_1.18.0-2~exp1.1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/x264/libx264-160_0.160.3011+gitcde9a93-2.1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/x264/libx264-164_0.164.3095+gitbaee400-3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/x265/libx265-192_3.4-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/x265/libx265-199_3.5-2+b1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-image/libxcb-image0-dev_0.4.0-1+b3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-image/libxcb-image0_0.4.0-1+b3_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-keysyms/libxcb-keysyms1_0.4.0-1+b2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0-dev_0.3.9-1+b1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0_0.3.9-1+b1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-wm/libxcb-icccm4_0.4.1-1.1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util/libxcb-util-dev_0.4.0-1+b1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util/libxcb-util1_0.4.0-1+b1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xft/libxft-dev_2.3.2-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xft/libxft2_2.3.2-2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xorgproto/x11proto-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xvidcore/libxvidcore4_1.3.7-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xz-utils/liblzma5_5.2.5-2.1~deb11u1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/z/zeromq3/libzmq5_4.3.4-1_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-2+deb11u2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/z/zlib/zlib1g_1.2.11.dfsg-2+deb11u2_arm64.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/z/zvbi/libzvbi0_0.2.35-18_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/acl/libacl1_2.2.53-10_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/adduser/adduser_3.118+deb11u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/adwaita-icon-theme/adwaita-icon-theme_3.38.0-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/alsa-lib/libasound2-data_1.2.4-1.1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/alsa-lib/libasound2-dev_1.2.4-1.1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/alsa-lib/libasound2_1.2.4-1.1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/aom/libaom0_1.0.0.errata1-3+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/apparmor/libapparmor1_2.13.6-10_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/argon2/libargon2-1_0~20171227-0.2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.38.0-4~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.38.0-4~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/at-spi2-core/gir1.2-atspi-2.0_2.44.1-1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/at-spi2-core/libatspi2.0-0_2.44.1-1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/at-spi2-core/libatspi2.0-dev_2.44.1-1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/atk1.0/gir1.2-atk-1.0_2.38.0-1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/atk1.0/libatk1.0-0_2.38.0-1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/atk1.0/libatk1.0-data_2.38.0-1~bpo11+1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/atk1.0/libatk1.0-dev_2.38.0-1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/audit/libaudit-common_3.0-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/audit/libaudit1_3.0-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/avahi/libavahi-client3_0.8-5+deb11u2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/avahi/libavahi-common-data_0.8-5+deb11u2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/avahi/libavahi-common3_0.8-5+deb11u2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/binutils/binutils-aarch64-linux-gnu_2.35.2-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/binutils/binutils-common_2.35.2-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/binutils/binutils_2.35.2-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/binutils/libbinutils_2.35.2-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/binutils/libctf-nobfd0_2.35.2-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/binutils/libctf0_2.35.2-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/bluez/libbluetooth-dev_5.55-3.1+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/bluez/libbluetooth3_5.55-3.1+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/brotli/libbrotli-dev_1.0.9-2+b2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/brotli/libbrotli1_1.0.9-2+b2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/build-essential/build-essential_12.9_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/bzip2/bzip2_1.0.8-4_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/bzip2/libbz2-1.0_1.0.8-4_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cairo/libcairo-gobject2_1.16.0-5_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cairo/libcairo-script-interpreter2_1.16.0-5_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cairo/libcairo2-dev_1.16.0-5_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cairo/libcairo2_1.16.0-5_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/chromaprint/libchromaprint1_1.5.0-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/codec2/libcodec2-0.9_0.9.2-4_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/colord/gir1.2-colord-1.0_1.4.5-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/colord/libcolord-dev_1.4.5-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/colord/libcolord2_1.4.5-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/coreutils/coreutils_8.32-4_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cryptsetup/libcryptsetup12_2.3.7-1+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cups/libcups2-dev_2.3.3op2-3+deb11u8_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cups/libcups2_2.3.3op2-3+deb11u8_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cups/libcupsimage2-dev_2.3.3op2-3+deb11u8_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cups/libcupsimage2_2.3.3op2-3+deb11u8_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/curl/libcurl3-gnutls_7.88.1-10+deb12u6~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/curl/libcurl4-gnutls-dev_7.88.1-10+deb12u6~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cyrus-sasl2/libsasl2-2_2.1.27+dfsg-2.1+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cyrus-sasl2/libsasl2-modules-db_2.1.27+dfsg-2.1+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dav1d/libdav1d4_0.7.1-3+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.8_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/dbus-bin_1.14.10-1~deb12u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/dbus-daemon_1.14.10-1~deb12u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/dbus-session-bus-common_1.14.10-1~deb12u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/dbus-system-bus-common_1.14.10-1~deb12u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/dbus-user-session_1.14.10-1~deb12u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/dbus_1.14.10-1~deb12u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/libdbus-1-3_1.12.28-0+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/libdbus-1-dev_1.12.28-0+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dconf/dconf-gsettings-backend_0.38.0-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dconf/dconf-service_0.38.0-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dconf/libdconf1_0.38.0-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/debconf/debconf_1.5.77_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/double-conversion/libdouble-conversion3_3.1.5-6.1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dpkg/dpkg-dev_1.20.13_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dpkg/dpkg_1.20.13_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dpkg/libdpkg-perl_1.20.13_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/e/e2fsprogs/comerr-dev_2.1-1.46.6-1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/e/e2fsprogs/libcom-err2_1.46.6-1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/e/elfutils/libelf-dev_0.187-1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/e/elfutils/libelf1_0.187-1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/e/expat/libexpat1-dev_2.2.10-2+deb11u5_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/e/expat/libexpat1_2.2.10-2+deb11u5_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libavcodec-dev_4.3.7-0+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libavcodec58_4.3.7-0+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libavformat-dev_4.3.7-0+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libavformat58_4.3.7-0+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libavutil-dev_4.3.7-0+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libavutil56_4.3.7-0+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libswresample-dev_4.3.7-0+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libswresample3_4.3.7-0+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/flac/libflac-dev_1.3.3-2+deb11u2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/flac/libflac8_1.3.3-2+deb11u2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fontconfig/fontconfig-config_2.13.1-4.2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fontconfig/fontconfig_2.13.1-4.2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fontconfig/libfontconfig-dev_2.13.1-4.2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fontconfig/libfontconfig1-dev_2.13.1-4.2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fontconfig/libfontconfig1_2.13.1-4.2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fonts-dejavu/fonts-dejavu-core_2.37-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/freetype/libfreetype-dev_2.10.4+dfsg-1+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/freetype/libfreetype6-dev_2.10.4+dfsg-1+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/freetype/libfreetype6_2.10.4+dfsg-1+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fribidi/libfribidi-dev_1.0.8-2+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fribidi/libfribidi0_1.0.8-2+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/game-music-emu/libgme0_0.6.3-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/cpp-10_10.2.1-6_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/g++-10_10.2.1-6_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/gcc-10-base_10.2.1-6_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/gcc-10_10.2.1-6_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libasan6_10.2.1-6_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libatomic1_10.2.1-6_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libcc1-0_10.2.1-6_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libgcc-10-dev_10.2.1-6_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libgcc-s1_10.2.1-6_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libgomp1_10.2.1-6_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libitm1_10.2.1-6_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/liblsan0_10.2.1-6_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libstdc++-10-dev_10.2.1-6_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libstdc++6_10.2.1-6_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libtsan0_10.2.1-6_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libubsan1_10.2.1-6_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-defaults/cpp_10.2.1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-defaults/g++_10.2.1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-defaults/gcc_10.2.1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdbm/libgdbm-compat4_1.19-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdbm/libgdbm6_1.19-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdk-pixbuf/gir1.2-gdkpixbuf-2.0_2.42.2+dfsg-1+deb11u2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-0_2.42.2+dfsg-1+deb11u2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-dev_2.42.2+dfsg-1+deb11u2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-bin_2.42.2+dfsg-1+deb11u2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-common_2.42.2+dfsg-1+deb11u2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib-networking/glib-networking-common_2.66.0-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib-networking/glib-networking-services_2.66.0-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib-networking/glib-networking_2.66.0-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib2.0/libglib2.0-0_2.66.8-1+deb11u4_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib2.0/libglib2.0-bin_2.66.8-1+deb11u4_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib2.0/libglib2.0-data_2.66.8-1+deb11u4_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib2.0/libglib2.0-dev-bin_2.66.8-1+deb11u4_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib2.0/libglib2.0-dev_2.66.8-1+deb11u4_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glibc/libc-dev-bin_2.31-13+deb11u5_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glibc/libc6-dbg_2.31-13+deb11u5_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glibc/libc6-dev_2.31-13+deb11u11_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glibc/libc6-dev_2.31-13+deb11u5_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glibc/libc6_2.31-13+deb11u5_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gmp/libgmp-dev_6.2.1+dfsg-1+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gmp/libgmp10_6.2.1+dfsg-1+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gmp/libgmpxx4ldbl_6.2.1+dfsg-1+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gnutls28/libgnutls-dane0_3.7.1-5+deb11u5_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gnutls28/libgnutls-openssl27_3.7.1-5+deb11u5_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gnutls28/libgnutls28-dev_3.7.1-5+deb11u5_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gnutls28/libgnutls30_3.7.1-5+deb11u5_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gnutls28/libgnutlsxx28_3.7.1-5+deb11u5_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gobject-introspection/gir1.2-freedesktop_1.66.1-1+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gobject-introspection/gir1.2-glib-2.0_1.66.1-1+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gobject-introspection/gobject-introspection_1.66.1-1+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gobject-introspection/libgirepository-1.0-1_1.66.1-1+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gobject-introspection/libgirepository1.0-dev_1.66.1-1+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/graphene/gir1.2-graphene-1.0_1.10.4+dfsg1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/graphene/libgraphene-1.0-0_1.10.4+dfsg1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/graphene/libgraphene-1.0-dev_1.10.4+dfsg1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/graphite2/libgraphite2-3_1.3.14-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/graphite2/libgraphite2-dev_1.3.14-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gsettings-desktop-schemas/gsettings-desktop-schemas_3.38.0-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+2.0/gir1.2-gtk-2.0_2.24.33-2+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.33-2+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+2.0/libgtk2.0-common_2.24.33-2+deb11u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+2.0/libgtk2.0-dev_2.24.33-2+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+3.0/gir1.2-gtk-3.0_3.24.24-4+deb11u4_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+3.0/gtk-update-icon-cache_3.24.24-4+deb11u4_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+3.0/libgtk-3-0_3.24.24-4+deb11u4_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+3.0/libgtk-3-common_3.24.24-4+deb11u4_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.24-4+deb11u4_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk4/gir1.2-gtk-4.0_4.8.3+ds-2+deb12u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk4/libgtk-4-1_4.8.3+ds-2+deb12u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk4/libgtk-4-common_4.8.3+ds-2+deb12u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk4/libgtk-4-dev_4.8.3+ds-2+deb12u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/h/harfbuzz/gir1.2-harfbuzz-0.0_2.7.4-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/h/harfbuzz/libharfbuzz-dev_2.7.4-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/h/harfbuzz/libharfbuzz-gobject0_2.7.4-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/h/harfbuzz/libharfbuzz-icu0_2.7.4-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/h/harfbuzz/libharfbuzz0b_2.7.4-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/h/hicolor-icon-theme/hicolor-icon-theme_0.17-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/i/icu/icu-devtools_67.1-7_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/i/icu/libicu-dev_67.1-7_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/i/icu/libicu67_67.1-7_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/i/iptables/libip4tc2_1.8.7-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/i/isl/libisl23_0.23-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/j/jbigkit/libjbig-dev_2.1-3.1+b2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/j/json-c/libjson-c5_0.15-2+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/j/json-glib/libjson-glib-1.0-0_1.6.2-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/j/json-glib/libjson-glib-1.0-common_1.6.2-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/keyutils/libkeyutils1_1.6.1-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/kmod/libkmod2_28-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/krb5-multidev_1.18.3-6+deb11u5_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libgssapi-krb5-2_1.18.3-6+deb11u5_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libgssrpc4_1.18.3-6+deb11u5_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libk5crypto3_1.18.3-6+deb11u5_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libkadm5clnt-mit12_1.18.3-6+deb11u5_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libkadm5srv-mit12_1.18.3-6+deb11u5_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libkdb5-10_1.18.3-6+deb11u5_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libkrb5-3_1.18.3-6+deb11u5_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libkrb5-dev_1.18.3-6+deb11u5_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libkrb5support0_1.18.3-6+deb11u5_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lame/libmp3lame0_3.100-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lcms2/liblcms2-2_2.12~rc1-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lcms2/liblcms2-dev_2.12~rc1-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lerc/liblerc4_4.0.0+ds-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/linux/linux-libc-dev_6.1.94-1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/llvm-toolchain-11/libllvm11_11.0.1-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lm-sensors/libsensors-config_3.6.0-7_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lm-sensors/libsensors5_3.6.0-7_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lsb/lsb-base_11.1.0_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lvm2/dmsetup_1.02.175-2.1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lvm2/libdevmapper1.02.1_1.02.175-2.1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lz4/liblz4-1_1.9.3-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lzo2/liblzo2-2_2.10-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/liba/libasyncns/libasyncns0_0.8-6+b2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libb/libb2/libb2-1_0.98.1-1.1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libb/libbluray/libbluray2_1.2.1-4+deb11u2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libb/libbsd/libbsd0_0.11.3-1+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-2.2+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libc/libcap2/libcap-dev_2.44-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libc/libcap2/libcap2_2.44-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libc/libcloudproviders/libcloudproviders0_0.3.0-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdatrie/libdatrie-dev_0.2.13-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdatrie/libdatrie1_0.2.13-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdbusmenu/gir1.2-dbusmenu-glib-0.4_18.10.20180917~bzr492+repack1-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr492+repack1-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr492+repack1-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdeflate/libdeflate-dev_1.10-2~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdeflate/libdeflate0_1.10-2~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.104-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-common_2.4.104-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-dev_2.4.104-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-etnaviv1_2.4.104-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-freedreno1_2.4.104-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-nouveau2_2.4.104-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-radeon1_2.4.104-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-tegra0_2.4.104-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm2_2.4.104-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libe/libedit/libedit2_3.1-20191231-2+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libe/libepoxy/libepoxy-dev_1.5.8-1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libe/libepoxy/libepoxy0_1.5.8-1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libe/libevdev/libevdev-dev_1.11.0+dfsg-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libe/libevdev/libevdev2_1.11.0+dfsg-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libe/libevent/libevent-2.1-7_2.1.12-stable-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libf/libffi/libffi-dev_3.3-6_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libf/libffi/libffi7_3.3-6_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.7-6_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgcrypt20/libgcrypt20_1.8.7-6_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglu/libglu1-mesa-dev_9.0.1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglu/libglu1-mesa_9.0.1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libegl-dev_1.3.2-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libegl1_1.3.2-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libgl-dev_1.3.2-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libgl1_1.3.2-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libgles-dev_1.3.2-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libgles1_1.3.2-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libgles2_1.3.2-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libglvnd-dev_1.3.2-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libglvnd0_1.3.2-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libglx-dev_1.3.2-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libglx0_1.3.2-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libopengl-dev_1.3.2-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libopengl0_1.3.2-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgpg-error/libgpg-error-dev_1.38-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgpg-error/libgpg-error0_1.38-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgsm/libgsm1_1.0.18-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgudev/gir1.2-gudev-1.0_234-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgudev/libgudev-1.0-0_234-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgudev/libgudev-1.0-dev_234-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libice/libice-dev_1.0.10-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libice/libice6_1.0.10-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libidn2/libidn2-0_2.3.0-5_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libidn2/libidn2-dev_2.3.0-5_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libinput/libinput-bin_1.16.4-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libinput/libinput-dev_1.16.4-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libinput/libinput10_1.16.4-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libj/libjpeg-turbo/libjpeg-dev_2.0.6-4_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_2.0.6-4_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_2.0.6-4_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.9.4-4_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libj/libjsoncpp/libjsoncpp24_1.9.4-4_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libm/libmd/libmd0_1.0.3-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libn/libnsl/libnsl-dev_1.3.0-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libn/libnsl/libnsl2_1.3.0-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libo/libogg/libogg-dev_1.3.4-0.1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libo/libogg/libogg0_1.3.4-0.1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libo/libopenmpt/libopenmpt0_0.4.11-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libpgm/libpgm-5.3-0_5.3.128~dfsg-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libpng1.6/libpng-dev_1.6.37-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libpng1.6/libpng16-16_1.6.37-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libproxy/libproxy1v5_0.4.17-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libpsl/libpsl5_0.21.0-1.2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.4-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libr/librabbitmq/librabbitmq4_0.10.0-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libr/librest/librest-0.7-0_0.8.1-1.1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libr/librsvg/librsvg2-2_2.50.3+dfsg-1+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libseccomp/libseccomp2_2.5.1-1+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libselinux/libselinux1-dev_3.1-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libselinux/libselinux1_3.1-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsemanage/libsemanage-common_3.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsemanage/libsemanage1_3.1-1+b2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsepol/libsepol1-dev_3.1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsepol/libsepol1_3.1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libset-scalar-perl/libset-scalar-perl_1.29-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsm/libsm-dev_1.2.3-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsm/libsm6_1.2.3-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsndfile/libsndfile1_1.0.31-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsodium/libsodium23_1.0.18-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.72.0-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsoup2.4/libsoup2.4-1_2.72.0-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsoxr/libsoxr0_0.1.3-4_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libssh/libssh-gcrypt-4_0.9.8-0+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libssh2/libssh2-1_1.9.0-2+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libtasn1-6/libtasn1-6-dev_4.16.0-2+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libtasn1-6/libtasn1-6_4.16.0-2+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libthai/libthai-data_0.1.28-3_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libthai/libthai-dev_0.1.28-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libthai/libthai0_0.1.28-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libtheora/libtheora0_1.1.1+dfsg.1-15_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libtirpc/libtirpc-common_1.3.1-1+deb11u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libtirpc/libtirpc-dev_1.3.1-1+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libtirpc/libtirpc3_1.3.1-1+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libu/libudfread/libudfread0_1.1.1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libu/libunistring/libunistring2_0.9.10-4_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libu/libutempter/libutempter-dev_1.2.1-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libu/libutempter/libutempter0_1.2.1-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libva/libva-dev_2.17.0-1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libva/libva-drm2_2.17.0-1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libva/libva-glx2_2.17.0-1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libva/libva-wayland2_2.17.0-1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libva/libva-x11-2_2.17.0-1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libva/libva2_2.17.0-1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libvdpau/libvdpau1_1.4-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libvorbis/libvorbis0a_1.3.7-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libvorbis/libvorbisenc2_1.3.7-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libvorbis/libvorbisfile3_1.3.7-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libvpx/libvpx-dev_1.9.0-1+deb11u3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libvpx/libvpx6_1.9.0-1+deb11u3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwacom/libwacom-common_1.8-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwacom/libwacom-dev_1.8-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwacom/libwacom2_1.8-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwebp/libwebp-dev_0.6.1-2.1+deb11u2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwebp/libwebp6_0.6.1-2.1+deb11u2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwebp/libwebp7_1.2.4-0.2+deb12u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2.1+deb11u2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwebp/libwebpmux3_0.6.1-2.1+deb11u2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libx11/libx11-6_1.7.2-1+deb11u2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libx11/libx11-data_1.7.2-1+deb11u2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libx11/libx11-dev_1.7.2-1+deb11u2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libx11/libx11-xcb-dev_1.7.2-1+deb11u2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libx11/libx11-xcb1_1.7.2-1+deb11u2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxau/libxau-dev_1.0.9-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxau/libxau6_1.0.9-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-dri2-0_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-dri3-0_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-dri3-dev_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-glx0-dev_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-glx0_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-present-dev_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-present0_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-randr0-dev_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-randr0_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-render0-dev_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-render0_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-shape0-dev_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-shape0_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-shm0-dev_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-shm0_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-sync-dev_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-sync1_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-xfixes0-dev_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-xfixes0_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-xinerama0_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-xinput0_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-xkb1_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb1-dev_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb1_1.14-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.5-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcomposite/libxcomposite1_0.4.5-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcrypt/libcrypt-dev_4.4.18-4_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcrypt/libcrypt1_4.4.18-4_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcursor/libxcursor-dev_1.2.0-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcursor/libxcursor1_1.2.0-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxdamage/libxdamage-dev_1.1.5-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxdamage/libxdamage1_1.1.5-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxext/libxext-dev_1.3.3-1.1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxext/libxext6_1.3.3-1.1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxfixes/libxfixes3_5.0.3-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxi/libxi-dev_1.7.10-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxi/libxi6_1.7.10-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxinerama/libxinerama1_1.1.4-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxkbcommon/libxkbcommon-dev_1.0.3-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxkbcommon/libxkbcommon-x11-0_1.0.3-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxkbcommon/libxkbcommon0_1.0.3-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxml2/libxml2-dev_2.9.10+dfsg-6.7+deb11u4_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxml2/libxml2-utils_2.9.10+dfsg-6.7+deb11u4_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxml2/libxml2_2.9.10+dfsg-6.7+deb11u4_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxshmfence/libxshmfence-dev_1.3-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxslt/libxslt1-dev_1.1.34-4+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxslt/libxslt1.1_1.1.34-4+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxss/libxss-dev_1.2.3-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxss/libxss1_1.2.3-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxt/libxt-dev_1.2.0-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxt/libxt6_1.2.0-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxtst/libxtst6_1.2.3-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libz/libzstd/libzstd1_1.4.8+dfsg-2.1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/make-dfsg/make_4.3-4.1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mako/python3-mako_1.1.3+ds1-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/markupsafe/python3-markupsafe_2.0.1-2~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/md4c/libmd4c0_0.4.7-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/media-types/media-types_4.0.0_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libegl-mesa0_20.3.5-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libegl1-mesa-dev_20.3.5-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libgbm-dev_20.3.5-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libgbm1_20.3.5-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libgl1-mesa-dev_20.3.5-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libgl1-mesa-dri_20.3.5-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libglapi-mesa_20.3.5-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libglx-mesa0_20.3.5-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/mesa-common-dev_20.3.5-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/minizip/libminizip-dev_1.1-8+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/minizip/libminizip1_1.1-8+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mpclib3/libmpc3_1.2.0-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mpdecimal/libmpdec3_2.5.1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mpfr4/libmpfr6_4.1.0-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mpg123/libmpg123-0_1.26.4-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mtdev/libmtdev-dev_1.1.6-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mtdev/libmtdev1_1.1.6-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/ncurses/libncurses-dev_6.2+20201114-2+deb11u2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/ncurses/libncurses6_6.2+20201114-2+deb11u2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/ncurses/libncursesw6_6.2+20201114-2+deb11u2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/ncurses/libtinfo6_6.2+20201114-2+deb11u2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/ncurses/ncurses-bin_6.2+20201114-2+deb11u2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nettle/libhogweed6_3.7.3-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nettle/libnettle8_3.7.3-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nettle/nettle-dev_3.7.3-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nghttp2/libnghttp2-14_1.43.0-1+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/norm/libnorm1_1.5.9+dfsg-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nspr/libnspr4-dev_4.29-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nspr/libnspr4_4.29-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nss/libnss3-dev_3.61-1+deb11u3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nss/libnss3_3.61-1+deb11u3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/numactl/libnuma1_2.0.12-1+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/ocl-icd/ocl-icd-libopencl1_2.2.14-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/openjpeg2/libopenjp2-7_2.4.0-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/openldap/libldap-2.4-2_2.4.57+dfsg-3+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/openssl/libssl-dev_1.1.1w-0+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/openssl/libssl1.1_1.1.1w-0+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/opus/libopus-dev_1.3.1-0.1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/opus/libopus0_1.3.1-0.1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/p11-kit/libp11-kit-dev_0.23.22-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/p11-kit/libp11-kit0_0.23.22-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pam/libpam-modules_1.4.0-9+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pam/libpam-runtime_1.4.0-9+deb11u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pam/libpam0g-dev_1.4.0-9+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pam/libpam0g_1.4.0-9+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/gir1.2-pango-1.0_1.46.2-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/libpango-1.0-0_1.46.2-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/libpango1.0-dev_1.46.2-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/libpangocairo-1.0-0_1.46.2-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/libpangoft2-1.0-0_1.46.2-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/libpangoxft-1.0-0_1.46.2-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/pango1.0-tools_1.46.2-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/patch/patch_2.7.6-7_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pci.ids/pci.ids_0.0~2021.02.08-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pciutils/libpci-dev_3.7.0-5_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pciutils/libpci3_3.7.0-5_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre2/libpcre2-16-0_10.36-2+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre2/libpcre2-32-0_10.36-2+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre2/libpcre2-8-0_10.36-2+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre2/libpcre2-dev_10.36-2+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre2/libpcre2-posix2_10.36-2+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre3/libpcre16-3_8.39-13_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre3/libpcre3-dev_8.39-13_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre3/libpcre32-3_8.39-13_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre3/libpcre3_8.39-13_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre3/libpcrecpp0v5_8.39-13_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/perl/libperl5.32_5.32.1-4+deb11u3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/perl/perl-base_5.32.1-4+deb11u3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/perl/perl-modules-5.32_5.32.1-4+deb11u3_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/perl/perl_5.32.1-4+deb11u3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pipewire/libpipewire-0.3-0_0.3.65-2~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pipewire/libpipewire-0.3-dev_0.3.65-2~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pipewire/libspa-0.2-dev_0.3.65-2~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pipewire/libspa-0.2-modules_0.3.65-2~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pixman/libpixman-1-0_0.40.0-1.1~deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pixman/libpixman-1-dev_0.40.0-1.1~deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pkg-config/pkg-config_0.29.2-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pulseaudio/libpulse-dev_14.2-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pulseaudio/libpulse-mainloop-glib0_14.2-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pulseaudio/libpulse0_14.2-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python-markdown/python3-markdown_3.3.4-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3-defaults/libpython3-stdlib_3.9.2-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3-defaults/python3_3.9.2-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3-stdlib-extensions/python3-distutils_3.9.2-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3-stdlib-extensions/python3-lib2to3_3.9.2-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3.9/libpython3.9-minimal_3.9.2-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3.9/libpython3.9-stdlib_3.9.2-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3.9/python3.9-minimal_3.9.2-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3.9/python3.9_3.9.2-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6concurrent6_6.4.2+dfsg-11~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6core6_6.4.2+dfsg-11~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6dbus6_6.4.2+dfsg-11~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6gui6_6.4.2+dfsg-11~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6network6_6.4.2+dfsg-11~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6opengl6_6.4.2+dfsg-11~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6openglwidgets6_6.4.2+dfsg-11~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6printsupport6_6.4.2+dfsg-11~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6sql6_6.4.2+dfsg-11~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6test6_6.4.2+dfsg-11~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6widgets6_6.4.2+dfsg-11~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6xml6_6.4.2+dfsg-11~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/qmake6-bin_6.4.2+dfsg-11~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/qmake6_6.4.2+dfsg-11~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/qt6-base-dev-tools_6.4.2+dfsg-11~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/qt6-base-dev_6.4.2+dfsg-11~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/qt6-qpa-plugins_6.4.2+dfsg-11~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5concurrent5_5.15.2+dfsg-9+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5core5a_5.15.2+dfsg-9+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5dbus5_5.15.2+dfsg-9+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5gui5_5.15.2+dfsg-9+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5network5_5.15.2+dfsg-9+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5printsupport5_5.15.2+dfsg-9+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5sql5_5.15.2+dfsg-9+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5test5_5.15.2+dfsg-9+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5widgets5_5.15.2+dfsg-9+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5xml5_5.15.2+dfsg-9+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/qt5-qmake-bin_5.15.2+dfsg-9+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/qt5-qmake_5.15.2+dfsg-9+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/qtbase5-dev-tools_5.15.2+dfsg-9+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/qtbase5-dev_5.15.2+dfsg-9+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtchooser/qtchooser_66-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/r/re2/libre2-9_20210201+dfsg-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/r/re2/libre2-dev_20210201+dfsg-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/r/readline/libreadline8_8.1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/r/readline/readline-common_8.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/r/rtmpdump/librtmp1_2.4+20151223.gitfa8646d.1-2+b2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/sensible-utils/sensible-utils_0.0.14_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/setuptools/python3-pkg-resources_66.1.1-1~bpo11+1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/shadow/login_4.8.1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/shadow/passwd_4.8.1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/shared-mime-info/shared-mime-info_2.0-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/shine/libshine3_3.1.1-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/snappy/libsnappy-dev_1.1.8-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/snappy/libsnappy1v5_1.1.8-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/speech-dispatcher/libspeechd-dev_0.11.4-2~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/speech-dispatcher/libspeechd2_0.11.4-2~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/speex/libspeex1_1.2~rc1.2-1.1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/sqlite3/libsqlite3-0_3.34.1-3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/srt/libsrt1.4-gnutls_1.4.2-1.3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/libpam-systemd_252.29-1~deb12u1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/libsystemd-dev_252.29-1~deb12u1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/libsystemd-shared_252.29-1~deb12u1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/libsystemd0_252.29-1~deb12u1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/libudev-dev_252.29-1~deb12u1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/libudev1_252.29-1~deb12u1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/systemd-sysv_252.29-1~deb12u1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/systemd_252.29-1~deb12u1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tar/tar_1.34+dfsg-1+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tcp-wrappers/libwrap0_7.6.q-31_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tiff/libtiff-dev_4.2.0-1+deb11u5_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tiff/libtiff5_4.2.0-1+deb11u5_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tiff/libtiff6_4.5.0-6+deb12u2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tiff/libtiffxx5_4.2.0-1+deb11u5_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tslib/libts0_1.22-1+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/twolame/libtwolame0_0.4.0-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tzdata/tzdata_2021a-1+deb11u11_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/ucf/ucf_3.0043_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/unbound/libunbound8_1.17.1-2~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/libblkid-dev_2.36.1-8+deb11u2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/libblkid1_2.36.1-8+deb11u2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/libfdisk1_2.36.1-8+deb11u2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/libmount-dev_2.36.1-8+deb11u2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/libmount1_2.36.1-8+deb11u2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/libuuid1_2.36.1-8+deb11u2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/mount_2.36.1-8+deb11u2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/util-linux_2.36.1-8+deb11u2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/uuid-dev_2.36.1-8+deb11u2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/v/valgrind/valgrind_3.16.1-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/v/vulkan-loader/libvulkan-dev_1.3.224.0-1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/v/vulkan-loader/libvulkan1_1.3.224.0-1~bpo11+1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wavpack/libwavpack1_5.4.0-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland-protocols/wayland-protocols_1.20-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-bin_1.18.0-2~exp1.1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-client0_1.18.0-2~exp1.1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-cursor0_1.18.0-2~exp1.1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-dev_1.18.0-2~exp1.1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-egl-backend-dev_1.18.0-2~exp1.1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-egl1_1.18.0-2~exp1.1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-server0_1.18.0-2~exp1.1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/webrtc-audio-processing/libwebrtc-audio-processing1_0.3-1+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/x264/libx264-160_0.160.3011+gitcde9a93-2.1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/x265/libx265-192_3.4-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util-image/libxcb-image0-dev_0.4.0-1+b3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util-image/libxcb-image0_0.4.0-1+b3_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util-keysyms/libxcb-keysyms1_0.4.0-1+b2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0-dev_0.3.9-1+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0_0.3.9-1+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util-wm/libxcb-icccm4_0.4.1-1.1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util/libxcb-util-dev_0.4.0-1+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util/libxcb-util1_0.4.0-1+b1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xft/libxft-dev_2.3.2-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xft/libxft2_2.3.2-2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xkeyboard-config/xkb-data_2.29-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorg-sgml-doctools/xorg-sgml-doctools_1.11-1.1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorg/x11-common_7.7+22_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-core-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-input-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-randr-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-record-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-render-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-scrnsaver-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-xext-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-xf86vidmode-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-xinerama-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xtrans/xtrans-dev_1.4.0-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xvidcore/libxvidcore4_1.3.7-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xz-utils/liblzma-dev_5.2.5-2.1~deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xz-utils/liblzma5_5.2.5-2.1~deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xz-utils/xz-utils_5.2.5-2.1~deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/z/z3/libz3-4_4.8.10-1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/z/zeromq3/libzmq5_4.3.4-1+deb11u1_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-2+deb11u2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/z/zlib/zlib1g_1.2.11.dfsg-2+deb11u2_arm64.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/z/zvbi/libzvbi-common_0.2.35-18_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/z/zvbi/libzvbi0_0.2.35-18_arm64.deb diff --git a/naiveproxy/src/build/linux/sysroot_scripts/generated_package_lists/bullseye.armhf b/naiveproxy/src/build/linux/sysroot_scripts/generated_package_lists/bullseye.armhf index a6a1010ea6..5a46939111 100644 --- a/naiveproxy/src/build/linux/sysroot_scripts/generated_package_lists/bullseye.armhf +++ b/naiveproxy/src/build/linux/sysroot_scripts/generated_package_lists/bullseye.armhf @@ -1,470 +1,634 @@ -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/alsa-lib/libasound2-dev_1.2.4-1.1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/alsa-lib/libasound2_1.2.4-1.1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/aom/libaom0_1.0.0.errata1-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/aom/libaom3_3.6.0-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.38.0-4~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.38.0-4~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-core/libatspi2.0-0_2.44.1-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-core/libatspi2.0-dev_2.44.1-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/atk1.0/libatk1.0-0_2.38.0-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/atk1.0/libatk1.0-dev_2.38.0-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/attr/libattr1_2.4.48-6_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/audit/libaudit1_3.0-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/avahi/libavahi-client3_0.8-5+deb11u2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/avahi/libavahi-common3_0.8-5+deb11u2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/bluez/libbluetooth-dev_5.55-3.1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/bluez/libbluetooth3_5.55-3.1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/brotli/libbrotli-dev_1.0.9-2+b2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/brotli/libbrotli1_1.0.9-2+b2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/bzip2/libbz2-1.0_1.0.8-4_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo-gobject2_1.16.0-5_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo-script-interpreter2_1.16.0-5_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo2-dev_1.16.0-5_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo2_1.16.0-5_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/chromaprint/libchromaprint1_1.5.0-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cjson/libcjson1_1.7.14-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/codec2/libcodec2-0.9_0.9.2-4_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/codec2/libcodec2-1.0_1.0.5-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/colord/libcolord2_1.4.5-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcups2-dev_2.3.3op2-3+deb11u2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcups2_2.3.3op2-3+deb11u2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcupsimage2-dev_2.3.3op2-3+deb11u2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcupsimage2_2.3.3op2-3+deb11u2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/curl/libcurl3-gnutls_7.88.1-7~bpo11+2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/curl/libcurl4-gnutls-dev_7.88.1-7~bpo11+2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cyrus-sasl2/libsasl2-2_2.1.27+dfsg-2.1+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dav1d/libdav1d4_0.7.1-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dav1d/libdav1d6_1.0.0-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.8_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-6_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dbus/libdbus-1-3_1.12.24-0+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dbus/libdbus-1-dev_1.12.24-0+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/double-conversion/libdouble-conversion3_3.1.5-6.1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/e2fsprogs/comerr-dev_2.1-1.46.6-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/e2fsprogs/libcom-err2_1.46.6-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/elfutils/libelf-dev_0.187-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/elfutils/libelf1_0.187-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/expat/libexpat1-dev_2.2.10-2+deb11u5_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/expat/libexpat1_2.2.10-2+deb11u5_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavcodec-dev_4.3.5-0+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavcodec58_4.3.5-0+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavcodec59_5.1.3-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavformat-dev_4.3.5-0+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavformat59_5.1.3-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavutil-dev_4.3.5-0+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavutil56_4.3.5-0+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavutil57_5.1.3-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libswresample-dev_4.3.5-0+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libswresample3_4.3.5-0+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libswresample4_5.1.3-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/flac/libflac-dev_1.3.3-2+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/flac/libflac8_1.3.3-2+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fontconfig/libfontconfig-dev_2.13.1-4.2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fontconfig/libfontconfig1_2.13.1-4.2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/freetype/libfreetype-dev_2.10.4+dfsg-1+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/freetype/libfreetype6_2.10.4+dfsg-1+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fribidi/libfribidi-dev_1.0.8-2+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fribidi/libfribidi0_1.0.8-2+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/game-music-emu/libgme0_0.6.3-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libasan6_10.2.1-6_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libatomic1_10.2.1-6_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libgcc-10-dev_10.2.1-6_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libgcc-s1_10.2.1-6_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libgomp1_10.2.1-6_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libstdc++-10-dev_10.2.1-6_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libstdc++6_10.2.1-6_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libubsan1_10.2.1-6_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-0_2.42.2+dfsg-1+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-dev_2.42.2+dfsg-1+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glib2.0/libglib2.0-0_2.66.8-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glib2.0/libglib2.0-dev_2.66.8-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glibc/libc6-dev_2.31-13+deb11u5_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glibc/libc6_2.31-13+deb11u5_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gmp/libgmp10_6.2.1+dfsg-1+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls-dane0_3.7.1-5+deb11u3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls-openssl27_3.7.1-5+deb11u3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls28-dev_3.7.1-5+deb11u3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls30_3.7.1-5+deb11u3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutlsxx28_3.7.1-5+deb11u3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphene/libgraphene-1.0-0_1.10.4+dfsg1-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphene/libgraphene-1.0-dev_1.10.4+dfsg1-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphite2/libgraphite2-3_1.3.14-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphite2/libgraphite2-dev_1.3.14-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.33-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk+3.0/libgtk-3-0_3.24.24-4+deb11u3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.24-4+deb11u3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk4/libgtk-4-1_4.8.3+ds-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk4/libgtk-4-dev_4.8.3+ds-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz-dev_2.7.4-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz-gobject0_2.7.4-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz-icu0_2.7.4-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz0b_2.7.4-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/highway/libhwy1_1.0.3-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git180724-3+b2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/i/icu/libicu67_67.1-7_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/jbigkit/libjbig-dev_2.1-3.1+b2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/jpeg-xl/libjxl0.7_0.7.0-10_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/json-glib/libjson-glib-1.0-0_1.6.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/keyutils/libkeyutils1_1.6.1-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/krb5-multidev_1.18.3-6+deb11u3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libgssapi-krb5-2_1.18.3-6+deb11u3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libgssrpc4_1.18.3-6+deb11u3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libk5crypto3_1.18.3-6+deb11u3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkadm5clnt-mit12_1.18.3-6+deb11u3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkadm5srv-mit12_1.18.3-6+deb11u3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkdb5-10_1.18.3-6+deb11u3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkrb5-3_1.18.3-6+deb11u3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkrb5-dev_1.18.3-6+deb11u3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkrb5support0_1.18.3-6+deb11u3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lame/libmp3lame0_3.100-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lcms2/liblcms2-2_2.12~rc1-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lerc/liblerc4_4.0.0+ds-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/linux/linux-libc-dev_6.1.20-2~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lz4/liblz4-1_1.9.3-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lzo2/liblzo2-2_2.10-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/liba/libasyncns/libasyncns0_0.8-6+b2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libb/libb2/libb2-1_0.98.1-1.1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libb/libbluray/libbluray2_1.2.1-4+deb11u2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libb/libbsd/libbsd0_0.11.3-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-2.2+b1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcap2/libcap-dev_2.44-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcap2/libcap2_2.44-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcloudproviders/libcloudproviders0_0.3.0-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdatrie/libdatrie-dev_0.2.13-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdatrie/libdatrie1_0.2.13-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr492+repack1-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr492+repack1-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_18.10.20180917~bzr492+repack1-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_18.10.20180917~bzr492+repack1-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdeflate/libdeflate-dev_1.10-2~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdeflate/libdeflate0_1.10-2~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.104-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-dev_2.4.104-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-etnaviv1_2.4.104-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-exynos1_2.4.104-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-freedreno1_2.4.104-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-nouveau2_2.4.104-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-omap1_2.4.104-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-radeon1_2.4.104-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-tegra0_2.4.104-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm2_2.4.104-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libepoxy/libepoxy-dev_1.5.8-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libepoxy/libepoxy0_1.5.8-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libevdev/libevdev-dev_1.11.0+dfsg-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libevdev/libevdev2_1.11.0+dfsg-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libevent/libevent-2.1-7_2.1.12-stable-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libf/libffi/libffi-dev_3.3-6_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libf/libffi/libffi7_3.3-6_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.7-6_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgcrypt20/libgcrypt20_1.8.7-6_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libegl-dev_1.3.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libegl1_1.3.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgl-dev_1.3.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgl1_1.3.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgles-dev_1.3.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgles1_1.3.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgles2_1.3.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglvnd-dev_1.3.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglvnd0_1.3.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglx-dev_1.3.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglx0_1.3.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libopengl0_1.3.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgpg-error/libgpg-error-dev_1.38-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgpg-error/libgpg-error0_1.38-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgsm/libgsm1_1.0.18-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgudev/libgudev-1.0-0_234-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libice/libice6_1.0.10-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libidl/libidl-2-0_0.8.14-4+b12_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libidn/libidn11_1.33-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libidn2/libidn2-0_2.3.0-5_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libinput/libinput-dev_1.16.4-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libinput/libinput10_1.16.4-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_2.0.6-4_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_2.0.6-4_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.9.4-4_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjsoncpp/libjsoncpp24_1.9.4-4_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libm/libmd/libmd0_1.0.3-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libn/libnsl/libnsl2_1.3.0-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b10_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libo/libogg/libogg-dev_1.3.4-0.1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libo/libogg/libogg0_1.3.4-0.1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libo/libopenmpt/libopenmpt0_0.4.11-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpciaccess/libpciaccess0_0.16-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpgm/libpgm-5.3-0_5.3.128~dfsg-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpng1.6/libpng-dev_1.6.37-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpng1.6/libpng16-16_1.6.37-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libproxy/libproxy1v5_0.4.17-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpsl/libpsl5_0.21.0-1.2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.4-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libr/librabbitmq/librabbitmq4_0.10.0-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libr/librest/librest-0.7-0_0.8.1-1.1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libr/librist/librist4_0.2.7+dfsg-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libr/librsvg/librsvg2-2_2.50.3+dfsg-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libselinux/libselinux1-dev_3.1-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libselinux/libselinux1_3.1-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsepol/libsepol1-dev_3.1-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsepol/libsepol1_3.1-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsm/libsm6_1.2.3-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsndfile/libsndfile1_1.0.31-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsodium/libsodium23_1.0.18-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.72.0-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsoup2.4/libsoup2.4-1_2.72.0-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsoxr/libsoxr0_0.1.3-4_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libssh/libssh-gcrypt-4_0.9.5-1+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libssh2/libssh2-1_1.9.0-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtasn1-6/libtasn1-6_4.16.0-2+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libthai/libthai-dev_0.1.28-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libthai/libthai0_0.1.28-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtheora/libtheora0_1.1.1+dfsg.1-15_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtirpc/libtirpc3_1.3.1-1+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtool/libltdl7_2.4.6-15_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libudfread/libudfread0_1.1.1-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libunistring/libunistring2_0.9.10-4_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libutempter/libutempter-dev_1.2.1-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libutempter/libutempter0_1.2.1-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-dev_2.17.0-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-drm2_2.17.0-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-glx2_2.17.0-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-wayland2_2.17.0-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-x11-2_2.17.0-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva2_2.17.0-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvdpau/libvdpau1_1.4-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvorbis/libvorbis0a_1.3.7-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvorbis/libvorbisenc2_1.3.7-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvorbis/libvorbisfile3_1.3.7-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvpx/libvpx-dev_1.9.0-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvpx/libvpx6_1.9.0-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvpx/libvpx7_1.12.0-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwacom/libwacom2_1.8-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebp-dev_0.6.1-2.1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebp6_0.6.1-2.1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebp7_1.2.4-0.2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2.1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebpmux3_0.6.1-2.1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-6_1.7.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-dev_1.7.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-xcb-dev_1.7.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-xcb1_1.7.2-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxau/libxau-dev_1.0.9-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxau/libxau6_1.0.9-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri2-0_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri3-0_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri3-dev_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-glx0-dev_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-glx0_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-present-dev_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-present0_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-randr0-dev_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-randr0_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-render0-dev_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-render0_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shape0-dev_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shape0_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shm0-dev_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shm0_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-sync-dev_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-sync1_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xfixes0-dev_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xfixes0_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xinerama0_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xinput0_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xkb1_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb1-dev_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb1_1.14-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.5-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcomposite/libxcomposite1_0.4.5-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcrypt/libcrypt-dev_4.4.18-4_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcrypt/libcrypt1_4.4.18-4_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcursor/libxcursor-dev_1.2.0-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcursor/libxcursor1_1.2.0-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdamage/libxdamage-dev_1.1.5-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdamage/libxdamage1_1.1.5-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxext/libxext-dev_1.3.3-1.1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxext/libxext6_1.3.3-1.1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxfixes/libxfixes3_5.0.3-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxi/libxi-dev_1.7.10-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxi/libxi6_1.7.10-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxinerama/libxinerama1_1.1.4-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxkbcommon/libxkbcommon-dev_1.0.3-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxkbcommon/libxkbcommon-x11-0_1.0.3-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxkbcommon/libxkbcommon0_1.0.3-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxml2/libxml2-dev_2.9.10+dfsg-6.7+deb11u4_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxml2/libxml2_2.9.10+dfsg-6.7+deb11u4_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxshmfence/libxshmfence-dev_1.3-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxslt/libxslt1-dev_1.1.34-4+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxslt/libxslt1.1_1.1.34-4+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxss/libxss-dev_1.2.3-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxss/libxss1_1.2.3-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxt/libxt-dev_1.2.0-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxt/libxt6_1.2.0-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxtst/libxtst6_1.2.3-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libz/libzstd/libzstd1_1.4.8+dfsg-2.1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mbedtls/libmbedcrypto7_2.28.3-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/md4c/libmd4c0_0.4.7-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libegl1-mesa-dev_20.3.5-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libegl1-mesa_20.3.5-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgbm-dev_20.3.5-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgbm1_20.3.5-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgl1-mesa-dev_20.3.5-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgl1-mesa-glx_20.3.5-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libglapi-mesa_20.3.5-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libwayland-egl1-mesa_20.3.5-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/mesa-common-dev_20.3.5-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/minizip/libminizip-dev_1.1-8+b1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/minizip/libminizip1_1.1-8+b1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mpg123/libmpg123-0_1.26.4-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mtdev/libmtdev1_1.1.6-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libncurses-dev_6.2+20201114-2+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libncurses6_6.2+20201114-2+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libncursesw6_6.2+20201114-2+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libtinfo6_6.2+20201114-2+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nettle/libhogweed6_3.7.3-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nettle/libnettle8_3.7.3-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nghttp2/libnghttp2-14_1.43.0-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/norm/libnorm1_1.5.9+dfsg-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nspr/libnspr4-dev_4.29-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nspr/libnspr4_4.29-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nss/libnss3-dev_3.61-1+deb11u3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nss/libnss3_3.61-1+deb11u3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/numactl/libnuma1_2.0.12-1+b1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/ocl-icd/ocl-icd-libopencl1_2.2.14-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openjpeg2/libopenjp2-7_2.4.0-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openldap/libldap-2.4-2_2.4.59+dfsg-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openssl/libssl-dev_1.1.1n-0+deb11u4_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openssl/libssl1.1_1.1.1n-0+deb11u4_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/opus/libopus-dev_1.3.1-0.1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/opus/libopus0_1.3.1-0.1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/p11-kit/libp11-kit0_0.23.22-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pam/libpam0g-dev_1.4.0-9+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pam/libpam0g_1.4.0-9+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpango-1.0-0_1.46.2-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpango1.0-dev_1.46.2-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpangocairo-1.0-0_1.46.2-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpangoft2-1.0-0_1.46.2-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpangoxft-1.0-0_1.46.2-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5.1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pciutils/libpci-dev_3.7.0-5_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pciutils/libpci3_3.7.0-5_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-16-0_10.36-2+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-32-0_10.36-2+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-8-0_10.36-2+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-dev_10.36-2+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-posix2_10.36-2+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre16-3_8.39-13_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre3-dev_8.39-13_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre32-3_8.39-13_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre3_8.39-13_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcrecpp0v5_8.39-13_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pipewire/libpipewire-0.3-0_0.3.65-2~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pipewire/libpipewire-0.3-dev_0.3.65-2~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pipewire/libspa-0.2-dev_0.3.65-2~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pixman/libpixman-1-0_0.40.0-1.1~deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pixman/libpixman-1-dev_0.40.0-1.1~deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pulseaudio/libpulse-dev_14.2-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pulseaudio/libpulse-mainloop-glib0_14.2-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pulseaudio/libpulse0_14.2-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6concurrent6_6.4.2+dfsg-10~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6core6_6.4.2+dfsg-10~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6dbus6_6.4.2+dfsg-10~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6gui6_6.4.2+dfsg-10~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6network6_6.4.2+dfsg-10~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6opengl6_6.4.2+dfsg-10~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6openglwidgets6_6.4.2+dfsg-10~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6printsupport6_6.4.2+dfsg-10~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6sql6_6.4.2+dfsg-10~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6test6_6.4.2+dfsg-10~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6widgets6_6.4.2+dfsg-10~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6xml6_6.4.2+dfsg-10~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/qt6-base-dev-tools_6.4.2+dfsg-10~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/qt6-base-dev_6.4.2+dfsg-10~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5concurrent5_5.15.2+dfsg-9_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5core5a_5.15.2+dfsg-9_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5dbus5_5.15.2+dfsg-9_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5gui5_5.15.2+dfsg-9_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5network5_5.15.2+dfsg-9_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5printsupport5_5.15.2+dfsg-9_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5sql5_5.15.2+dfsg-9_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5test5_5.15.2+dfsg-9_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5widgets5_5.15.2+dfsg-9_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5xml5_5.15.2+dfsg-9_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/qtbase5-dev-tools_5.15.2+dfsg-9_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/qtbase5-dev_5.15.2+dfsg-9_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/re2/libre2-9_20210201+dfsg-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/re2/libre2-dev_20210201+dfsg-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/rtmpdump/librtmp1_2.4+20151223.gitfa8646d.1-2+b2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/rust-rav1e/librav1e0_0.5.1-6_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/shared-mime-info/shared-mime-info_2.0-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/shine/libshine3_3.1.1-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/snappy/libsnappy-dev_1.1.8-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/snappy/libsnappy1v5_1.1.8-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/speech-dispatcher/libspeechd-dev_0.11.4-2~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/speech-dispatcher/libspeechd2_0.11.4-2~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/speex/libspeex1_1.2~rc1.2-1.1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/sqlite3/libsqlite3-0_3.34.1-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/srt/libsrt1.5-gnutls_1.5.1-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/svt-av1/libsvtav1enc1_1.4.1+dfsg-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libsystemd-dev_252.5-2~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libsystemd0_252.5-2~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libudev-dev_252.5-2~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libudev1_252.5-2~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tcp-wrappers/libwrap0_7.6.q-31_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiff-dev_4.2.0-1+deb11u4_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiff5_4.2.0-1+deb11u4_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiff6_4.5.0-6_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiffxx5_4.2.0-1+deb11u4_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tslib/libts0_1.22-1+b1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/twolame/libtwolame0_0.4.0-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/unbound/libunbound8_1.17.1-2~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libblkid-dev_2.36.1-8+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libblkid1_2.36.1-8+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libmount-dev_2.36.1-8+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libmount1_2.36.1-8+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libuuid1_2.36.1-8+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/uuid-dev_2.36.1-8+deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/v/valgrind/valgrind_3.16.1-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/v/vulkan-loader/libvulkan-dev_1.3.224.0-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/v/vulkan-loader/libvulkan1_1.3.224.0-1~bpo11+1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wavpack/libwavpack1_5.4.0-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland-protocols/wayland-protocols_1.20-1_all.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-bin_1.18.0-2~exp1.1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-client0_1.18.0-2~exp1.1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-cursor0_1.18.0-2~exp1.1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-dev_1.18.0-2~exp1.1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-egl-backend-dev_1.18.0-2~exp1.1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-egl1_1.18.0-2~exp1.1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-server0_1.18.0-2~exp1.1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/x264/libx264-160_0.160.3011+gitcde9a93-2.1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/x264/libx264-164_0.164.3095+gitbaee400-3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/x265/libx265-192_3.4-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/x265/libx265-199_3.5-2+b1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-image/libxcb-image0-dev_0.4.0-1+b3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-image/libxcb-image0_0.4.0-1+b3_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-keysyms/libxcb-keysyms1_0.4.0-1+b2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0-dev_0.3.9-1+b1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0_0.3.9-1+b1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-wm/libxcb-icccm4_0.4.1-1.1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util/libxcb-util-dev_0.4.0-1+b1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util/libxcb-util1_0.4.0-1+b1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xft/libxft-dev_2.3.2-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xft/libxft2_2.3.2-2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xorgproto/x11proto-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xvidcore/libxvidcore4_1.3.7-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xz-utils/liblzma5_5.2.5-2.1~deb11u1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/z/zeromq3/libzmq5_4.3.4-1_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-2+deb11u2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/z/zlib/zlib1g_1.2.11.dfsg-2+deb11u2_armhf.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/z/zvbi/libzvbi0_0.2.35-18_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/acl/libacl1_2.2.53-10_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/adduser/adduser_3.118+deb11u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/adwaita-icon-theme/adwaita-icon-theme_3.38.0-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/alsa-lib/libasound2-data_1.2.4-1.1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/alsa-lib/libasound2-dev_1.2.4-1.1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/alsa-lib/libasound2_1.2.4-1.1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/aom/libaom0_1.0.0.errata1-3+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/apparmor/libapparmor1_2.13.6-10_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/argon2/libargon2-1_0~20171227-0.2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.38.0-4~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.38.0-4~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/at-spi2-core/gir1.2-atspi-2.0_2.44.1-1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/at-spi2-core/libatspi2.0-0_2.44.1-1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/at-spi2-core/libatspi2.0-dev_2.44.1-1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/atk1.0/gir1.2-atk-1.0_2.38.0-1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/atk1.0/libatk1.0-0_2.38.0-1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/atk1.0/libatk1.0-data_2.38.0-1~bpo11+1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/atk1.0/libatk1.0-dev_2.38.0-1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/audit/libaudit-common_3.0-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/audit/libaudit1_3.0-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/avahi/libavahi-client3_0.8-5+deb11u2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/avahi/libavahi-common-data_0.8-5+deb11u2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/avahi/libavahi-common3_0.8-5+deb11u2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/binutils/binutils-arm-linux-gnueabihf_2.35.2-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/binutils/binutils-common_2.35.2-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/binutils/binutils_2.35.2-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/binutils/libbinutils_2.35.2-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/binutils/libctf-nobfd0_2.35.2-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/binutils/libctf0_2.35.2-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/bluez/libbluetooth-dev_5.55-3.1+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/bluez/libbluetooth3_5.55-3.1+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/brotli/libbrotli-dev_1.0.9-2+b2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/brotli/libbrotli1_1.0.9-2+b2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/build-essential/build-essential_12.9_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/bzip2/bzip2_1.0.8-4_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/bzip2/libbz2-1.0_1.0.8-4_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cairo/libcairo-gobject2_1.16.0-5_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cairo/libcairo-script-interpreter2_1.16.0-5_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cairo/libcairo2-dev_1.16.0-5_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cairo/libcairo2_1.16.0-5_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/chromaprint/libchromaprint1_1.5.0-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/codec2/libcodec2-0.9_0.9.2-4_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/colord/gir1.2-colord-1.0_1.4.5-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/colord/libcolord-dev_1.4.5-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/colord/libcolord2_1.4.5-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/coreutils/coreutils_8.32-4_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cryptsetup/libcryptsetup12_2.3.7-1+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cups/libcups2-dev_2.3.3op2-3+deb11u8_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cups/libcups2_2.3.3op2-3+deb11u8_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cups/libcupsimage2-dev_2.3.3op2-3+deb11u8_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cups/libcupsimage2_2.3.3op2-3+deb11u8_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/curl/libcurl3-gnutls_7.88.1-10+deb12u6~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/curl/libcurl4-gnutls-dev_7.88.1-10+deb12u6~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cyrus-sasl2/libsasl2-2_2.1.27+dfsg-2.1+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cyrus-sasl2/libsasl2-modules-db_2.1.27+dfsg-2.1+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dav1d/libdav1d4_0.7.1-3+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.8_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/dbus-bin_1.14.10-1~deb12u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/dbus-daemon_1.14.10-1~deb12u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/dbus-session-bus-common_1.14.10-1~deb12u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/dbus-system-bus-common_1.14.10-1~deb12u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/dbus-user-session_1.14.10-1~deb12u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/dbus_1.14.10-1~deb12u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/libdbus-1-3_1.12.28-0+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/libdbus-1-dev_1.12.28-0+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dconf/dconf-gsettings-backend_0.38.0-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dconf/dconf-service_0.38.0-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dconf/libdconf1_0.38.0-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/debconf/debconf_1.5.77_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/double-conversion/libdouble-conversion3_3.1.5-6.1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dpkg/dpkg-dev_1.20.13_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dpkg/dpkg_1.20.13_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dpkg/libdpkg-perl_1.20.13_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/e/e2fsprogs/comerr-dev_2.1-1.46.6-1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/e/e2fsprogs/libcom-err2_1.46.6-1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/e/elfutils/libelf-dev_0.187-1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/e/elfutils/libelf1_0.187-1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/e/expat/libexpat1-dev_2.2.10-2+deb11u5_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/e/expat/libexpat1_2.2.10-2+deb11u5_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libavcodec-dev_4.3.7-0+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libavcodec58_4.3.7-0+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libavformat-dev_4.3.7-0+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libavformat58_4.3.7-0+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libavutil-dev_4.3.7-0+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libavutil56_4.3.7-0+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libswresample-dev_4.3.7-0+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libswresample3_4.3.7-0+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/flac/libflac-dev_1.3.3-2+deb11u2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/flac/libflac8_1.3.3-2+deb11u2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fontconfig/fontconfig-config_2.13.1-4.2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fontconfig/fontconfig_2.13.1-4.2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fontconfig/libfontconfig-dev_2.13.1-4.2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fontconfig/libfontconfig1-dev_2.13.1-4.2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fontconfig/libfontconfig1_2.13.1-4.2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fonts-dejavu/fonts-dejavu-core_2.37-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/freetype/libfreetype-dev_2.10.4+dfsg-1+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/freetype/libfreetype6-dev_2.10.4+dfsg-1+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/freetype/libfreetype6_2.10.4+dfsg-1+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fribidi/libfribidi-dev_1.0.8-2+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fribidi/libfribidi0_1.0.8-2+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/game-music-emu/libgme0_0.6.3-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/cpp-10_10.2.1-6_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/g++-10_10.2.1-6_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/gcc-10-base_10.2.1-6_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/gcc-10_10.2.1-6_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libasan6_10.2.1-6_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libatomic1_10.2.1-6_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libcc1-0_10.2.1-6_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libgcc-10-dev_10.2.1-6_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libgcc-s1_10.2.1-6_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libgomp1_10.2.1-6_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libstdc++-10-dev_10.2.1-6_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libstdc++6_10.2.1-6_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libubsan1_10.2.1-6_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-defaults/cpp_10.2.1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-defaults/g++_10.2.1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-defaults/gcc_10.2.1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdbm/libgdbm-compat4_1.19-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdbm/libgdbm6_1.19-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdk-pixbuf/gir1.2-gdkpixbuf-2.0_2.42.2+dfsg-1+deb11u2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-0_2.42.2+dfsg-1+deb11u2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-dev_2.42.2+dfsg-1+deb11u2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-bin_2.42.2+dfsg-1+deb11u2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-common_2.42.2+dfsg-1+deb11u2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib-networking/glib-networking-common_2.66.0-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib-networking/glib-networking-services_2.66.0-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib-networking/glib-networking_2.66.0-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib2.0/libglib2.0-0_2.66.8-1+deb11u4_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib2.0/libglib2.0-bin_2.66.8-1+deb11u4_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib2.0/libglib2.0-data_2.66.8-1+deb11u4_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib2.0/libglib2.0-dev-bin_2.66.8-1+deb11u4_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib2.0/libglib2.0-dev_2.66.8-1+deb11u4_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glibc/libc-dev-bin_2.31-13+deb11u5_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glibc/libc6-dbg_2.31-13+deb11u5_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glibc/libc6-dev_2.31-13+deb11u11_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glibc/libc6-dev_2.31-13+deb11u5_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glibc/libc6_2.31-13+deb11u5_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gmp/libgmp-dev_6.2.1+dfsg-1+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gmp/libgmp10_6.2.1+dfsg-1+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gmp/libgmpxx4ldbl_6.2.1+dfsg-1+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gnutls28/libgnutls-dane0_3.7.1-5+deb11u5_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gnutls28/libgnutls-openssl27_3.7.1-5+deb11u5_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gnutls28/libgnutls28-dev_3.7.1-5+deb11u5_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gnutls28/libgnutls30_3.7.1-5+deb11u5_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gnutls28/libgnutlsxx28_3.7.1-5+deb11u5_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gobject-introspection/gir1.2-freedesktop_1.66.1-1+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gobject-introspection/gir1.2-glib-2.0_1.66.1-1+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gobject-introspection/gobject-introspection_1.66.1-1+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gobject-introspection/libgirepository-1.0-1_1.66.1-1+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gobject-introspection/libgirepository1.0-dev_1.66.1-1+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/graphene/gir1.2-graphene-1.0_1.10.4+dfsg1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/graphene/libgraphene-1.0-0_1.10.4+dfsg1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/graphene/libgraphene-1.0-dev_1.10.4+dfsg1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/graphite2/libgraphite2-3_1.3.14-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/graphite2/libgraphite2-dev_1.3.14-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gsettings-desktop-schemas/gsettings-desktop-schemas_3.38.0-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+2.0/gir1.2-gtk-2.0_2.24.33-2+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.33-2+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+2.0/libgtk2.0-common_2.24.33-2+deb11u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+2.0/libgtk2.0-dev_2.24.33-2+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+3.0/gir1.2-gtk-3.0_3.24.24-4+deb11u4_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+3.0/gtk-update-icon-cache_3.24.24-4+deb11u4_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+3.0/libgtk-3-0_3.24.24-4+deb11u4_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+3.0/libgtk-3-common_3.24.24-4+deb11u4_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.24-4+deb11u4_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk4/gir1.2-gtk-4.0_4.8.3+ds-2+deb12u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk4/libgtk-4-1_4.8.3+ds-2+deb12u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk4/libgtk-4-common_4.8.3+ds-2+deb12u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk4/libgtk-4-dev_4.8.3+ds-2+deb12u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/h/harfbuzz/gir1.2-harfbuzz-0.0_2.7.4-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/h/harfbuzz/libharfbuzz-dev_2.7.4-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/h/harfbuzz/libharfbuzz-gobject0_2.7.4-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/h/harfbuzz/libharfbuzz-icu0_2.7.4-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/h/harfbuzz/libharfbuzz0b_2.7.4-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/h/hicolor-icon-theme/hicolor-icon-theme_0.17-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/i/icu/icu-devtools_67.1-7_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/i/icu/libicu-dev_67.1-7_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/i/icu/libicu67_67.1-7_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/i/iptables/libip4tc2_1.8.7-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/i/isl/libisl23_0.23-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/j/jbigkit/libjbig-dev_2.1-3.1+b2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/j/json-c/libjson-c5_0.15-2+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/j/json-glib/libjson-glib-1.0-0_1.6.2-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/j/json-glib/libjson-glib-1.0-common_1.6.2-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/keyutils/libkeyutils1_1.6.1-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/kmod/libkmod2_28-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/krb5-multidev_1.18.3-6+deb11u5_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libgssapi-krb5-2_1.18.3-6+deb11u5_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libgssrpc4_1.18.3-6+deb11u5_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libk5crypto3_1.18.3-6+deb11u5_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libkadm5clnt-mit12_1.18.3-6+deb11u5_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libkadm5srv-mit12_1.18.3-6+deb11u5_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libkdb5-10_1.18.3-6+deb11u5_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libkrb5-3_1.18.3-6+deb11u5_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libkrb5-dev_1.18.3-6+deb11u5_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libkrb5support0_1.18.3-6+deb11u5_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lame/libmp3lame0_3.100-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lcms2/liblcms2-2_2.12~rc1-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lcms2/liblcms2-dev_2.12~rc1-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lerc/liblerc4_4.0.0+ds-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/linux/linux-libc-dev_6.1.94-1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/llvm-toolchain-11/libllvm11_11.0.1-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lm-sensors/libsensors-config_3.6.0-7_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lm-sensors/libsensors5_3.6.0-7_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lsb/lsb-base_11.1.0_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lvm2/dmsetup_1.02.175-2.1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lvm2/libdevmapper1.02.1_1.02.175-2.1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lz4/liblz4-1_1.9.3-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lzo2/liblzo2-2_2.10-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/liba/libasyncns/libasyncns0_0.8-6+b2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libb/libb2/libb2-1_0.98.1-1.1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libb/libbluray/libbluray2_1.2.1-4+deb11u2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libb/libbsd/libbsd0_0.11.3-1+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-2.2+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libc/libcap2/libcap-dev_2.44-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libc/libcap2/libcap2_2.44-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libc/libcloudproviders/libcloudproviders0_0.3.0-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdatrie/libdatrie-dev_0.2.13-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdatrie/libdatrie1_0.2.13-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdbusmenu/gir1.2-dbusmenu-glib-0.4_18.10.20180917~bzr492+repack1-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr492+repack1-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr492+repack1-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdeflate/libdeflate-dev_1.10-2~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdeflate/libdeflate0_1.10-2~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.104-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-common_2.4.104-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-dev_2.4.104-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-etnaviv1_2.4.104-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-exynos1_2.4.104-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-freedreno1_2.4.104-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-nouveau2_2.4.104-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-omap1_2.4.104-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-radeon1_2.4.104-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-tegra0_2.4.104-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm2_2.4.104-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libe/libedit/libedit2_3.1-20191231-2+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libe/libepoxy/libepoxy-dev_1.5.8-1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libe/libepoxy/libepoxy0_1.5.8-1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libe/libevdev/libevdev-dev_1.11.0+dfsg-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libe/libevdev/libevdev2_1.11.0+dfsg-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libe/libevent/libevent-2.1-7_2.1.12-stable-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libf/libffi/libffi-dev_3.3-6_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libf/libffi/libffi7_3.3-6_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.7-6_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgcrypt20/libgcrypt20_1.8.7-6_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libegl-dev_1.3.2-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libegl1_1.3.2-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libgl-dev_1.3.2-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libgl1_1.3.2-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libgles-dev_1.3.2-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libgles1_1.3.2-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libgles2_1.3.2-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libglvnd-dev_1.3.2-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libglvnd0_1.3.2-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libglx-dev_1.3.2-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libglx0_1.3.2-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libopengl-dev_1.3.2-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libopengl0_1.3.2-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgpg-error/libgpg-error-dev_1.38-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgpg-error/libgpg-error0_1.38-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgsm/libgsm1_1.0.18-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgudev/gir1.2-gudev-1.0_234-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgudev/libgudev-1.0-0_234-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgudev/libgudev-1.0-dev_234-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libice/libice-dev_1.0.10-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libice/libice6_1.0.10-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libidn2/libidn2-0_2.3.0-5_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libidn2/libidn2-dev_2.3.0-5_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libinput/libinput-bin_1.16.4-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libinput/libinput-dev_1.16.4-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libinput/libinput10_1.16.4-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libj/libjpeg-turbo/libjpeg-dev_2.0.6-4_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_2.0.6-4_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_2.0.6-4_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.9.4-4_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libj/libjsoncpp/libjsoncpp24_1.9.4-4_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libm/libmd/libmd0_1.0.3-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libn/libnsl/libnsl-dev_1.3.0-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libn/libnsl/libnsl2_1.3.0-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libo/libogg/libogg-dev_1.3.4-0.1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libo/libogg/libogg0_1.3.4-0.1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libo/libopenmpt/libopenmpt0_0.4.11-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libpgm/libpgm-5.3-0_5.3.128~dfsg-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libpng1.6/libpng-dev_1.6.37-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libpng1.6/libpng16-16_1.6.37-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libproxy/libproxy1v5_0.4.17-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libpsl/libpsl5_0.21.0-1.2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.4-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libr/librabbitmq/librabbitmq4_0.10.0-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libr/librest/librest-0.7-0_0.8.1-1.1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libr/librsvg/librsvg2-2_2.50.3+dfsg-1+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libseccomp/libseccomp2_2.5.1-1+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libselinux/libselinux1-dev_3.1-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libselinux/libselinux1_3.1-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsemanage/libsemanage-common_3.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsemanage/libsemanage1_3.1-1+b2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsepol/libsepol1-dev_3.1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsepol/libsepol1_3.1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libset-scalar-perl/libset-scalar-perl_1.29-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsm/libsm-dev_1.2.3-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsm/libsm6_1.2.3-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsndfile/libsndfile1_1.0.31-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsodium/libsodium23_1.0.18-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.72.0-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsoup2.4/libsoup2.4-1_2.72.0-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsoxr/libsoxr0_0.1.3-4_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libssh/libssh-gcrypt-4_0.9.8-0+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libssh2/libssh2-1_1.9.0-2+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libtasn1-6/libtasn1-6-dev_4.16.0-2+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libtasn1-6/libtasn1-6_4.16.0-2+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libthai/libthai-data_0.1.28-3_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libthai/libthai-dev_0.1.28-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libthai/libthai0_0.1.28-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libtheora/libtheora0_1.1.1+dfsg.1-15_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libtirpc/libtirpc-common_1.3.1-1+deb11u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libtirpc/libtirpc-dev_1.3.1-1+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libtirpc/libtirpc3_1.3.1-1+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libu/libudfread/libudfread0_1.1.1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libu/libunistring/libunistring2_0.9.10-4_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libu/libutempter/libutempter-dev_1.2.1-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libu/libutempter/libutempter0_1.2.1-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libva/libva-dev_2.17.0-1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libva/libva-drm2_2.17.0-1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libva/libva-glx2_2.17.0-1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libva/libva-wayland2_2.17.0-1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libva/libva-x11-2_2.17.0-1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libva/libva2_2.17.0-1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libvdpau/libvdpau1_1.4-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libvorbis/libvorbis0a_1.3.7-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libvorbis/libvorbisenc2_1.3.7-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libvorbis/libvorbisfile3_1.3.7-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libvpx/libvpx-dev_1.9.0-1+deb11u3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libvpx/libvpx6_1.9.0-1+deb11u3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwacom/libwacom-common_1.8-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwacom/libwacom-dev_1.8-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwacom/libwacom2_1.8-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwebp/libwebp-dev_0.6.1-2.1+deb11u2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwebp/libwebp6_0.6.1-2.1+deb11u2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwebp/libwebp7_1.2.4-0.2+deb12u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2.1+deb11u2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwebp/libwebpmux3_0.6.1-2.1+deb11u2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libx11/libx11-6_1.7.2-1+deb11u2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libx11/libx11-data_1.7.2-1+deb11u2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libx11/libx11-dev_1.7.2-1+deb11u2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libx11/libx11-xcb-dev_1.7.2-1+deb11u2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libx11/libx11-xcb1_1.7.2-1+deb11u2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxau/libxau-dev_1.0.9-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxau/libxau6_1.0.9-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-dri2-0_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-dri3-0_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-dri3-dev_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-glx0-dev_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-glx0_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-present-dev_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-present0_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-randr0-dev_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-randr0_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-render0-dev_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-render0_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-shape0-dev_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-shape0_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-shm0-dev_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-shm0_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-sync-dev_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-sync1_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-xfixes0-dev_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-xfixes0_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-xinerama0_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-xinput0_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-xkb1_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb1-dev_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb1_1.14-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.5-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcomposite/libxcomposite1_0.4.5-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcrypt/libcrypt-dev_4.4.18-4_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcrypt/libcrypt1_4.4.18-4_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcursor/libxcursor-dev_1.2.0-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcursor/libxcursor1_1.2.0-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxdamage/libxdamage-dev_1.1.5-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxdamage/libxdamage1_1.1.5-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxext/libxext-dev_1.3.3-1.1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxext/libxext6_1.3.3-1.1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxfixes/libxfixes3_5.0.3-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxi/libxi-dev_1.7.10-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxi/libxi6_1.7.10-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxinerama/libxinerama1_1.1.4-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxkbcommon/libxkbcommon-dev_1.0.3-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxkbcommon/libxkbcommon-x11-0_1.0.3-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxkbcommon/libxkbcommon0_1.0.3-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxml2/libxml2-dev_2.9.10+dfsg-6.7+deb11u4_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxml2/libxml2-utils_2.9.10+dfsg-6.7+deb11u4_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxml2/libxml2_2.9.10+dfsg-6.7+deb11u4_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxshmfence/libxshmfence-dev_1.3-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxslt/libxslt1-dev_1.1.34-4+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxslt/libxslt1.1_1.1.34-4+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxss/libxss-dev_1.2.3-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxss/libxss1_1.2.3-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxt/libxt-dev_1.2.0-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxt/libxt6_1.2.0-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxtst/libxtst6_1.2.3-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libz/libzstd/libzstd1_1.4.8+dfsg-2.1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/make-dfsg/make_4.3-4.1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mako/python3-mako_1.1.3+ds1-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/markupsafe/python3-markupsafe_2.0.1-2~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/md4c/libmd4c0_0.4.7-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/media-types/media-types_4.0.0_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libegl-mesa0_20.3.5-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libegl1-mesa-dev_20.3.5-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libgbm-dev_20.3.5-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libgbm1_20.3.5-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libgl1-mesa-dri_20.3.5-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libglapi-mesa_20.3.5-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libglx-mesa0_20.3.5-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/mesa-common-dev_20.3.5-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/minizip/libminizip-dev_1.1-8+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/minizip/libminizip1_1.1-8+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mpclib3/libmpc3_1.2.0-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mpdecimal/libmpdec3_2.5.1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mpfr4/libmpfr6_4.1.0-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mpg123/libmpg123-0_1.26.4-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mtdev/libmtdev-dev_1.1.6-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mtdev/libmtdev1_1.1.6-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/ncurses/libncurses-dev_6.2+20201114-2+deb11u2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/ncurses/libncurses6_6.2+20201114-2+deb11u2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/ncurses/libncursesw6_6.2+20201114-2+deb11u2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/ncurses/libtinfo6_6.2+20201114-2+deb11u2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/ncurses/ncurses-bin_6.2+20201114-2+deb11u2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nettle/libhogweed6_3.7.3-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nettle/libnettle8_3.7.3-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nettle/nettle-dev_3.7.3-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nghttp2/libnghttp2-14_1.43.0-1+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/norm/libnorm1_1.5.9+dfsg-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nspr/libnspr4-dev_4.29-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nspr/libnspr4_4.29-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nss/libnss3-dev_3.61-1+deb11u3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nss/libnss3_3.61-1+deb11u3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/ocl-icd/ocl-icd-libopencl1_2.2.14-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/openjpeg2/libopenjp2-7_2.4.0-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/openldap/libldap-2.4-2_2.4.57+dfsg-3+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/openssl/libssl-dev_1.1.1w-0+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/openssl/libssl1.1_1.1.1w-0+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/opus/libopus-dev_1.3.1-0.1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/opus/libopus0_1.3.1-0.1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/p11-kit/libp11-kit-dev_0.23.22-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/p11-kit/libp11-kit0_0.23.22-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pam/libpam-modules_1.4.0-9+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pam/libpam-runtime_1.4.0-9+deb11u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pam/libpam0g-dev_1.4.0-9+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pam/libpam0g_1.4.0-9+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/gir1.2-pango-1.0_1.46.2-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/libpango-1.0-0_1.46.2-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/libpango1.0-dev_1.46.2-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/libpangocairo-1.0-0_1.46.2-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/libpangoft2-1.0-0_1.46.2-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/libpangoxft-1.0-0_1.46.2-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/pango1.0-tools_1.46.2-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/patch/patch_2.7.6-7_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pci.ids/pci.ids_0.0~2021.02.08-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pciutils/libpci-dev_3.7.0-5_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pciutils/libpci3_3.7.0-5_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre2/libpcre2-16-0_10.36-2+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre2/libpcre2-32-0_10.36-2+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre2/libpcre2-8-0_10.36-2+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre2/libpcre2-dev_10.36-2+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre2/libpcre2-posix2_10.36-2+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre3/libpcre16-3_8.39-13_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre3/libpcre3-dev_8.39-13_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre3/libpcre32-3_8.39-13_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre3/libpcre3_8.39-13_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre3/libpcrecpp0v5_8.39-13_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/perl/libperl5.32_5.32.1-4+deb11u3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/perl/perl-base_5.32.1-4+deb11u3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/perl/perl-modules-5.32_5.32.1-4+deb11u3_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/perl/perl_5.32.1-4+deb11u3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pipewire/libpipewire-0.3-0_0.3.65-2~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pipewire/libpipewire-0.3-dev_0.3.65-2~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pipewire/libspa-0.2-dev_0.3.65-2~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pipewire/libspa-0.2-modules_0.3.65-2~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pixman/libpixman-1-0_0.40.0-1.1~deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pixman/libpixman-1-dev_0.40.0-1.1~deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pkg-config/pkg-config_0.29.2-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pulseaudio/libpulse-dev_14.2-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pulseaudio/libpulse-mainloop-glib0_14.2-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pulseaudio/libpulse0_14.2-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python-markdown/python3-markdown_3.3.4-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3-defaults/libpython3-stdlib_3.9.2-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3-defaults/python3_3.9.2-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3-stdlib-extensions/python3-distutils_3.9.2-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3-stdlib-extensions/python3-lib2to3_3.9.2-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3.9/libpython3.9-minimal_3.9.2-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3.9/libpython3.9-stdlib_3.9.2-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3.9/python3.9-minimal_3.9.2-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3.9/python3.9_3.9.2-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6concurrent6_6.4.2+dfsg-11~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6core6_6.4.2+dfsg-11~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6dbus6_6.4.2+dfsg-11~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6gui6_6.4.2+dfsg-11~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6network6_6.4.2+dfsg-11~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6opengl6_6.4.2+dfsg-11~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6openglwidgets6_6.4.2+dfsg-11~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6printsupport6_6.4.2+dfsg-11~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6sql6_6.4.2+dfsg-11~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6test6_6.4.2+dfsg-11~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6widgets6_6.4.2+dfsg-11~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6xml6_6.4.2+dfsg-11~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/qmake6-bin_6.4.2+dfsg-11~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/qmake6_6.4.2+dfsg-11~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/qt6-base-dev-tools_6.4.2+dfsg-11~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/qt6-base-dev_6.4.2+dfsg-11~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/qt6-qpa-plugins_6.4.2+dfsg-11~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5concurrent5_5.15.2+dfsg-9+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5core5a_5.15.2+dfsg-9+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5dbus5_5.15.2+dfsg-9+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5gui5_5.15.2+dfsg-9+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5network5_5.15.2+dfsg-9+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5printsupport5_5.15.2+dfsg-9+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5sql5_5.15.2+dfsg-9+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5test5_5.15.2+dfsg-9+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5widgets5_5.15.2+dfsg-9+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5xml5_5.15.2+dfsg-9+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/qt5-qmake-bin_5.15.2+dfsg-9+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/qt5-qmake_5.15.2+dfsg-9+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/qtbase5-dev-tools_5.15.2+dfsg-9+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/qtbase5-dev_5.15.2+dfsg-9+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtchooser/qtchooser_66-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/r/re2/libre2-9_20210201+dfsg-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/r/re2/libre2-dev_20210201+dfsg-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/r/readline/libreadline8_8.1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/r/readline/readline-common_8.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/r/rtmpdump/librtmp1_2.4+20151223.gitfa8646d.1-2+b2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/sensible-utils/sensible-utils_0.0.14_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/setuptools/python3-pkg-resources_66.1.1-1~bpo11+1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/shadow/login_4.8.1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/shadow/passwd_4.8.1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/shared-mime-info/shared-mime-info_2.0-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/shine/libshine3_3.1.1-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/snappy/libsnappy-dev_1.1.8-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/snappy/libsnappy1v5_1.1.8-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/speech-dispatcher/libspeechd-dev_0.11.4-2~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/speech-dispatcher/libspeechd2_0.11.4-2~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/speex/libspeex1_1.2~rc1.2-1.1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/sqlite3/libsqlite3-0_3.34.1-3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/srt/libsrt1.4-gnutls_1.4.2-1.3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/libpam-systemd_252.29-1~deb12u1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/libsystemd-dev_252.29-1~deb12u1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/libsystemd-shared_252.29-1~deb12u1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/libsystemd0_252.29-1~deb12u1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/libudev-dev_252.29-1~deb12u1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/libudev1_252.29-1~deb12u1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/systemd-sysv_252.29-1~deb12u1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/systemd_252.29-1~deb12u1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tar/tar_1.34+dfsg-1+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tcp-wrappers/libwrap0_7.6.q-31_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tiff/libtiff-dev_4.2.0-1+deb11u5_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tiff/libtiff5_4.2.0-1+deb11u5_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tiff/libtiff6_4.5.0-6+deb12u2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tiff/libtiffxx5_4.2.0-1+deb11u5_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tslib/libts0_1.22-1+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/twolame/libtwolame0_0.4.0-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tzdata/tzdata_2021a-1+deb11u11_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/ucf/ucf_3.0043_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/unbound/libunbound8_1.17.1-2~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/libblkid-dev_2.36.1-8+deb11u2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/libblkid1_2.36.1-8+deb11u2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/libfdisk1_2.36.1-8+deb11u2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/libmount-dev_2.36.1-8+deb11u2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/libmount1_2.36.1-8+deb11u2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/libuuid1_2.36.1-8+deb11u2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/mount_2.36.1-8+deb11u2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/util-linux_2.36.1-8+deb11u2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/uuid-dev_2.36.1-8+deb11u2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/v/valgrind/valgrind_3.16.1-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/v/vulkan-loader/libvulkan-dev_1.3.224.0-1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/v/vulkan-loader/libvulkan1_1.3.224.0-1~bpo11+1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wavpack/libwavpack1_5.4.0-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland-protocols/wayland-protocols_1.20-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-bin_1.18.0-2~exp1.1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-client0_1.18.0-2~exp1.1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-cursor0_1.18.0-2~exp1.1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-dev_1.18.0-2~exp1.1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-egl-backend-dev_1.18.0-2~exp1.1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-egl1_1.18.0-2~exp1.1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-server0_1.18.0-2~exp1.1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/webrtc-audio-processing/libwebrtc-audio-processing1_0.3-1+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/x264/libx264-160_0.160.3011+gitcde9a93-2.1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/x265/libx265-192_3.4-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util-image/libxcb-image0-dev_0.4.0-1+b3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util-image/libxcb-image0_0.4.0-1+b3_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util-keysyms/libxcb-keysyms1_0.4.0-1+b2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0-dev_0.3.9-1+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0_0.3.9-1+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util-wm/libxcb-icccm4_0.4.1-1.1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util/libxcb-util-dev_0.4.0-1+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util/libxcb-util1_0.4.0-1+b1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xft/libxft-dev_2.3.2-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xft/libxft2_2.3.2-2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xkeyboard-config/xkb-data_2.29-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorg-sgml-doctools/xorg-sgml-doctools_1.11-1.1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorg/x11-common_7.7+22_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-core-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-input-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-randr-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-record-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-render-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-scrnsaver-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-xext-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-xf86vidmode-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-xinerama-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xtrans/xtrans-dev_1.4.0-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xvidcore/libxvidcore4_1.3.7-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xz-utils/liblzma-dev_5.2.5-2.1~deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xz-utils/liblzma5_5.2.5-2.1~deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xz-utils/xz-utils_5.2.5-2.1~deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/z/z3/libz3-4_4.8.10-1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/z/zeromq3/libzmq5_4.3.4-1+deb11u1_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-2+deb11u2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/z/zlib/zlib1g_1.2.11.dfsg-2+deb11u2_armhf.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/z/zvbi/libzvbi-common_0.2.35-18_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/z/zvbi/libzvbi0_0.2.35-18_armhf.deb diff --git a/naiveproxy/src/build/linux/sysroot_scripts/generated_package_lists/bullseye.i386 b/naiveproxy/src/build/linux/sysroot_scripts/generated_package_lists/bullseye.i386 index 7db34b8232..5cc58e8b11 100644 --- a/naiveproxy/src/build/linux/sysroot_scripts/generated_package_lists/bullseye.i386 +++ b/naiveproxy/src/build/linux/sysroot_scripts/generated_package_lists/bullseye.i386 @@ -1,468 +1,637 @@ -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/alsa-lib/libasound2-dev_1.2.4-1.1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/alsa-lib/libasound2_1.2.4-1.1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/aom/libaom0_1.0.0.errata1-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/aom/libaom3_3.6.0-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.38.0-4~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.38.0-4~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-core/libatspi2.0-0_2.44.1-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-core/libatspi2.0-dev_2.44.1-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/atk1.0/libatk1.0-0_2.38.0-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/atk1.0/libatk1.0-dev_2.38.0-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/attr/libattr1_2.4.48-6_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/audit/libaudit1_3.0-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/avahi/libavahi-client3_0.8-5+deb11u2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/avahi/libavahi-common3_0.8-5+deb11u2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/bluez/libbluetooth-dev_5.55-3.1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/bluez/libbluetooth3_5.55-3.1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/brotli/libbrotli-dev_1.0.9-2+b2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/brotli/libbrotli1_1.0.9-2+b2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/bzip2/libbz2-1.0_1.0.8-4_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo-gobject2_1.16.0-5_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo-script-interpreter2_1.16.0-5_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo2-dev_1.16.0-5_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo2_1.16.0-5_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/chromaprint/libchromaprint1_1.5.0-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cjson/libcjson1_1.7.14-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/codec2/libcodec2-0.9_0.9.2-4_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/codec2/libcodec2-1.0_1.0.5-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/colord/libcolord2_1.4.5-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcups2-dev_2.3.3op2-3+deb11u2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcups2_2.3.3op2-3+deb11u2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcupsimage2-dev_2.3.3op2-3+deb11u2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcupsimage2_2.3.3op2-3+deb11u2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/curl/libcurl3-gnutls_7.88.1-7~bpo11+2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/curl/libcurl4-gnutls-dev_7.88.1-7~bpo11+2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cyrus-sasl2/libsasl2-2_2.1.27+dfsg-2.1+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dav1d/libdav1d4_0.7.1-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dav1d/libdav1d6_1.0.0-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.8_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-6_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dbus/libdbus-1-3_1.12.24-0+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dbus/libdbus-1-dev_1.12.24-0+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/double-conversion/libdouble-conversion3_3.1.5-6.1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/e2fsprogs/comerr-dev_2.1-1.46.6-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/e2fsprogs/libcom-err2_1.46.6-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/elfutils/libelf-dev_0.187-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/elfutils/libelf1_0.187-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/expat/libexpat1-dev_2.2.10-2+deb11u5_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/expat/libexpat1_2.2.10-2+deb11u5_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavcodec-dev_4.3.5-0+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavcodec58_4.3.5-0+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavcodec59_5.1.3-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavformat-dev_4.3.5-0+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavformat59_5.1.3-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavutil-dev_4.3.5-0+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavutil56_4.3.5-0+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavutil57_5.1.3-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libswresample-dev_4.3.5-0+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libswresample3_4.3.5-0+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libswresample4_5.1.3-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/flac/libflac-dev_1.3.3-2+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/flac/libflac8_1.3.3-2+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fontconfig/libfontconfig-dev_2.13.1-4.2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fontconfig/libfontconfig1_2.13.1-4.2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/freetype/libfreetype-dev_2.10.4+dfsg-1+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/freetype/libfreetype6_2.10.4+dfsg-1+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fribidi/libfribidi-dev_1.0.8-2+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fribidi/libfribidi0_1.0.8-2+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/game-music-emu/libgme0_0.6.3-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libasan6_10.2.1-6_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libatomic1_10.2.1-6_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libgcc-10-dev_10.2.1-6_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libgcc-s1_10.2.1-6_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libgomp1_10.2.1-6_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libitm1_10.2.1-6_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libquadmath0_10.2.1-6_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libstdc++-10-dev_10.2.1-6_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libstdc++6_10.2.1-6_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libubsan1_10.2.1-6_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-0_2.42.2+dfsg-1+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-dev_2.42.2+dfsg-1+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glib2.0/libglib2.0-0_2.66.8-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glib2.0/libglib2.0-dev_2.66.8-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glibc/libc6-dev_2.31-13+deb11u5_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glibc/libc6_2.31-13+deb11u5_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gmp/libgmp10_6.2.1+dfsg-1+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls-dane0_3.7.1-5+deb11u3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls-openssl27_3.7.1-5+deb11u3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls28-dev_3.7.1-5+deb11u3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls30_3.7.1-5+deb11u3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutlsxx28_3.7.1-5+deb11u3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphene/libgraphene-1.0-0_1.10.4+dfsg1-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphene/libgraphene-1.0-dev_1.10.4+dfsg1-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphite2/libgraphite2-3_1.3.14-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphite2/libgraphite2-dev_1.3.14-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.33-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk+3.0/libgtk-3-0_3.24.24-4+deb11u3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.24-4+deb11u3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk4/libgtk-4-1_4.8.3+ds-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk4/libgtk-4-dev_4.8.3+ds-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz-dev_2.7.4-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz-gobject0_2.7.4-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz-icu0_2.7.4-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz0b_2.7.4-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/highway/libhwy1_1.0.3-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git180724-3+b2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/i/icu/libicu67_67.1-7_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/jbigkit/libjbig-dev_2.1-3.1+b2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/jpeg-xl/libjxl0.7_0.7.0-10_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/json-glib/libjson-glib-1.0-0_1.6.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/keyutils/libkeyutils1_1.6.1-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/krb5-multidev_1.18.3-6+deb11u3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libgssapi-krb5-2_1.18.3-6+deb11u3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libgssrpc4_1.18.3-6+deb11u3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libk5crypto3_1.18.3-6+deb11u3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkadm5clnt-mit12_1.18.3-6+deb11u3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkadm5srv-mit12_1.18.3-6+deb11u3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkdb5-10_1.18.3-6+deb11u3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkrb5-3_1.18.3-6+deb11u3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkrb5-dev_1.18.3-6+deb11u3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkrb5support0_1.18.3-6+deb11u3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lame/libmp3lame0_3.100-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lcms2/liblcms2-2_2.12~rc1-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lerc/liblerc4_4.0.0+ds-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/linux/linux-libc-dev_6.1.20-2~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lz4/liblz4-1_1.9.3-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lzo2/liblzo2-2_2.10-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/liba/libasyncns/libasyncns0_0.8-6+b2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libb/libb2/libb2-1_0.98.1-1.1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libb/libbluray/libbluray2_1.2.1-4+deb11u2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libb/libbsd/libbsd0_0.11.3-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-2.2+b1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcap2/libcap-dev_2.44-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcap2/libcap2_2.44-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcloudproviders/libcloudproviders0_0.3.0-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdatrie/libdatrie-dev_0.2.13-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdatrie/libdatrie1_0.2.13-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr492+repack1-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr492+repack1-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_18.10.20180917~bzr492+repack1-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_18.10.20180917~bzr492+repack1-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdeflate/libdeflate-dev_1.10-2~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdeflate/libdeflate0_1.10-2~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.104-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-dev_2.4.104-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-intel1_2.4.104-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-nouveau2_2.4.104-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-radeon1_2.4.104-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm2_2.4.104-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libepoxy/libepoxy-dev_1.5.8-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libepoxy/libepoxy0_1.5.8-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libevdev/libevdev-dev_1.11.0+dfsg-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libevdev/libevdev2_1.11.0+dfsg-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libevent/libevent-2.1-7_2.1.12-stable-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libf/libffi/libffi-dev_3.3-6_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libf/libffi/libffi7_3.3-6_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.7-6_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgcrypt20/libgcrypt20_1.8.7-6_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libegl-dev_1.3.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libegl1_1.3.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgl-dev_1.3.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgl1_1.3.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgles-dev_1.3.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgles1_1.3.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgles2_1.3.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglvnd-dev_1.3.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglvnd0_1.3.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglx-dev_1.3.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglx0_1.3.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libopengl0_1.3.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgpg-error/libgpg-error-dev_1.38-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgpg-error/libgpg-error0_1.38-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgsm/libgsm1_1.0.18-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgudev/libgudev-1.0-0_234-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libice/libice6_1.0.10-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libidl/libidl-2-0_0.8.14-4+b12_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libidn/libidn11_1.33-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libidn2/libidn2-0_2.3.0-5_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libinput/libinput-dev_1.16.4-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libinput/libinput10_1.16.4-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_2.0.6-4_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_2.0.6-4_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.9.4-4_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjsoncpp/libjsoncpp24_1.9.4-4_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libm/libmd/libmd0_1.0.3-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libn/libnsl/libnsl2_1.3.0-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b10_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libo/libogg/libogg-dev_1.3.4-0.1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libo/libogg/libogg0_1.3.4-0.1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libo/libopenmpt/libopenmpt0_0.4.11-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpciaccess/libpciaccess0_0.16-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpgm/libpgm-5.3-0_5.3.128~dfsg-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpng1.6/libpng-dev_1.6.37-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpng1.6/libpng16-16_1.6.37-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libproxy/libproxy1v5_0.4.17-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpsl/libpsl5_0.21.0-1.2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.4-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libr/librabbitmq/librabbitmq4_0.10.0-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libr/librest/librest-0.7-0_0.8.1-1.1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libr/librist/librist4_0.2.7+dfsg-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libr/librsvg/librsvg2-2_2.50.3+dfsg-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libselinux/libselinux1-dev_3.1-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libselinux/libselinux1_3.1-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsepol/libsepol1-dev_3.1-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsepol/libsepol1_3.1-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsm/libsm6_1.2.3-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsndfile/libsndfile1_1.0.31-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsodium/libsodium23_1.0.18-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.72.0-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsoup2.4/libsoup2.4-1_2.72.0-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsoxr/libsoxr0_0.1.3-4_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libssh/libssh-gcrypt-4_0.9.5-1+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libssh2/libssh2-1_1.9.0-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtasn1-6/libtasn1-6_4.16.0-2+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libthai/libthai-dev_0.1.28-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libthai/libthai0_0.1.28-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtheora/libtheora0_1.1.1+dfsg.1-15_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtirpc/libtirpc3_1.3.1-1+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtool/libltdl7_2.4.6-15_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libudfread/libudfread0_1.1.1-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libunistring/libunistring2_0.9.10-4_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libutempter/libutempter-dev_1.2.1-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libutempter/libutempter0_1.2.1-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-dev_2.17.0-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-drm2_2.17.0-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-glx2_2.17.0-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-wayland2_2.17.0-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-x11-2_2.17.0-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva2_2.17.0-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvdpau/libvdpau1_1.4-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvorbis/libvorbis0a_1.3.7-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvorbis/libvorbisenc2_1.3.7-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvorbis/libvorbisfile3_1.3.7-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvpx/libvpx-dev_1.9.0-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvpx/libvpx6_1.9.0-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvpx/libvpx7_1.12.0-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwacom/libwacom2_1.8-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebp-dev_0.6.1-2.1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebp6_0.6.1-2.1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebp7_1.2.4-0.2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2.1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebpmux3_0.6.1-2.1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-6_1.7.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-dev_1.7.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-xcb-dev_1.7.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-xcb1_1.7.2-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxau/libxau-dev_1.0.9-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxau/libxau6_1.0.9-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri2-0_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri3-0_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri3-dev_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-glx0-dev_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-glx0_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-present-dev_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-present0_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-randr0-dev_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-randr0_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-render0-dev_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-render0_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shape0-dev_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shape0_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shm0-dev_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shm0_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-sync-dev_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-sync1_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xfixes0-dev_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xfixes0_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xinerama0_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xinput0_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xkb1_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb1-dev_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb1_1.14-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.5-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcomposite/libxcomposite1_0.4.5-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcrypt/libcrypt-dev_4.4.18-4_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcrypt/libcrypt1_4.4.18-4_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcursor/libxcursor-dev_1.2.0-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcursor/libxcursor1_1.2.0-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdamage/libxdamage-dev_1.1.5-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdamage/libxdamage1_1.1.5-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxext/libxext-dev_1.3.3-1.1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxext/libxext6_1.3.3-1.1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxfixes/libxfixes3_5.0.3-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxi/libxi-dev_1.7.10-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxi/libxi6_1.7.10-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxinerama/libxinerama1_1.1.4-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxkbcommon/libxkbcommon-dev_1.0.3-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxkbcommon/libxkbcommon-x11-0_1.0.3-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxkbcommon/libxkbcommon0_1.0.3-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxml2/libxml2-dev_2.9.10+dfsg-6.7+deb11u4_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxml2/libxml2_2.9.10+dfsg-6.7+deb11u4_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxshmfence/libxshmfence-dev_1.3-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxslt/libxslt1-dev_1.1.34-4+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxslt/libxslt1.1_1.1.34-4+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxss/libxss-dev_1.2.3-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxss/libxss1_1.2.3-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxt/libxt-dev_1.2.0-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxt/libxt6_1.2.0-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxtst/libxtst6_1.2.3-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libz/libzstd/libzstd1_1.4.8+dfsg-2.1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mbedtls/libmbedcrypto7_2.28.3-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/md4c/libmd4c0_0.4.7-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libegl1-mesa-dev_20.3.5-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libegl1-mesa_20.3.5-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgbm-dev_20.3.5-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgbm1_20.3.5-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgl1-mesa-dev_20.3.5-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgl1-mesa-glx_20.3.5-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libglapi-mesa_20.3.5-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libwayland-egl1-mesa_20.3.5-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/mesa-common-dev_20.3.5-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/minizip/libminizip-dev_1.1-8+b1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/minizip/libminizip1_1.1-8+b1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mpg123/libmpg123-0_1.26.4-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mtdev/libmtdev1_1.1.6-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libncurses-dev_6.2+20201114-2+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libncurses6_6.2+20201114-2+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libncursesw6_6.2+20201114-2+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libtinfo6_6.2+20201114-2+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nettle/libhogweed6_3.7.3-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nettle/libnettle8_3.7.3-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nghttp2/libnghttp2-14_1.43.0-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/norm/libnorm1_1.5.9+dfsg-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nspr/libnspr4-dev_4.29-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nspr/libnspr4_4.29-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nss/libnss3-dev_3.61-1+deb11u3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nss/libnss3_3.61-1+deb11u3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/numactl/libnuma1_2.0.12-1+b1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/ocl-icd/ocl-icd-libopencl1_2.2.14-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openjpeg2/libopenjp2-7_2.4.0-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openldap/libldap-2.4-2_2.4.59+dfsg-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openssl/libssl-dev_1.1.1n-0+deb11u4_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openssl/libssl1.1_1.1.1n-0+deb11u4_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/opus/libopus-dev_1.3.1-0.1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/opus/libopus0_1.3.1-0.1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/p11-kit/libp11-kit0_0.23.22-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pam/libpam0g-dev_1.4.0-9+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pam/libpam0g_1.4.0-9+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpango-1.0-0_1.46.2-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpango1.0-dev_1.46.2-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpangocairo-1.0-0_1.46.2-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpangoft2-1.0-0_1.46.2-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpangoxft-1.0-0_1.46.2-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5.1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pciutils/libpci-dev_3.7.0-5_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pciutils/libpci3_3.7.0-5_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-16-0_10.36-2+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-32-0_10.36-2+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-8-0_10.36-2+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-dev_10.36-2+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-posix2_10.36-2+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre16-3_8.39-13_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre3-dev_8.39-13_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre32-3_8.39-13_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre3_8.39-13_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcrecpp0v5_8.39-13_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pipewire/libpipewire-0.3-0_0.3.65-2~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pipewire/libpipewire-0.3-dev_0.3.65-2~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pipewire/libspa-0.2-dev_0.3.65-2~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pixman/libpixman-1-0_0.40.0-1.1~deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pixman/libpixman-1-dev_0.40.0-1.1~deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pulseaudio/libpulse-dev_14.2-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pulseaudio/libpulse-mainloop-glib0_14.2-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pulseaudio/libpulse0_14.2-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6concurrent6_6.4.2+dfsg-10~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6core6_6.4.2+dfsg-10~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6dbus6_6.4.2+dfsg-10~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6gui6_6.4.2+dfsg-10~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6network6_6.4.2+dfsg-10~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6opengl6_6.4.2+dfsg-10~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6openglwidgets6_6.4.2+dfsg-10~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6printsupport6_6.4.2+dfsg-10~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6sql6_6.4.2+dfsg-10~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6test6_6.4.2+dfsg-10~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6widgets6_6.4.2+dfsg-10~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6xml6_6.4.2+dfsg-10~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/qt6-base-dev-tools_6.4.2+dfsg-10~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/qt6-base-dev_6.4.2+dfsg-10~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5concurrent5_5.15.2+dfsg-9_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5core5a_5.15.2+dfsg-9_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5dbus5_5.15.2+dfsg-9_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5gui5_5.15.2+dfsg-9_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5network5_5.15.2+dfsg-9_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5printsupport5_5.15.2+dfsg-9_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5sql5_5.15.2+dfsg-9_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5test5_5.15.2+dfsg-9_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5widgets5_5.15.2+dfsg-9_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5xml5_5.15.2+dfsg-9_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/qtbase5-dev-tools_5.15.2+dfsg-9_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/qtbase5-dev_5.15.2+dfsg-9_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/re2/libre2-9_20210201+dfsg-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/re2/libre2-dev_20210201+dfsg-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/rtmpdump/librtmp1_2.4+20151223.gitfa8646d.1-2+b2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/rust-rav1e/librav1e0_0.5.1-6_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/shared-mime-info/shared-mime-info_2.0-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/shine/libshine3_3.1.1-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/snappy/libsnappy-dev_1.1.8-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/snappy/libsnappy1v5_1.1.8-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/speech-dispatcher/libspeechd-dev_0.11.4-2~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/speech-dispatcher/libspeechd2_0.11.4-2~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/speex/libspeex1_1.2~rc1.2-1.1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/sqlite3/libsqlite3-0_3.34.1-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/srt/libsrt1.5-gnutls_1.5.1-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/svt-av1/libsvtav1enc1_1.4.1+dfsg-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libsystemd-dev_252.5-2~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libsystemd0_252.5-2~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libudev-dev_252.5-2~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libudev1_252.5-2~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tcp-wrappers/libwrap0_7.6.q-31_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiff-dev_4.2.0-1+deb11u4_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiff5_4.2.0-1+deb11u4_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiff6_4.5.0-6_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiffxx5_4.2.0-1+deb11u4_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tslib/libts0_1.22-1+b1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/twolame/libtwolame0_0.4.0-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/unbound/libunbound8_1.17.1-2~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libblkid-dev_2.36.1-8+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libblkid1_2.36.1-8+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libmount-dev_2.36.1-8+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libmount1_2.36.1-8+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libuuid1_2.36.1-8+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/uuid-dev_2.36.1-8+deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/v/valgrind/valgrind_3.16.1-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/v/vulkan-loader/libvulkan-dev_1.3.224.0-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/v/vulkan-loader/libvulkan1_1.3.224.0-1~bpo11+1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wavpack/libwavpack1_5.4.0-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland-protocols/wayland-protocols_1.20-1_all.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-bin_1.18.0-2~exp1.1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-client0_1.18.0-2~exp1.1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-cursor0_1.18.0-2~exp1.1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-dev_1.18.0-2~exp1.1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-egl-backend-dev_1.18.0-2~exp1.1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-egl1_1.18.0-2~exp1.1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-server0_1.18.0-2~exp1.1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/x264/libx264-160_0.160.3011+gitcde9a93-2.1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/x264/libx264-164_0.164.3095+gitbaee400-3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/x265/libx265-192_3.4-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/x265/libx265-199_3.5-2+b1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-image/libxcb-image0-dev_0.4.0-1+b3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-image/libxcb-image0_0.4.0-1+b3_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-keysyms/libxcb-keysyms1_0.4.0-1+b2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0-dev_0.3.9-1+b1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0_0.3.9-1+b1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-wm/libxcb-icccm4_0.4.1-1.1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util/libxcb-util-dev_0.4.0-1+b1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util/libxcb-util1_0.4.0-1+b1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xft/libxft-dev_2.3.2-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xft/libxft2_2.3.2-2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xorgproto/x11proto-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xvidcore/libxvidcore4_1.3.7-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xz-utils/liblzma5_5.2.5-2.1~deb11u1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/z/zeromq3/libzmq5_4.3.4-1_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-2+deb11u2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/z/zlib/zlib1g_1.2.11.dfsg-2+deb11u2_i386.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/z/zvbi/libzvbi0_0.2.35-18_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/acl/libacl1_2.2.53-10_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/adduser/adduser_3.118+deb11u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/adwaita-icon-theme/adwaita-icon-theme_3.38.0-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/alsa-lib/libasound2-data_1.2.4-1.1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/alsa-lib/libasound2-dev_1.2.4-1.1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/alsa-lib/libasound2_1.2.4-1.1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/aom/libaom0_1.0.0.errata1-3+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/apparmor/libapparmor1_2.13.6-10_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/argon2/libargon2-1_0~20171227-0.2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.38.0-4~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.38.0-4~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/at-spi2-core/gir1.2-atspi-2.0_2.44.1-1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/at-spi2-core/libatspi2.0-0_2.44.1-1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/at-spi2-core/libatspi2.0-dev_2.44.1-1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/atk1.0/gir1.2-atk-1.0_2.38.0-1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/atk1.0/libatk1.0-0_2.38.0-1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/atk1.0/libatk1.0-data_2.38.0-1~bpo11+1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/atk1.0/libatk1.0-dev_2.38.0-1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/audit/libaudit-common_3.0-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/audit/libaudit1_3.0-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/avahi/libavahi-client3_0.8-5+deb11u2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/avahi/libavahi-common-data_0.8-5+deb11u2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/avahi/libavahi-common3_0.8-5+deb11u2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/binutils/binutils-common_2.35.2-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/binutils/binutils-i686-linux-gnu_2.35.2-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/binutils/binutils_2.35.2-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/binutils/libbinutils_2.35.2-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/binutils/libctf-nobfd0_2.35.2-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/binutils/libctf0_2.35.2-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/bluez/libbluetooth-dev_5.55-3.1+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/bluez/libbluetooth3_5.55-3.1+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/brotli/libbrotli-dev_1.0.9-2+b2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/brotli/libbrotli1_1.0.9-2+b2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/build-essential/build-essential_12.9_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/bzip2/bzip2_1.0.8-4_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/bzip2/libbz2-1.0_1.0.8-4_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cairo/libcairo-gobject2_1.16.0-5_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cairo/libcairo-script-interpreter2_1.16.0-5_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cairo/libcairo2-dev_1.16.0-5_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cairo/libcairo2_1.16.0-5_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/chromaprint/libchromaprint1_1.5.0-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/codec2/libcodec2-0.9_0.9.2-4_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/colord/gir1.2-colord-1.0_1.4.5-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/colord/libcolord-dev_1.4.5-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/colord/libcolord2_1.4.5-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/coreutils/coreutils_8.32-4_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cryptsetup/libcryptsetup12_2.3.7-1+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cups/libcups2-dev_2.3.3op2-3+deb11u8_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cups/libcups2_2.3.3op2-3+deb11u8_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cups/libcupsimage2-dev_2.3.3op2-3+deb11u8_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cups/libcupsimage2_2.3.3op2-3+deb11u8_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/curl/libcurl3-gnutls_7.88.1-10+deb12u6~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/curl/libcurl4-gnutls-dev_7.88.1-10+deb12u6~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cyrus-sasl2/libsasl2-2_2.1.27+dfsg-2.1+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cyrus-sasl2/libsasl2-modules-db_2.1.27+dfsg-2.1+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dav1d/libdav1d4_0.7.1-3+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.8_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/dbus-bin_1.14.10-1~deb12u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/dbus-daemon_1.14.10-1~deb12u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/dbus-session-bus-common_1.14.10-1~deb12u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/dbus-system-bus-common_1.14.10-1~deb12u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/dbus-user-session_1.14.10-1~deb12u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/dbus_1.14.10-1~deb12u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/libdbus-1-3_1.12.28-0+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/libdbus-1-dev_1.12.28-0+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dconf/dconf-gsettings-backend_0.38.0-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dconf/dconf-service_0.38.0-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dconf/libdconf1_0.38.0-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/debconf/debconf_1.5.77_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/double-conversion/libdouble-conversion3_3.1.5-6.1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dpkg/dpkg-dev_1.20.13_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dpkg/dpkg_1.20.13_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dpkg/libdpkg-perl_1.20.13_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/e/e2fsprogs/comerr-dev_2.1-1.46.6-1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/e/e2fsprogs/libcom-err2_1.46.6-1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/e/elfutils/libelf-dev_0.187-1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/e/elfutils/libelf1_0.187-1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/e/expat/libexpat1-dev_2.2.10-2+deb11u5_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/e/expat/libexpat1_2.2.10-2+deb11u5_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libavcodec-dev_4.3.7-0+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libavcodec58_4.3.7-0+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libavformat-dev_4.3.7-0+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libavformat58_4.3.7-0+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libavutil-dev_4.3.7-0+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libavutil56_4.3.7-0+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libswresample-dev_4.3.7-0+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libswresample3_4.3.7-0+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/flac/libflac-dev_1.3.3-2+deb11u2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/flac/libflac8_1.3.3-2+deb11u2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fontconfig/fontconfig-config_2.13.1-4.2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fontconfig/fontconfig_2.13.1-4.2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fontconfig/libfontconfig-dev_2.13.1-4.2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fontconfig/libfontconfig1-dev_2.13.1-4.2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fontconfig/libfontconfig1_2.13.1-4.2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fonts-dejavu/fonts-dejavu-core_2.37-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/freetype/libfreetype-dev_2.10.4+dfsg-1+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/freetype/libfreetype6-dev_2.10.4+dfsg-1+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/freetype/libfreetype6_2.10.4+dfsg-1+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fribidi/libfribidi-dev_1.0.8-2+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fribidi/libfribidi0_1.0.8-2+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/game-music-emu/libgme0_0.6.3-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/cpp-10_10.2.1-6_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/g++-10_10.2.1-6_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/gcc-10-base_10.2.1-6_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/gcc-10_10.2.1-6_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libasan6_10.2.1-6_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libatomic1_10.2.1-6_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libcc1-0_10.2.1-6_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libgcc-10-dev_10.2.1-6_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libgcc-s1_10.2.1-6_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libgomp1_10.2.1-6_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libitm1_10.2.1-6_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libquadmath0_10.2.1-6_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libstdc++-10-dev_10.2.1-6_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libstdc++6_10.2.1-6_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libubsan1_10.2.1-6_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-defaults/cpp_10.2.1-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-defaults/g++_10.2.1-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-defaults/gcc_10.2.1-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdbm/libgdbm-compat4_1.19-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdbm/libgdbm6_1.19-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdk-pixbuf/gir1.2-gdkpixbuf-2.0_2.42.2+dfsg-1+deb11u2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-0_2.42.2+dfsg-1+deb11u2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-dev_2.42.2+dfsg-1+deb11u2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-bin_2.42.2+dfsg-1+deb11u2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-common_2.42.2+dfsg-1+deb11u2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib-networking/glib-networking-common_2.66.0-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib-networking/glib-networking-services_2.66.0-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib-networking/glib-networking_2.66.0-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib2.0/libglib2.0-0_2.66.8-1+deb11u4_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib2.0/libglib2.0-bin_2.66.8-1+deb11u4_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib2.0/libglib2.0-data_2.66.8-1+deb11u4_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib2.0/libglib2.0-dev-bin_2.66.8-1+deb11u4_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib2.0/libglib2.0-dev_2.66.8-1+deb11u4_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glibc/libc-dev-bin_2.31-13+deb11u5_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glibc/libc6-dbg_2.31-13+deb11u5_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glibc/libc6-dev_2.31-13+deb11u11_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glibc/libc6-dev_2.31-13+deb11u5_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glibc/libc6_2.31-13+deb11u5_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gmp/libgmp-dev_6.2.1+dfsg-1+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gmp/libgmp10_6.2.1+dfsg-1+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gmp/libgmpxx4ldbl_6.2.1+dfsg-1+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gnutls28/libgnutls-dane0_3.7.1-5+deb11u5_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gnutls28/libgnutls-openssl27_3.7.1-5+deb11u5_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gnutls28/libgnutls28-dev_3.7.1-5+deb11u5_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gnutls28/libgnutls30_3.7.1-5+deb11u5_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gnutls28/libgnutlsxx28_3.7.1-5+deb11u5_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gobject-introspection/gir1.2-freedesktop_1.66.1-1+b1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gobject-introspection/gir1.2-glib-2.0_1.66.1-1+b1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gobject-introspection/gobject-introspection_1.66.1-1+b1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gobject-introspection/libgirepository-1.0-1_1.66.1-1+b1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gobject-introspection/libgirepository1.0-dev_1.66.1-1+b1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/graphene/gir1.2-graphene-1.0_1.10.4+dfsg1-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/graphene/libgraphene-1.0-0_1.10.4+dfsg1-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/graphene/libgraphene-1.0-dev_1.10.4+dfsg1-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/graphite2/libgraphite2-3_1.3.14-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/graphite2/libgraphite2-dev_1.3.14-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gsettings-desktop-schemas/gsettings-desktop-schemas_3.38.0-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+2.0/gir1.2-gtk-2.0_2.24.33-2+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.33-2+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+2.0/libgtk2.0-common_2.24.33-2+deb11u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+2.0/libgtk2.0-dev_2.24.33-2+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+3.0/gir1.2-gtk-3.0_3.24.24-4+deb11u4_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+3.0/gtk-update-icon-cache_3.24.24-4+deb11u4_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+3.0/libgtk-3-0_3.24.24-4+deb11u4_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+3.0/libgtk-3-common_3.24.24-4+deb11u4_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.24-4+deb11u4_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk4/gir1.2-gtk-4.0_4.8.3+ds-2+deb12u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk4/libgtk-4-1_4.8.3+ds-2+deb12u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk4/libgtk-4-common_4.8.3+ds-2+deb12u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk4/libgtk-4-dev_4.8.3+ds-2+deb12u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/h/harfbuzz/gir1.2-harfbuzz-0.0_2.7.4-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/h/harfbuzz/libharfbuzz-dev_2.7.4-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/h/harfbuzz/libharfbuzz-gobject0_2.7.4-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/h/harfbuzz/libharfbuzz-icu0_2.7.4-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/h/harfbuzz/libharfbuzz0b_2.7.4-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/h/hicolor-icon-theme/hicolor-icon-theme_0.17-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/i/icu/icu-devtools_67.1-7_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/i/icu/libicu-dev_67.1-7_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/i/icu/libicu67_67.1-7_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/i/iptables/libip4tc2_1.8.7-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/i/isl/libisl23_0.23-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/j/jbigkit/libjbig-dev_2.1-3.1+b2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/j/json-c/libjson-c5_0.15-2+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/j/json-glib/libjson-glib-1.0-0_1.6.2-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/j/json-glib/libjson-glib-1.0-common_1.6.2-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/keyutils/libkeyutils1_1.6.1-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/kmod/libkmod2_28-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/krb5-multidev_1.18.3-6+deb11u5_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libgssapi-krb5-2_1.18.3-6+deb11u5_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libgssrpc4_1.18.3-6+deb11u5_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libk5crypto3_1.18.3-6+deb11u5_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libkadm5clnt-mit12_1.18.3-6+deb11u5_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libkadm5srv-mit12_1.18.3-6+deb11u5_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libkdb5-10_1.18.3-6+deb11u5_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libkrb5-3_1.18.3-6+deb11u5_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libkrb5-dev_1.18.3-6+deb11u5_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libkrb5support0_1.18.3-6+deb11u5_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lame/libmp3lame0_3.100-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lcms2/liblcms2-2_2.12~rc1-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lcms2/liblcms2-dev_2.12~rc1-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lerc/liblerc4_4.0.0+ds-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/linux/linux-libc-dev_6.1.94-1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/llvm-toolchain-11/libllvm11_11.0.1-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lm-sensors/libsensors-config_3.6.0-7_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lm-sensors/libsensors5_3.6.0-7_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lsb/lsb-base_11.1.0_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lvm2/dmsetup_1.02.175-2.1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lvm2/libdevmapper1.02.1_1.02.175-2.1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lz4/liblz4-1_1.9.3-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lzo2/liblzo2-2_2.10-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/liba/libasyncns/libasyncns0_0.8-6+b2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libb/libb2/libb2-1_0.98.1-1.1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libb/libbluray/libbluray2_1.2.1-4+deb11u2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libb/libbsd/libbsd0_0.11.3-1+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-2.2+b1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libc/libcap2/libcap-dev_2.44-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libc/libcap2/libcap2_2.44-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libc/libcloudproviders/libcloudproviders0_0.3.0-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdatrie/libdatrie-dev_0.2.13-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdatrie/libdatrie1_0.2.13-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdbusmenu/gir1.2-dbusmenu-glib-0.4_18.10.20180917~bzr492+repack1-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr492+repack1-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr492+repack1-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdeflate/libdeflate-dev_1.10-2~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdeflate/libdeflate0_1.10-2~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.104-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-common_2.4.104-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-dev_2.4.104-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-intel1_2.4.104-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-nouveau2_2.4.104-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-radeon1_2.4.104-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm2_2.4.104-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libe/libedit/libedit2_3.1-20191231-2+b1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libe/libepoxy/libepoxy-dev_1.5.8-1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libe/libepoxy/libepoxy0_1.5.8-1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libe/libevdev/libevdev-dev_1.11.0+dfsg-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libe/libevdev/libevdev2_1.11.0+dfsg-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libe/libevent/libevent-2.1-7_2.1.12-stable-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libf/libffi/libffi-dev_3.3-6_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libf/libffi/libffi7_3.3-6_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.7-6_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgcrypt20/libgcrypt20_1.8.7-6_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglu/libglu1-mesa-dev_9.0.1-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglu/libglu1-mesa_9.0.1-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libegl-dev_1.3.2-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libegl1_1.3.2-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libgl-dev_1.3.2-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libgl1_1.3.2-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libgles-dev_1.3.2-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libgles1_1.3.2-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libgles2_1.3.2-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libglvnd-dev_1.3.2-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libglvnd0_1.3.2-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libglx-dev_1.3.2-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libglx0_1.3.2-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libopengl-dev_1.3.2-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libopengl0_1.3.2-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgpg-error/libgpg-error-dev_1.38-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgpg-error/libgpg-error0_1.38-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgsm/libgsm1_1.0.18-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgudev/gir1.2-gudev-1.0_234-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgudev/libgudev-1.0-0_234-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgudev/libgudev-1.0-dev_234-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libice/libice-dev_1.0.10-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libice/libice6_1.0.10-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libidn2/libidn2-0_2.3.0-5_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libidn2/libidn2-dev_2.3.0-5_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libinput/libinput-bin_1.16.4-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libinput/libinput-dev_1.16.4-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libinput/libinput10_1.16.4-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libj/libjpeg-turbo/libjpeg-dev_2.0.6-4_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_2.0.6-4_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_2.0.6-4_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.9.4-4_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libj/libjsoncpp/libjsoncpp24_1.9.4-4_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libm/libmd/libmd0_1.0.3-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libn/libnsl/libnsl-dev_1.3.0-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libn/libnsl/libnsl2_1.3.0-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libo/libogg/libogg-dev_1.3.4-0.1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libo/libogg/libogg0_1.3.4-0.1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libo/libopenmpt/libopenmpt0_0.4.11-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libpciaccess/libpciaccess0_0.16-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libpgm/libpgm-5.3-0_5.3.128~dfsg-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libpng1.6/libpng-dev_1.6.37-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libpng1.6/libpng16-16_1.6.37-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libproxy/libproxy1v5_0.4.17-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libpsl/libpsl5_0.21.0-1.2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.4-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libr/librabbitmq/librabbitmq4_0.10.0-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libr/librest/librest-0.7-0_0.8.1-1.1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libr/librsvg/librsvg2-2_2.50.3+dfsg-1+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libseccomp/libseccomp2_2.5.1-1+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libselinux/libselinux1-dev_3.1-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libselinux/libselinux1_3.1-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsemanage/libsemanage-common_3.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsemanage/libsemanage1_3.1-1+b2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsepol/libsepol1-dev_3.1-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsepol/libsepol1_3.1-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libset-scalar-perl/libset-scalar-perl_1.29-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsm/libsm-dev_1.2.3-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsm/libsm6_1.2.3-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsndfile/libsndfile1_1.0.31-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsodium/libsodium23_1.0.18-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.72.0-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsoup2.4/libsoup2.4-1_2.72.0-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsoxr/libsoxr0_0.1.3-4_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libssh/libssh-gcrypt-4_0.9.8-0+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libssh2/libssh2-1_1.9.0-2+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libtasn1-6/libtasn1-6-dev_4.16.0-2+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libtasn1-6/libtasn1-6_4.16.0-2+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libthai/libthai-data_0.1.28-3_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libthai/libthai-dev_0.1.28-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libthai/libthai0_0.1.28-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libtheora/libtheora0_1.1.1+dfsg.1-15_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libtirpc/libtirpc-common_1.3.1-1+deb11u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libtirpc/libtirpc-dev_1.3.1-1+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libtirpc/libtirpc3_1.3.1-1+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libu/libudfread/libudfread0_1.1.1-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libu/libunistring/libunistring2_0.9.10-4_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libu/libutempter/libutempter-dev_1.2.1-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libu/libutempter/libutempter0_1.2.1-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libva/libva-dev_2.17.0-1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libva/libva-drm2_2.17.0-1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libva/libva-glx2_2.17.0-1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libva/libva-wayland2_2.17.0-1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libva/libva-x11-2_2.17.0-1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libva/libva2_2.17.0-1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libvdpau/libvdpau1_1.4-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libvorbis/libvorbis0a_1.3.7-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libvorbis/libvorbisenc2_1.3.7-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libvorbis/libvorbisfile3_1.3.7-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libvpx/libvpx-dev_1.9.0-1+deb11u3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libvpx/libvpx6_1.9.0-1+deb11u3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwacom/libwacom-common_1.8-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwacom/libwacom-dev_1.8-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwacom/libwacom2_1.8-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwebp/libwebp-dev_0.6.1-2.1+deb11u2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwebp/libwebp6_0.6.1-2.1+deb11u2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwebp/libwebp7_1.2.4-0.2+deb12u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2.1+deb11u2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwebp/libwebpmux3_0.6.1-2.1+deb11u2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libx11/libx11-6_1.7.2-1+deb11u2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libx11/libx11-data_1.7.2-1+deb11u2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libx11/libx11-dev_1.7.2-1+deb11u2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libx11/libx11-xcb-dev_1.7.2-1+deb11u2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libx11/libx11-xcb1_1.7.2-1+deb11u2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxau/libxau-dev_1.0.9-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxau/libxau6_1.0.9-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-dri2-0_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-dri3-0_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-dri3-dev_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-glx0-dev_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-glx0_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-present-dev_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-present0_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-randr0-dev_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-randr0_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-render0-dev_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-render0_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-shape0-dev_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-shape0_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-shm0-dev_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-shm0_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-sync-dev_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-sync1_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-xfixes0-dev_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-xfixes0_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-xinerama0_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-xinput0_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-xkb1_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb1-dev_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb1_1.14-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.5-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcomposite/libxcomposite1_0.4.5-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcrypt/libcrypt-dev_4.4.18-4_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcrypt/libcrypt1_4.4.18-4_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcursor/libxcursor-dev_1.2.0-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcursor/libxcursor1_1.2.0-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxdamage/libxdamage-dev_1.1.5-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxdamage/libxdamage1_1.1.5-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxext/libxext-dev_1.3.3-1.1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxext/libxext6_1.3.3-1.1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxfixes/libxfixes3_5.0.3-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxi/libxi-dev_1.7.10-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxi/libxi6_1.7.10-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxinerama/libxinerama1_1.1.4-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxkbcommon/libxkbcommon-dev_1.0.3-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxkbcommon/libxkbcommon-x11-0_1.0.3-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxkbcommon/libxkbcommon0_1.0.3-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxml2/libxml2-dev_2.9.10+dfsg-6.7+deb11u4_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxml2/libxml2-utils_2.9.10+dfsg-6.7+deb11u4_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxml2/libxml2_2.9.10+dfsg-6.7+deb11u4_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxshmfence/libxshmfence-dev_1.3-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxslt/libxslt1-dev_1.1.34-4+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxslt/libxslt1.1_1.1.34-4+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxss/libxss-dev_1.2.3-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxss/libxss1_1.2.3-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxt/libxt-dev_1.2.0-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxt/libxt6_1.2.0-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxtst/libxtst6_1.2.3-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libz/libzstd/libzstd1_1.4.8+dfsg-2.1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/make-dfsg/make_4.3-4.1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mako/python3-mako_1.1.3+ds1-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/markupsafe/python3-markupsafe_2.0.1-2~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/md4c/libmd4c0_0.4.7-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/media-types/media-types_4.0.0_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libegl-mesa0_20.3.5-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libegl1-mesa-dev_20.3.5-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libgbm-dev_20.3.5-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libgbm1_20.3.5-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libgl1-mesa-dev_20.3.5-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libgl1-mesa-dri_20.3.5-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libglapi-mesa_20.3.5-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libglx-mesa0_20.3.5-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/mesa-common-dev_20.3.5-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/minizip/libminizip-dev_1.1-8+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/minizip/libminizip1_1.1-8+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mpclib3/libmpc3_1.2.0-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mpdecimal/libmpdec3_2.5.1-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mpfr4/libmpfr6_4.1.0-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mpg123/libmpg123-0_1.26.4-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mtdev/libmtdev-dev_1.1.6-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mtdev/libmtdev1_1.1.6-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/ncurses/libncurses-dev_6.2+20201114-2+deb11u2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/ncurses/libncurses6_6.2+20201114-2+deb11u2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/ncurses/libncursesw6_6.2+20201114-2+deb11u2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/ncurses/libtinfo6_6.2+20201114-2+deb11u2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/ncurses/ncurses-bin_6.2+20201114-2+deb11u2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nettle/libhogweed6_3.7.3-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nettle/libnettle8_3.7.3-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nettle/nettle-dev_3.7.3-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nghttp2/libnghttp2-14_1.43.0-1+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/norm/libnorm1_1.5.9+dfsg-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nspr/libnspr4-dev_4.29-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nspr/libnspr4_4.29-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nss/libnss3-dev_3.61-1+deb11u3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nss/libnss3_3.61-1+deb11u3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/numactl/libnuma1_2.0.12-1+b1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/ocl-icd/ocl-icd-libopencl1_2.2.14-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/openjpeg2/libopenjp2-7_2.4.0-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/openldap/libldap-2.4-2_2.4.57+dfsg-3+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/openssl/libssl-dev_1.1.1w-0+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/openssl/libssl1.1_1.1.1w-0+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/opus/libopus-dev_1.3.1-0.1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/opus/libopus0_1.3.1-0.1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/p11-kit/libp11-kit-dev_0.23.22-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/p11-kit/libp11-kit0_0.23.22-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pam/libpam-modules_1.4.0-9+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pam/libpam-runtime_1.4.0-9+deb11u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pam/libpam0g-dev_1.4.0-9+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pam/libpam0g_1.4.0-9+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/gir1.2-pango-1.0_1.46.2-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/libpango-1.0-0_1.46.2-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/libpango1.0-dev_1.46.2-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/libpangocairo-1.0-0_1.46.2-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/libpangoft2-1.0-0_1.46.2-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/libpangoxft-1.0-0_1.46.2-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/pango1.0-tools_1.46.2-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/patch/patch_2.7.6-7_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pci.ids/pci.ids_0.0~2021.02.08-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pciutils/libpci-dev_3.7.0-5_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pciutils/libpci3_3.7.0-5_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre2/libpcre2-16-0_10.36-2+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre2/libpcre2-32-0_10.36-2+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre2/libpcre2-8-0_10.36-2+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre2/libpcre2-dev_10.36-2+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre2/libpcre2-posix2_10.36-2+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre3/libpcre16-3_8.39-13_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre3/libpcre3-dev_8.39-13_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre3/libpcre32-3_8.39-13_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre3/libpcre3_8.39-13_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre3/libpcrecpp0v5_8.39-13_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/perl/libperl5.32_5.32.1-4+deb11u3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/perl/perl-base_5.32.1-4+deb11u3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/perl/perl-modules-5.32_5.32.1-4+deb11u3_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/perl/perl_5.32.1-4+deb11u3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pipewire/libpipewire-0.3-0_0.3.65-2~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pipewire/libpipewire-0.3-dev_0.3.65-2~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pipewire/libspa-0.2-dev_0.3.65-2~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pipewire/libspa-0.2-modules_0.3.65-2~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pixman/libpixman-1-0_0.40.0-1.1~deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pixman/libpixman-1-dev_0.40.0-1.1~deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pkg-config/pkg-config_0.29.2-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pulseaudio/libpulse-dev_14.2-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pulseaudio/libpulse-mainloop-glib0_14.2-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pulseaudio/libpulse0_14.2-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python-markdown/python3-markdown_3.3.4-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3-defaults/libpython3-stdlib_3.9.2-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3-defaults/python3_3.9.2-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3-stdlib-extensions/python3-distutils_3.9.2-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3-stdlib-extensions/python3-lib2to3_3.9.2-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3.9/libpython3.9-minimal_3.9.2-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3.9/libpython3.9-stdlib_3.9.2-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3.9/python3.9-minimal_3.9.2-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3.9/python3.9_3.9.2-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6concurrent6_6.4.2+dfsg-11~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6core6_6.4.2+dfsg-11~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6dbus6_6.4.2+dfsg-11~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6gui6_6.4.2+dfsg-11~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6network6_6.4.2+dfsg-11~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6opengl6_6.4.2+dfsg-11~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6openglwidgets6_6.4.2+dfsg-11~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6printsupport6_6.4.2+dfsg-11~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6sql6_6.4.2+dfsg-11~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6test6_6.4.2+dfsg-11~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6widgets6_6.4.2+dfsg-11~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6xml6_6.4.2+dfsg-11~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/qmake6-bin_6.4.2+dfsg-11~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/qmake6_6.4.2+dfsg-11~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/qt6-base-dev-tools_6.4.2+dfsg-11~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/qt6-base-dev_6.4.2+dfsg-11~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/qt6-qpa-plugins_6.4.2+dfsg-11~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5concurrent5_5.15.2+dfsg-9+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5core5a_5.15.2+dfsg-9+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5dbus5_5.15.2+dfsg-9+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5gui5_5.15.2+dfsg-9+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5network5_5.15.2+dfsg-9+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5printsupport5_5.15.2+dfsg-9+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5sql5_5.15.2+dfsg-9+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5test5_5.15.2+dfsg-9+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5widgets5_5.15.2+dfsg-9+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5xml5_5.15.2+dfsg-9+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/qt5-qmake-bin_5.15.2+dfsg-9+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/qt5-qmake_5.15.2+dfsg-9+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/qtbase5-dev-tools_5.15.2+dfsg-9+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/qtbase5-dev_5.15.2+dfsg-9+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtchooser/qtchooser_66-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/r/re2/libre2-9_20210201+dfsg-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/r/re2/libre2-dev_20210201+dfsg-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/r/readline/libreadline8_8.1-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/r/readline/readline-common_8.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/r/rtmpdump/librtmp1_2.4+20151223.gitfa8646d.1-2+b2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/sensible-utils/sensible-utils_0.0.14_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/setuptools/python3-pkg-resources_66.1.1-1~bpo11+1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/shadow/login_4.8.1-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/shadow/passwd_4.8.1-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/shared-mime-info/shared-mime-info_2.0-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/shine/libshine3_3.1.1-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/snappy/libsnappy-dev_1.1.8-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/snappy/libsnappy1v5_1.1.8-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/speech-dispatcher/libspeechd-dev_0.11.4-2~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/speech-dispatcher/libspeechd2_0.11.4-2~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/speex/libspeex1_1.2~rc1.2-1.1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/sqlite3/libsqlite3-0_3.34.1-3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/srt/libsrt1.4-gnutls_1.4.2-1.3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/libpam-systemd_252.29-1~deb12u1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/libsystemd-dev_252.29-1~deb12u1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/libsystemd-shared_252.29-1~deb12u1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/libsystemd0_252.29-1~deb12u1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/libudev-dev_252.29-1~deb12u1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/libudev1_252.29-1~deb12u1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/systemd-sysv_252.29-1~deb12u1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/systemd_252.29-1~deb12u1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tar/tar_1.34+dfsg-1+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tcp-wrappers/libwrap0_7.6.q-31_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tiff/libtiff-dev_4.2.0-1+deb11u5_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tiff/libtiff5_4.2.0-1+deb11u5_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tiff/libtiff6_4.5.0-6+deb12u2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tiff/libtiffxx5_4.2.0-1+deb11u5_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tslib/libts0_1.22-1+b1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/twolame/libtwolame0_0.4.0-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tzdata/tzdata_2021a-1+deb11u11_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/ucf/ucf_3.0043_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/unbound/libunbound8_1.17.1-2~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/libblkid-dev_2.36.1-8+deb11u2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/libblkid1_2.36.1-8+deb11u2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/libfdisk1_2.36.1-8+deb11u2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/libmount-dev_2.36.1-8+deb11u2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/libmount1_2.36.1-8+deb11u2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/libuuid1_2.36.1-8+deb11u2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/mount_2.36.1-8+deb11u2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/util-linux_2.36.1-8+deb11u2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/uuid-dev_2.36.1-8+deb11u2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/v/valgrind/valgrind_3.16.1-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/v/vulkan-loader/libvulkan-dev_1.3.224.0-1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/v/vulkan-loader/libvulkan1_1.3.224.0-1~bpo11+1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wavpack/libwavpack1_5.4.0-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland-protocols/wayland-protocols_1.20-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-bin_1.18.0-2~exp1.1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-client0_1.18.0-2~exp1.1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-cursor0_1.18.0-2~exp1.1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-dev_1.18.0-2~exp1.1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-egl-backend-dev_1.18.0-2~exp1.1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-egl1_1.18.0-2~exp1.1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-server0_1.18.0-2~exp1.1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/webrtc-audio-processing/libwebrtc-audio-processing1_0.3-1+b1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/x264/libx264-160_0.160.3011+gitcde9a93-2.1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/x265/libx265-192_3.4-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util-image/libxcb-image0-dev_0.4.0-1+b3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util-image/libxcb-image0_0.4.0-1+b3_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util-keysyms/libxcb-keysyms1_0.4.0-1+b2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0-dev_0.3.9-1+b1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0_0.3.9-1+b1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util-wm/libxcb-icccm4_0.4.1-1.1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util/libxcb-util-dev_0.4.0-1+b1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util/libxcb-util1_0.4.0-1+b1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xft/libxft-dev_2.3.2-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xft/libxft2_2.3.2-2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xkeyboard-config/xkb-data_2.29-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorg-sgml-doctools/xorg-sgml-doctools_1.11-1.1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorg/x11-common_7.7+22_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-core-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-input-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-randr-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-record-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-render-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-scrnsaver-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-xext-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-xf86vidmode-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-xinerama-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xtrans/xtrans-dev_1.4.0-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xvidcore/libxvidcore4_1.3.7-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xz-utils/liblzma-dev_5.2.5-2.1~deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xz-utils/liblzma5_5.2.5-2.1~deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xz-utils/xz-utils_5.2.5-2.1~deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/z/z3/libz3-4_4.8.10-1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/z/zeromq3/libzmq5_4.3.4-1+deb11u1_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-2+deb11u2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/z/zlib/zlib1g_1.2.11.dfsg-2+deb11u2_i386.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/z/zvbi/libzvbi-common_0.2.35-18_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/z/zvbi/libzvbi0_0.2.35-18_i386.deb diff --git a/naiveproxy/src/build/linux/sysroot_scripts/generated_package_lists/bullseye.mips64el b/naiveproxy/src/build/linux/sysroot_scripts/generated_package_lists/bullseye.mips64el index 4ac52cfca0..4213b1f229 100644 --- a/naiveproxy/src/build/linux/sysroot_scripts/generated_package_lists/bullseye.mips64el +++ b/naiveproxy/src/build/linux/sysroot_scripts/generated_package_lists/bullseye.mips64el @@ -1,463 +1,631 @@ -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/alsa-lib/libasound2-dev_1.2.4-1.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/alsa-lib/libasound2_1.2.4-1.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/aom/libaom0_1.0.0.errata1-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/aom/libaom3_3.6.0-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.38.0-4~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.38.0-4~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-core/libatspi2.0-0_2.44.1-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-core/libatspi2.0-dev_2.44.1-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/atk1.0/libatk1.0-0_2.38.0-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/atk1.0/libatk1.0-dev_2.38.0-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/attr/libattr1_2.4.48-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/audit/libaudit1_3.0-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/avahi/libavahi-client3_0.8-5+deb11u2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/avahi/libavahi-common3_0.8-5+deb11u2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/bluez/libbluetooth-dev_5.55-3.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/bluez/libbluetooth3_5.55-3.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/brotli/libbrotli-dev_1.0.9-2+b2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/brotli/libbrotli1_1.0.9-2+b2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/bzip2/libbz2-1.0_1.0.8-4_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo-gobject2_1.16.0-5_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo-script-interpreter2_1.16.0-5_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo2-dev_1.16.0-5_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo2_1.16.0-5_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/chromaprint/libchromaprint1_1.5.0-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cjson/libcjson1_1.7.14-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/codec2/libcodec2-0.9_0.9.2-4_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/codec2/libcodec2-1.0_1.0.5-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/colord/libcolord2_1.4.5-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcups2-dev_2.3.3op2-3+deb11u2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcups2_2.3.3op2-3+deb11u2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcupsimage2-dev_2.3.3op2-3+deb11u2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcupsimage2_2.3.3op2-3+deb11u2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/curl/libcurl3-gnutls_7.88.1-7~bpo11+2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/curl/libcurl4-gnutls-dev_7.88.1-7~bpo11+2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cyrus-sasl2/libsasl2-2_2.1.27+dfsg-2.1+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dav1d/libdav1d4_0.7.1-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dav1d/libdav1d6_1.0.0-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.8_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dbus/libdbus-1-3_1.12.24-0+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dbus/libdbus-1-dev_1.12.24-0+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/double-conversion/libdouble-conversion3_3.1.5-6.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/e2fsprogs/comerr-dev_2.1-1.46.6-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/e2fsprogs/libcom-err2_1.46.6-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/elfutils/libelf-dev_0.187-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/elfutils/libelf1_0.187-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/expat/libexpat1-dev_2.2.10-2+deb11u5_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/expat/libexpat1_2.2.10-2+deb11u5_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavcodec-dev_4.3.5-0+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavcodec58_4.3.5-0+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavcodec59_5.1.3-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavformat-dev_4.3.5-0+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavformat59_5.1.3-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavutil-dev_4.3.5-0+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavutil56_4.3.5-0+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavutil57_5.1.3-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libswresample-dev_4.3.5-0+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libswresample3_4.3.5-0+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libswresample4_5.1.3-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/flac/libflac-dev_1.3.3-2+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/flac/libflac8_1.3.3-2+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fontconfig/libfontconfig-dev_2.13.1-4.2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fontconfig/libfontconfig1_2.13.1-4.2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/freetype/libfreetype-dev_2.10.4+dfsg-1+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/freetype/libfreetype6_2.10.4+dfsg-1+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fribidi/libfribidi-dev_1.0.8-2+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fribidi/libfribidi0_1.0.8-2+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/game-music-emu/libgme0_0.6.3-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libatomic1_10.2.1-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libgcc-10-dev_10.2.1-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libgcc-s1_10.2.1-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libgomp1_10.2.1-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libstdc++-10-dev_10.2.1-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libstdc++6_10.2.1-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-0_2.42.2+dfsg-1+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-dev_2.42.2+dfsg-1+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glib2.0/libglib2.0-0_2.66.8-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glib2.0/libglib2.0-dev_2.66.8-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glibc/libc6-dev_2.31-13+deb11u5_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glibc/libc6_2.31-13+deb11u5_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gmp/libgmp10_6.2.1+dfsg-1+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls-dane0_3.7.1-5+deb11u3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls-openssl27_3.7.1-5+deb11u3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls28-dev_3.7.1-5+deb11u3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls30_3.7.1-5+deb11u3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutlsxx28_3.7.1-5+deb11u3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphene/libgraphene-1.0-0_1.10.4+dfsg1-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphene/libgraphene-1.0-dev_1.10.4+dfsg1-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphite2/libgraphite2-3_1.3.14-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphite2/libgraphite2-dev_1.3.14-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.33-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk+3.0/libgtk-3-0_3.24.24-4+deb11u3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.24-4+deb11u3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk4/libgtk-4-1_4.8.3+ds-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk4/libgtk-4-dev_4.8.3+ds-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz-dev_2.7.4-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz-gobject0_2.7.4-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz-icu0_2.7.4-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz0b_2.7.4-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/highway/libhwy1_1.0.3-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git180724-3+b2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/i/icu/libicu67_67.1-7_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/jbigkit/libjbig-dev_2.1-3.1+b2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/jpeg-xl/libjxl0.7_0.7.0-10_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/json-glib/libjson-glib-1.0-0_1.6.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/keyutils/libkeyutils1_1.6.1-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/krb5-multidev_1.18.3-6+deb11u3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libgssapi-krb5-2_1.18.3-6+deb11u3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libgssrpc4_1.18.3-6+deb11u3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libk5crypto3_1.18.3-6+deb11u3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkadm5clnt-mit12_1.18.3-6+deb11u3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkadm5srv-mit12_1.18.3-6+deb11u3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkdb5-10_1.18.3-6+deb11u3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkrb5-3_1.18.3-6+deb11u3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkrb5-dev_1.18.3-6+deb11u3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkrb5support0_1.18.3-6+deb11u3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lame/libmp3lame0_3.100-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lcms2/liblcms2-2_2.12~rc1-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lerc/liblerc4_4.0.0+ds-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/linux/linux-libc-dev_5.19.11-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lz4/liblz4-1_1.9.3-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lzo2/liblzo2-2_2.10-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/liba/libasyncns/libasyncns0_0.8-6+b2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libb/libb2/libb2-1_0.98.1-1.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libb/libbluray/libbluray2_1.2.1-4+deb11u2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libb/libbsd/libbsd0_0.11.3-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-2.2+b1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcap2/libcap-dev_2.44-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcap2/libcap2_2.44-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcloudproviders/libcloudproviders0_0.3.0-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdatrie/libdatrie-dev_0.2.13-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdatrie/libdatrie1_0.2.13-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr492+repack1-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr492+repack1-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_18.10.20180917~bzr492+repack1-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_18.10.20180917~bzr492+repack1-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdeflate/libdeflate-dev_1.10-2~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdeflate/libdeflate0_1.10-2~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.104-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-dev_2.4.104-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-nouveau2_2.4.104-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-radeon1_2.4.104-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm2_2.4.104-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libepoxy/libepoxy-dev_1.5.8-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libepoxy/libepoxy0_1.5.8-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libevdev/libevdev-dev_1.11.0+dfsg-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libevdev/libevdev2_1.11.0+dfsg-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libevent/libevent-2.1-7_2.1.12-stable-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libf/libffi/libffi-dev_3.3-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libf/libffi/libffi7_3.3-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.7-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgcrypt20/libgcrypt20_1.8.7-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libegl-dev_1.3.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libegl1_1.3.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgl-dev_1.3.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgl1_1.3.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgles-dev_1.3.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgles1_1.3.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgles2_1.3.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglvnd-dev_1.3.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglvnd0_1.3.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglx-dev_1.3.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglx0_1.3.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libopengl0_1.3.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgpg-error/libgpg-error-dev_1.38-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgpg-error/libgpg-error0_1.38-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgsm/libgsm1_1.0.18-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgudev/libgudev-1.0-0_234-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libice/libice6_1.0.10-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libidl/libidl-2-0_0.8.14-4+b12_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libidn/libidn11_1.33-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libidn2/libidn2-0_2.3.0-5_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libinput/libinput-dev_1.16.4-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libinput/libinput10_1.16.4-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_2.0.6-4_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_2.0.6-4_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.9.4-4_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjsoncpp/libjsoncpp24_1.9.4-4_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libm/libmd/libmd0_1.0.3-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libn/libnsl/libnsl2_1.3.0-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b10_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libo/libogg/libogg-dev_1.3.4-0.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libo/libogg/libogg0_1.3.4-0.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libo/libopenmpt/libopenmpt0_0.4.11-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpciaccess/libpciaccess0_0.16-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpgm/libpgm-5.3-0_5.3.128~dfsg-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpng1.6/libpng-dev_1.6.37-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpng1.6/libpng16-16_1.6.37-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libproxy/libproxy1v5_0.4.17-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpsl/libpsl5_0.21.0-1.2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.4-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libr/librabbitmq/librabbitmq4_0.10.0-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libr/librest/librest-0.7-0_0.8.1-1.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libr/librist/librist4_0.2.7+dfsg-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libr/librsvg/librsvg2-2_2.50.3+dfsg-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libselinux/libselinux1-dev_3.1-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libselinux/libselinux1_3.1-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsepol/libsepol1-dev_3.1-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsepol/libsepol1_3.1-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsm/libsm6_1.2.3-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsndfile/libsndfile1_1.0.31-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsodium/libsodium23_1.0.18-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.72.0-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsoup2.4/libsoup2.4-1_2.72.0-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsoxr/libsoxr0_0.1.3-4_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libssh/libssh-gcrypt-4_0.9.5-1+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libssh2/libssh2-1_1.9.0-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtasn1-6/libtasn1-6_4.16.0-2+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libthai/libthai-dev_0.1.28-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libthai/libthai0_0.1.28-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtheora/libtheora0_1.1.1+dfsg.1-15_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtirpc/libtirpc3_1.3.1-1+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtool/libltdl7_2.4.6-15_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libudfread/libudfread0_1.1.1-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libunistring/libunistring2_0.9.10-4_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libutempter/libutempter-dev_1.2.1-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libutempter/libutempter0_1.2.1-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-dev_2.17.0-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-drm2_2.17.0-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-glx2_2.17.0-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-wayland2_2.17.0-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-x11-2_2.17.0-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva2_2.17.0-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvdpau/libvdpau1_1.4-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvorbis/libvorbis0a_1.3.7-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvorbis/libvorbisenc2_1.3.7-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvorbis/libvorbisfile3_1.3.7-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvpx/libvpx-dev_1.9.0-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvpx/libvpx6_1.9.0-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvpx/libvpx7_1.12.0-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwacom/libwacom2_1.8-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebp-dev_0.6.1-2.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebp6_0.6.1-2.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebp7_1.2.4-0.2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebpmux3_0.6.1-2.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-6_1.7.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-dev_1.7.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-xcb-dev_1.7.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-xcb1_1.7.2-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxau/libxau-dev_1.0.9-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxau/libxau6_1.0.9-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri2-0_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri3-0_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri3-dev_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-glx0-dev_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-glx0_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-present-dev_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-present0_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-randr0-dev_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-randr0_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-render0-dev_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-render0_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shape0-dev_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shape0_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shm0-dev_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shm0_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-sync-dev_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-sync1_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xfixes0-dev_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xfixes0_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xinerama0_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xinput0_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xkb1_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb1-dev_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb1_1.14-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.5-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcomposite/libxcomposite1_0.4.5-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcrypt/libcrypt-dev_4.4.18-4_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcrypt/libcrypt1_4.4.18-4_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcursor/libxcursor-dev_1.2.0-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcursor/libxcursor1_1.2.0-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdamage/libxdamage-dev_1.1.5-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdamage/libxdamage1_1.1.5-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxext/libxext-dev_1.3.3-1.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxext/libxext6_1.3.3-1.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxfixes/libxfixes3_5.0.3-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxi/libxi-dev_1.7.10-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxi/libxi6_1.7.10-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxinerama/libxinerama1_1.1.4-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxkbcommon/libxkbcommon-dev_1.0.3-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxkbcommon/libxkbcommon-x11-0_1.0.3-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxkbcommon/libxkbcommon0_1.0.3-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxml2/libxml2-dev_2.9.10+dfsg-6.7+deb11u4_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxml2/libxml2_2.9.10+dfsg-6.7+deb11u4_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxshmfence/libxshmfence-dev_1.3-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxslt/libxslt1-dev_1.1.34-4+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxslt/libxslt1.1_1.1.34-4+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxss/libxss-dev_1.2.3-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxss/libxss1_1.2.3-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxt/libxt-dev_1.2.0-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxt/libxt6_1.2.0-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxtst/libxtst6_1.2.3-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libz/libzstd/libzstd1_1.4.8+dfsg-2.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mbedtls/libmbedcrypto7_2.28.3-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/md4c/libmd4c0_0.4.7-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libegl1-mesa-dev_20.3.5-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libegl1-mesa_20.3.5-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgbm-dev_20.3.5-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgbm1_20.3.5-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgl1-mesa-dev_20.3.5-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgl1-mesa-glx_20.3.5-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libglapi-mesa_20.3.5-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libwayland-egl1-mesa_20.3.5-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/mesa-common-dev_20.3.5-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/minizip/libminizip-dev_1.1-8+b1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/minizip/libminizip1_1.1-8+b1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mpg123/libmpg123-0_1.26.4-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mtdev/libmtdev1_1.1.6-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libncurses-dev_6.2+20201114-2+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libncurses6_6.2+20201114-2+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libncursesw6_6.2+20201114-2+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libtinfo6_6.2+20201114-2+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nettle/libhogweed6_3.7.3-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nettle/libnettle8_3.7.3-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nghttp2/libnghttp2-14_1.43.0-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/norm/libnorm1_1.5.9+dfsg-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nspr/libnspr4-dev_4.29-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nspr/libnspr4_4.29-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nss/libnss3-dev_3.61-1+deb11u3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nss/libnss3_3.61-1+deb11u3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/numactl/libnuma1_2.0.12-1+b1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/ocl-icd/ocl-icd-libopencl1_2.2.14-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openjpeg2/libopenjp2-7_2.4.0-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openldap/libldap-2.4-2_2.4.59+dfsg-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openssl/libssl-dev_1.1.1n-0+deb11u4_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openssl/libssl1.1_1.1.1n-0+deb11u4_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/opus/libopus-dev_1.3.1-0.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/opus/libopus0_1.3.1-0.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/p11-kit/libp11-kit0_0.23.22-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pam/libpam0g-dev_1.4.0-9+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pam/libpam0g_1.4.0-9+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpango-1.0-0_1.46.2-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpango1.0-dev_1.46.2-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpangocairo-1.0-0_1.46.2-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpangoft2-1.0-0_1.46.2-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpangoxft-1.0-0_1.46.2-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pciutils/libpci-dev_3.7.0-5_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pciutils/libpci3_3.7.0-5_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-16-0_10.36-2+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-32-0_10.36-2+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-8-0_10.36-2+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-dev_10.36-2+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-posix2_10.36-2+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre16-3_8.39-13_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre3-dev_8.39-13_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre32-3_8.39-13_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre3_8.39-13_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcrecpp0v5_8.39-13_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pipewire/libpipewire-0.3-0_0.3.65-2~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pipewire/libpipewire-0.3-dev_0.3.65-2~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pipewire/libspa-0.2-dev_0.3.65-2~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pixman/libpixman-1-0_0.40.0-1.1~deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pixman/libpixman-1-dev_0.40.0-1.1~deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pulseaudio/libpulse-dev_14.2-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pulseaudio/libpulse-mainloop-glib0_14.2-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pulseaudio/libpulse0_14.2-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6concurrent6_6.4.2+dfsg-10~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6core6_6.4.2+dfsg-10~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6dbus6_6.4.2+dfsg-10~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6gui6_6.4.2+dfsg-10~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6network6_6.4.2+dfsg-10~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6opengl6_6.4.2+dfsg-10~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6openglwidgets6_6.4.2+dfsg-10~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6printsupport6_6.4.2+dfsg-10~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6sql6_6.4.2+dfsg-10~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6test6_6.4.2+dfsg-10~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6widgets6_6.4.2+dfsg-10~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6xml6_6.4.2+dfsg-10~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/qt6-base-dev-tools_6.4.2+dfsg-10~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/qt6-base-dev_6.4.2+dfsg-10~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5concurrent5_5.15.2+dfsg-9_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5core5a_5.15.2+dfsg-9_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5dbus5_5.15.2+dfsg-9_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5gui5_5.15.2+dfsg-9_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5network5_5.15.2+dfsg-9_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5printsupport5_5.15.2+dfsg-9_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5sql5_5.15.2+dfsg-9_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5test5_5.15.2+dfsg-9_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5widgets5_5.15.2+dfsg-9_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5xml5_5.15.2+dfsg-9_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/qtbase5-dev-tools_5.15.2+dfsg-9_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/qtbase5-dev_5.15.2+dfsg-9_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/re2/libre2-9_20210201+dfsg-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/re2/libre2-dev_20210201+dfsg-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/rtmpdump/librtmp1_2.4+20151223.gitfa8646d.1-2+b2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/rust-rav1e/librav1e0_0.5.1-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/shared-mime-info/shared-mime-info_2.0-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/shine/libshine3_3.1.1-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/snappy/libsnappy-dev_1.1.8-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/snappy/libsnappy1v5_1.1.8-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/speech-dispatcher/libspeechd-dev_0.11.4-2~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/speech-dispatcher/libspeechd2_0.11.4-2~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/speex/libspeex1_1.2~rc1.2-1.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/sqlite3/libsqlite3-0_3.34.1-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/srt/libsrt1.5-gnutls_1.5.1-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/svt-av1/libsvtav1enc1_1.4.1+dfsg-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libsystemd-dev_252.5-2~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libsystemd0_252.5-2~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libudev-dev_252.5-2~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libudev1_252.5-2~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tcp-wrappers/libwrap0_7.6.q-31_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiff-dev_4.2.0-1+deb11u4_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiff5_4.2.0-1+deb11u4_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiff6_4.5.0-6_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiffxx5_4.2.0-1+deb11u4_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tslib/libts0_1.22-1+b1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/twolame/libtwolame0_0.4.0-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/unbound/libunbound8_1.17.1-2~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libblkid-dev_2.36.1-8+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libblkid1_2.36.1-8+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libmount-dev_2.36.1-8+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libmount1_2.36.1-8+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libuuid1_2.36.1-8+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/uuid-dev_2.36.1-8+deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/v/valgrind/valgrind_3.16.1-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/v/vulkan-loader/libvulkan-dev_1.3.224.0-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/v/vulkan-loader/libvulkan1_1.3.224.0-1~bpo11+1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wavpack/libwavpack1_5.4.0-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland-protocols/wayland-protocols_1.20-1_all.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-bin_1.18.0-2~exp1.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-client0_1.18.0-2~exp1.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-cursor0_1.18.0-2~exp1.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-dev_1.18.0-2~exp1.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-egl-backend-dev_1.18.0-2~exp1.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-egl1_1.18.0-2~exp1.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-server0_1.18.0-2~exp1.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/x264/libx264-160_0.160.3011+gitcde9a93-2.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/x264/libx264-164_0.164.3095+gitbaee400-3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/x265/libx265-192_3.4-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/x265/libx265-199_3.5-2+b1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-image/libxcb-image0-dev_0.4.0-1+b3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-image/libxcb-image0_0.4.0-1+b3_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-keysyms/libxcb-keysyms1_0.4.0-1+b2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0-dev_0.3.9-1+b1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0_0.3.9-1+b1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-wm/libxcb-icccm4_0.4.1-1.1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util/libxcb-util-dev_0.4.0-1+b1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util/libxcb-util1_0.4.0-1+b1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xft/libxft-dev_2.3.2-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xft/libxft2_2.3.2-2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xorgproto/x11proto-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xvidcore/libxvidcore4_1.3.7-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xz-utils/liblzma5_5.2.5-2.1~deb11u1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/z/zeromq3/libzmq5_4.3.4-1_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-2+deb11u2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/z/zlib/zlib1g_1.2.11.dfsg-2+deb11u2_mips64el.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/z/zvbi/libzvbi0_0.2.35-18_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/acl/libacl1_2.2.53-10_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/adduser/adduser_3.118+deb11u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/adwaita-icon-theme/adwaita-icon-theme_3.38.0-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/alsa-lib/libasound2-data_1.2.4-1.1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/alsa-lib/libasound2-dev_1.2.4-1.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/alsa-lib/libasound2_1.2.4-1.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/aom/libaom0_1.0.0.errata1-3+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/apparmor/libapparmor1_2.13.6-10_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/argon2/libargon2-1_0~20171227-0.2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.38.0-4~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.38.0-4~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/at-spi2-core/gir1.2-atspi-2.0_2.44.1-1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/at-spi2-core/libatspi2.0-0_2.44.1-1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/at-spi2-core/libatspi2.0-dev_2.44.1-1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/atk1.0/gir1.2-atk-1.0_2.38.0-1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/atk1.0/libatk1.0-0_2.38.0-1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/atk1.0/libatk1.0-data_2.38.0-1~bpo11+1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/atk1.0/libatk1.0-dev_2.38.0-1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/audit/libaudit-common_3.0-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/audit/libaudit1_3.0-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/avahi/libavahi-client3_0.8-5+deb11u2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/avahi/libavahi-common-data_0.8-5+deb11u2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/avahi/libavahi-common3_0.8-5+deb11u2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/binutils/binutils-common_2.35.2-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/binutils/binutils-mips64el-linux-gnuabi64_2.35.2-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/binutils/binutils_2.35.2-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/binutils/libbinutils_2.35.2-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/binutils/libctf-nobfd0_2.35.2-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/binutils/libctf0_2.35.2-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/bluez/libbluetooth-dev_5.55-3.1+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/bluez/libbluetooth3_5.55-3.1+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/brotli/libbrotli-dev_1.0.9-2+b2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/brotli/libbrotli1_1.0.9-2+b2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/build-essential/build-essential_12.9_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/bzip2/bzip2_1.0.8-4_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/bzip2/libbz2-1.0_1.0.8-4_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cairo/libcairo-gobject2_1.16.0-5_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cairo/libcairo-script-interpreter2_1.16.0-5_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cairo/libcairo2-dev_1.16.0-5_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cairo/libcairo2_1.16.0-5_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/chromaprint/libchromaprint1_1.5.0-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/codec2/libcodec2-0.9_0.9.2-4_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/colord/gir1.2-colord-1.0_1.4.5-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/colord/libcolord-dev_1.4.5-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/colord/libcolord2_1.4.5-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/coreutils/coreutils_8.32-4_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cryptsetup/libcryptsetup12_2.3.7-1+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cups/libcups2-dev_2.3.3op2-3+deb11u8_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cups/libcups2_2.3.3op2-3+deb11u8_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cups/libcupsimage2-dev_2.3.3op2-3+deb11u8_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cups/libcupsimage2_2.3.3op2-3+deb11u8_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/curl/libcurl3-gnutls_7.88.1-10+deb12u6~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/curl/libcurl4-gnutls-dev_7.88.1-10+deb12u6~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cyrus-sasl2/libsasl2-2_2.1.27+dfsg-2.1+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cyrus-sasl2/libsasl2-modules-db_2.1.27+dfsg-2.1+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dav1d/libdav1d4_0.7.1-3+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.8_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/dbus-bin_1.14.10-1~deb12u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/dbus-daemon_1.14.10-1~deb12u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/dbus-session-bus-common_1.14.10-1~deb12u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/dbus-system-bus-common_1.14.10-1~deb12u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/dbus-user-session_1.14.10-1~deb12u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/dbus_1.14.10-1~deb12u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/libdbus-1-3_1.12.28-0+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/libdbus-1-dev_1.12.28-0+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dconf/dconf-gsettings-backend_0.38.0-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dconf/dconf-service_0.38.0-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dconf/libdconf1_0.38.0-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/debconf/debconf_1.5.77_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/double-conversion/libdouble-conversion3_3.1.5-6.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dpkg/dpkg-dev_1.20.13_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dpkg/dpkg_1.20.13_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dpkg/libdpkg-perl_1.20.13_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/e/e2fsprogs/comerr-dev_2.1-1.46.6-1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/e/e2fsprogs/libcom-err2_1.46.6-1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/e/elfutils/libelf-dev_0.187-1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/e/elfutils/libelf1_0.187-1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/e/expat/libexpat1-dev_2.2.10-2+deb11u5_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/e/expat/libexpat1_2.2.10-2+deb11u5_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libavcodec-dev_4.3.7-0+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libavcodec58_4.3.7-0+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libavformat-dev_4.3.7-0+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libavformat58_4.3.7-0+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libavutil-dev_4.3.7-0+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libavutil56_4.3.7-0+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libswresample-dev_4.3.7-0+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libswresample3_4.3.7-0+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/flac/libflac-dev_1.3.3-2+deb11u2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/flac/libflac8_1.3.3-2+deb11u2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fontconfig/fontconfig-config_2.13.1-4.2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fontconfig/fontconfig_2.13.1-4.2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fontconfig/libfontconfig-dev_2.13.1-4.2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fontconfig/libfontconfig1-dev_2.13.1-4.2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fontconfig/libfontconfig1_2.13.1-4.2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fonts-dejavu/fonts-dejavu-core_2.37-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/freetype/libfreetype-dev_2.10.4+dfsg-1+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/freetype/libfreetype6-dev_2.10.4+dfsg-1+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/freetype/libfreetype6_2.10.4+dfsg-1+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fribidi/libfribidi-dev_1.0.8-2+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fribidi/libfribidi0_1.0.8-2+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/game-music-emu/libgme0_0.6.3-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/cpp-10_10.2.1-6_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/g++-10_10.2.1-6_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/gcc-10-base_10.2.1-6_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/gcc-10_10.2.1-6_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libatomic1_10.2.1-6_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libcc1-0_10.2.1-6_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libgcc-10-dev_10.2.1-6_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libgcc-s1_10.2.1-6_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libgomp1_10.2.1-6_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libstdc++-10-dev_10.2.1-6_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libstdc++6_10.2.1-6_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-defaults/cpp_10.2.1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-defaults/g++_10.2.1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-defaults/gcc_10.2.1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdbm/libgdbm-compat4_1.19-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdbm/libgdbm6_1.19-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdk-pixbuf/gir1.2-gdkpixbuf-2.0_2.42.2+dfsg-1+deb11u2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-0_2.42.2+dfsg-1+deb11u2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-dev_2.42.2+dfsg-1+deb11u2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-bin_2.42.2+dfsg-1+deb11u2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-common_2.42.2+dfsg-1+deb11u2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib-networking/glib-networking-common_2.66.0-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib-networking/glib-networking-services_2.66.0-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib-networking/glib-networking_2.66.0-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib2.0/libglib2.0-0_2.66.8-1+deb11u4_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib2.0/libglib2.0-bin_2.66.8-1+deb11u4_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib2.0/libglib2.0-data_2.66.8-1+deb11u4_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib2.0/libglib2.0-dev-bin_2.66.8-1+deb11u4_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib2.0/libglib2.0-dev_2.66.8-1+deb11u4_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glibc/libc-dev-bin_2.31-13+deb11u5_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glibc/libc6-dbg_2.31-13+deb11u5_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glibc/libc6-dev_2.31-13+deb11u11_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glibc/libc6-dev_2.31-13+deb11u5_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glibc/libc6_2.31-13+deb11u5_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gmp/libgmp-dev_6.2.1+dfsg-1+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gmp/libgmp10_6.2.1+dfsg-1+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gmp/libgmpxx4ldbl_6.2.1+dfsg-1+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gnutls28/libgnutls-dane0_3.7.1-5+deb11u5_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gnutls28/libgnutls-openssl27_3.7.1-5+deb11u5_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gnutls28/libgnutls28-dev_3.7.1-5+deb11u5_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gnutls28/libgnutls30_3.7.1-5+deb11u5_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gnutls28/libgnutlsxx28_3.7.1-5+deb11u5_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gobject-introspection/gir1.2-freedesktop_1.66.1-1+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gobject-introspection/gir1.2-glib-2.0_1.66.1-1+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gobject-introspection/gobject-introspection_1.66.1-1+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gobject-introspection/libgirepository-1.0-1_1.66.1-1+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gobject-introspection/libgirepository1.0-dev_1.66.1-1+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/graphene/gir1.2-graphene-1.0_1.10.4+dfsg1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/graphene/libgraphene-1.0-0_1.10.4+dfsg1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/graphene/libgraphene-1.0-dev_1.10.4+dfsg1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/graphite2/libgraphite2-3_1.3.14-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/graphite2/libgraphite2-dev_1.3.14-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gsettings-desktop-schemas/gsettings-desktop-schemas_3.38.0-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+2.0/gir1.2-gtk-2.0_2.24.33-2+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.33-2+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+2.0/libgtk2.0-common_2.24.33-2+deb11u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+2.0/libgtk2.0-dev_2.24.33-2+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+3.0/gir1.2-gtk-3.0_3.24.24-4+deb11u4_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+3.0/gtk-update-icon-cache_3.24.24-4+deb11u4_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+3.0/libgtk-3-0_3.24.24-4+deb11u4_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+3.0/libgtk-3-common_3.24.24-4+deb11u4_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.24-4+deb11u4_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk4/gir1.2-gtk-4.0_4.8.3+ds-2+deb12u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk4/libgtk-4-1_4.8.3+ds-2+deb12u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk4/libgtk-4-common_4.8.3+ds-2+deb12u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk4/libgtk-4-dev_4.8.3+ds-2+deb12u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/h/harfbuzz/gir1.2-harfbuzz-0.0_2.7.4-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/h/harfbuzz/libharfbuzz-dev_2.7.4-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/h/harfbuzz/libharfbuzz-gobject0_2.7.4-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/h/harfbuzz/libharfbuzz-icu0_2.7.4-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/h/harfbuzz/libharfbuzz0b_2.7.4-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/h/hicolor-icon-theme/hicolor-icon-theme_0.17-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/i/icu/icu-devtools_67.1-7_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/i/icu/libicu-dev_67.1-7_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/i/icu/libicu67_67.1-7_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/i/iptables/libip4tc2_1.8.7-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/i/isl/libisl23_0.23-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/j/jbigkit/libjbig-dev_2.1-3.1+b2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/j/json-c/libjson-c5_0.15-2+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/j/json-glib/libjson-glib-1.0-0_1.6.2-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/j/json-glib/libjson-glib-1.0-common_1.6.2-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/keyutils/libkeyutils1_1.6.1-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/kmod/libkmod2_28-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/krb5-multidev_1.18.3-6+deb11u5_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libgssapi-krb5-2_1.18.3-6+deb11u5_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libgssrpc4_1.18.3-6+deb11u5_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libk5crypto3_1.18.3-6+deb11u5_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libkadm5clnt-mit12_1.18.3-6+deb11u5_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libkadm5srv-mit12_1.18.3-6+deb11u5_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libkdb5-10_1.18.3-6+deb11u5_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libkrb5-3_1.18.3-6+deb11u5_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libkrb5-dev_1.18.3-6+deb11u5_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libkrb5support0_1.18.3-6+deb11u5_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lame/libmp3lame0_3.100-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lcms2/liblcms2-2_2.12~rc1-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lcms2/liblcms2-dev_2.12~rc1-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lerc/liblerc4_4.0.0+ds-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/linux/linux-libc-dev_6.1.94-1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/llvm-toolchain-11/libllvm11_11.0.1-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lm-sensors/libsensors-config_3.6.0-7_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lm-sensors/libsensors5_3.6.0-7_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lsb/lsb-base_11.1.0_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lvm2/dmsetup_1.02.175-2.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lvm2/libdevmapper1.02.1_1.02.175-2.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lz4/liblz4-1_1.9.3-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lzo2/liblzo2-2_2.10-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/liba/libasyncns/libasyncns0_0.8-6+b2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libb/libb2/libb2-1_0.98.1-1.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libb/libbluray/libbluray2_1.2.1-4+deb11u2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libb/libbsd/libbsd0_0.11.3-1+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-2.2+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libc/libcap2/libcap-dev_2.44-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libc/libcap2/libcap2_2.44-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libc/libcloudproviders/libcloudproviders0_0.3.0-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdatrie/libdatrie-dev_0.2.13-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdatrie/libdatrie1_0.2.13-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdbusmenu/gir1.2-dbusmenu-glib-0.4_18.10.20180917~bzr492+repack1-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr492+repack1-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr492+repack1-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdeflate/libdeflate-dev_1.10-2~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdeflate/libdeflate0_1.10-2~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.104-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-common_2.4.104-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-dev_2.4.104-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-nouveau2_2.4.104-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-radeon1_2.4.104-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm2_2.4.104-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libe/libedit/libedit2_3.1-20191231-2+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libe/libepoxy/libepoxy-dev_1.5.8-1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libe/libepoxy/libepoxy0_1.5.8-1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libe/libevdev/libevdev-dev_1.11.0+dfsg-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libe/libevdev/libevdev2_1.11.0+dfsg-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libe/libevent/libevent-2.1-7_2.1.12-stable-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libf/libffi/libffi-dev_3.3-6_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libf/libffi/libffi7_3.3-6_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.7-6_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgcrypt20/libgcrypt20_1.8.7-6_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglu/libglu1-mesa-dev_9.0.1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglu/libglu1-mesa_9.0.1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libegl-dev_1.3.2-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libegl1_1.3.2-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libgl-dev_1.3.2-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libgl1_1.3.2-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libgles-dev_1.3.2-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libgles1_1.3.2-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libgles2_1.3.2-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libglvnd-dev_1.3.2-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libglvnd0_1.3.2-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libglx-dev_1.3.2-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libglx0_1.3.2-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libopengl-dev_1.3.2-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libopengl0_1.3.2-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgpg-error/libgpg-error-dev_1.38-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgpg-error/libgpg-error0_1.38-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgsm/libgsm1_1.0.18-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgudev/gir1.2-gudev-1.0_234-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgudev/libgudev-1.0-0_234-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgudev/libgudev-1.0-dev_234-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libice/libice-dev_1.0.10-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libice/libice6_1.0.10-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libidn2/libidn2-0_2.3.0-5_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libidn2/libidn2-dev_2.3.0-5_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libinput/libinput-bin_1.16.4-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libinput/libinput-dev_1.16.4-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libinput/libinput10_1.16.4-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libj/libjpeg-turbo/libjpeg-dev_2.0.6-4_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_2.0.6-4_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_2.0.6-4_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.9.4-4_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libj/libjsoncpp/libjsoncpp24_1.9.4-4_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libm/libmd/libmd0_1.0.3-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libn/libnsl/libnsl-dev_1.3.0-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libn/libnsl/libnsl2_1.3.0-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libo/libogg/libogg-dev_1.3.4-0.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libo/libogg/libogg0_1.3.4-0.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libo/libopenmpt/libopenmpt0_0.4.11-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libpgm/libpgm-5.3-0_5.3.128~dfsg-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libpng1.6/libpng-dev_1.6.37-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libpng1.6/libpng16-16_1.6.37-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libproxy/libproxy1v5_0.4.17-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libpsl/libpsl5_0.21.0-1.2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.4-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libr/librabbitmq/librabbitmq4_0.10.0-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libr/librest/librest-0.7-0_0.8.1-1.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libr/librsvg/librsvg2-2_2.50.3+dfsg-1+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libseccomp/libseccomp2_2.5.1-1+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libselinux/libselinux1-dev_3.1-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libselinux/libselinux1_3.1-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsemanage/libsemanage-common_3.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsemanage/libsemanage1_3.1-1+b2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsepol/libsepol1-dev_3.1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsepol/libsepol1_3.1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libset-scalar-perl/libset-scalar-perl_1.29-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsm/libsm-dev_1.2.3-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsm/libsm6_1.2.3-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsndfile/libsndfile1_1.0.31-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsodium/libsodium23_1.0.18-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.72.0-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsoup2.4/libsoup2.4-1_2.72.0-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsoxr/libsoxr0_0.1.3-4_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libssh/libssh-gcrypt-4_0.9.8-0+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libssh2/libssh2-1_1.9.0-2+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libtasn1-6/libtasn1-6-dev_4.16.0-2+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libtasn1-6/libtasn1-6_4.16.0-2+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libthai/libthai-data_0.1.28-3_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libthai/libthai-dev_0.1.28-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libthai/libthai0_0.1.28-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libtheora/libtheora0_1.1.1+dfsg.1-15_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libtirpc/libtirpc-common_1.3.1-1+deb11u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libtirpc/libtirpc-dev_1.3.1-1+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libtirpc/libtirpc3_1.3.1-1+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libu/libudfread/libudfread0_1.1.1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libu/libunistring/libunistring2_0.9.10-4_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libu/libutempter/libutempter-dev_1.2.1-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libu/libutempter/libutempter0_1.2.1-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libva/libva-dev_2.17.0-1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libva/libva-drm2_2.17.0-1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libva/libva-glx2_2.17.0-1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libva/libva-wayland2_2.17.0-1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libva/libva-x11-2_2.17.0-1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libva/libva2_2.17.0-1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libvdpau/libvdpau1_1.4-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libvorbis/libvorbis0a_1.3.7-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libvorbis/libvorbisenc2_1.3.7-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libvorbis/libvorbisfile3_1.3.7-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libvpx/libvpx-dev_1.9.0-1+deb11u3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libvpx/libvpx6_1.9.0-1+deb11u3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwacom/libwacom-common_1.8-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwacom/libwacom-dev_1.8-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwacom/libwacom2_1.8-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwebp/libwebp-dev_0.6.1-2.1+deb11u2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwebp/libwebp6_0.6.1-2.1+deb11u2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwebp/libwebp7_1.2.4-0.2+deb12u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2.1+deb11u2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwebp/libwebpmux3_0.6.1-2.1+deb11u2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libx11/libx11-6_1.7.2-1+deb11u2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libx11/libx11-data_1.7.2-1+deb11u2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libx11/libx11-dev_1.7.2-1+deb11u2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libx11/libx11-xcb-dev_1.7.2-1+deb11u2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libx11/libx11-xcb1_1.7.2-1+deb11u2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxau/libxau-dev_1.0.9-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxau/libxau6_1.0.9-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-dri2-0_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-dri3-0_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-dri3-dev_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-glx0-dev_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-glx0_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-present-dev_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-present0_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-randr0-dev_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-randr0_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-render0-dev_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-render0_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-shape0-dev_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-shape0_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-shm0-dev_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-shm0_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-sync-dev_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-sync1_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-xfixes0-dev_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-xfixes0_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-xinerama0_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-xinput0_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-xkb1_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb1-dev_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb1_1.14-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.5-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcomposite/libxcomposite1_0.4.5-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcrypt/libcrypt-dev_4.4.18-4_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcrypt/libcrypt1_4.4.18-4_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcursor/libxcursor-dev_1.2.0-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcursor/libxcursor1_1.2.0-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxdamage/libxdamage-dev_1.1.5-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxdamage/libxdamage1_1.1.5-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxext/libxext-dev_1.3.3-1.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxext/libxext6_1.3.3-1.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxfixes/libxfixes3_5.0.3-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxi/libxi-dev_1.7.10-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxi/libxi6_1.7.10-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxinerama/libxinerama1_1.1.4-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxkbcommon/libxkbcommon-dev_1.0.3-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxkbcommon/libxkbcommon-x11-0_1.0.3-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxkbcommon/libxkbcommon0_1.0.3-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxml2/libxml2-dev_2.9.10+dfsg-6.7+deb11u4_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxml2/libxml2-utils_2.9.10+dfsg-6.7+deb11u4_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxml2/libxml2_2.9.10+dfsg-6.7+deb11u4_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxshmfence/libxshmfence-dev_1.3-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxslt/libxslt1-dev_1.1.34-4+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxslt/libxslt1.1_1.1.34-4+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxss/libxss-dev_1.2.3-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxss/libxss1_1.2.3-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxt/libxt-dev_1.2.0-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxt/libxt6_1.2.0-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxtst/libxtst6_1.2.3-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libz/libzstd/libzstd1_1.4.8+dfsg-2.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/make-dfsg/make_4.3-4.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mako/python3-mako_1.1.3+ds1-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/markupsafe/python3-markupsafe_2.0.1-2~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/md4c/libmd4c0_0.4.7-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/media-types/media-types_4.0.0_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libegl-mesa0_20.3.5-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libegl1-mesa-dev_20.3.5-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libgbm-dev_20.3.5-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libgbm1_20.3.5-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libgl1-mesa-dev_20.3.5-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libgl1-mesa-dri_20.3.5-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libglapi-mesa_20.3.5-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libglx-mesa0_20.3.5-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/mesa-common-dev_20.3.5-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/minizip/libminizip-dev_1.1-8+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/minizip/libminizip1_1.1-8+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mpclib3/libmpc3_1.2.0-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mpdecimal/libmpdec3_2.5.1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mpfr4/libmpfr6_4.1.0-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mpg123/libmpg123-0_1.26.4-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mtdev/libmtdev-dev_1.1.6-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mtdev/libmtdev1_1.1.6-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/ncurses/libncurses-dev_6.2+20201114-2+deb11u2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/ncurses/libncurses6_6.2+20201114-2+deb11u2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/ncurses/libncursesw6_6.2+20201114-2+deb11u2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/ncurses/libtinfo6_6.2+20201114-2+deb11u2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/ncurses/ncurses-bin_6.2+20201114-2+deb11u2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nettle/libhogweed6_3.7.3-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nettle/libnettle8_3.7.3-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nettle/nettle-dev_3.7.3-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nghttp2/libnghttp2-14_1.43.0-1+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/norm/libnorm1_1.5.9+dfsg-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nspr/libnspr4-dev_4.29-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nspr/libnspr4_4.29-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nss/libnss3-dev_3.61-1+deb11u3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nss/libnss3_3.61-1+deb11u3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/numactl/libnuma1_2.0.12-1+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/ocl-icd/ocl-icd-libopencl1_2.2.14-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/openjpeg2/libopenjp2-7_2.4.0-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/openldap/libldap-2.4-2_2.4.57+dfsg-3+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/openssl/libssl-dev_1.1.1w-0+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/openssl/libssl1.1_1.1.1w-0+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/opus/libopus-dev_1.3.1-0.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/opus/libopus0_1.3.1-0.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/p11-kit/libp11-kit-dev_0.23.22-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/p11-kit/libp11-kit0_0.23.22-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pam/libpam-modules_1.4.0-9+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pam/libpam-runtime_1.4.0-9+deb11u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pam/libpam0g-dev_1.4.0-9+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pam/libpam0g_1.4.0-9+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/gir1.2-pango-1.0_1.46.2-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/libpango-1.0-0_1.46.2-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/libpango1.0-dev_1.46.2-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/libpangocairo-1.0-0_1.46.2-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/libpangoft2-1.0-0_1.46.2-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/libpangoxft-1.0-0_1.46.2-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/pango1.0-tools_1.46.2-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/patch/patch_2.7.6-7_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pci.ids/pci.ids_0.0~2021.02.08-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pciutils/libpci-dev_3.7.0-5_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pciutils/libpci3_3.7.0-5_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre2/libpcre2-16-0_10.36-2+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre2/libpcre2-32-0_10.36-2+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre2/libpcre2-8-0_10.36-2+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre2/libpcre2-dev_10.36-2+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre2/libpcre2-posix2_10.36-2+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre3/libpcre16-3_8.39-13_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre3/libpcre3-dev_8.39-13_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre3/libpcre32-3_8.39-13_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre3/libpcre3_8.39-13_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre3/libpcrecpp0v5_8.39-13_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/perl/libperl5.32_5.32.1-4+deb11u3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/perl/perl-base_5.32.1-4+deb11u3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/perl/perl-modules-5.32_5.32.1-4+deb11u3_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/perl/perl_5.32.1-4+deb11u3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pipewire/libpipewire-0.3-0_0.3.65-2~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pipewire/libpipewire-0.3-dev_0.3.65-2~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pipewire/libspa-0.2-dev_0.3.65-2~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pipewire/libspa-0.2-modules_0.3.65-2~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pixman/libpixman-1-0_0.40.0-1.1~deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pixman/libpixman-1-dev_0.40.0-1.1~deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pkg-config/pkg-config_0.29.2-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pulseaudio/libpulse-dev_14.2-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pulseaudio/libpulse-mainloop-glib0_14.2-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pulseaudio/libpulse0_14.2-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python-markdown/python3-markdown_3.3.4-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3-defaults/libpython3-stdlib_3.9.2-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3-defaults/python3_3.9.2-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3-stdlib-extensions/python3-distutils_3.9.2-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3-stdlib-extensions/python3-lib2to3_3.9.2-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3.9/libpython3.9-minimal_3.9.2-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3.9/libpython3.9-stdlib_3.9.2-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3.9/python3.9-minimal_3.9.2-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3.9/python3.9_3.9.2-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6concurrent6_6.4.2+dfsg-11~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6core6_6.4.2+dfsg-11~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6dbus6_6.4.2+dfsg-11~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6gui6_6.4.2+dfsg-11~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6network6_6.4.2+dfsg-11~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6opengl6_6.4.2+dfsg-11~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6openglwidgets6_6.4.2+dfsg-11~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6printsupport6_6.4.2+dfsg-11~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6sql6_6.4.2+dfsg-11~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6test6_6.4.2+dfsg-11~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6widgets6_6.4.2+dfsg-11~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6xml6_6.4.2+dfsg-11~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/qmake6-bin_6.4.2+dfsg-11~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/qmake6_6.4.2+dfsg-11~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/qt6-base-dev-tools_6.4.2+dfsg-11~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/qt6-base-dev_6.4.2+dfsg-11~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/qt6-qpa-plugins_6.4.2+dfsg-11~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5concurrent5_5.15.2+dfsg-9+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5core5a_5.15.2+dfsg-9+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5dbus5_5.15.2+dfsg-9+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5gui5_5.15.2+dfsg-9+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5network5_5.15.2+dfsg-9+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5printsupport5_5.15.2+dfsg-9+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5sql5_5.15.2+dfsg-9+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5test5_5.15.2+dfsg-9+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5widgets5_5.15.2+dfsg-9+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5xml5_5.15.2+dfsg-9+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/qt5-qmake-bin_5.15.2+dfsg-9+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/qt5-qmake_5.15.2+dfsg-9+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/qtbase5-dev-tools_5.15.2+dfsg-9+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/qtbase5-dev_5.15.2+dfsg-9+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtchooser/qtchooser_66-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/r/re2/libre2-9_20210201+dfsg-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/r/re2/libre2-dev_20210201+dfsg-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/r/readline/libreadline8_8.1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/r/readline/readline-common_8.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/r/rtmpdump/librtmp1_2.4+20151223.gitfa8646d.1-2+b2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/sensible-utils/sensible-utils_0.0.14_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/setuptools/python3-pkg-resources_66.1.1-1~bpo11+1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/shadow/login_4.8.1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/shadow/passwd_4.8.1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/shared-mime-info/shared-mime-info_2.0-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/shine/libshine3_3.1.1-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/snappy/libsnappy-dev_1.1.8-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/snappy/libsnappy1v5_1.1.8-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/speech-dispatcher/libspeechd-dev_0.11.4-2~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/speech-dispatcher/libspeechd2_0.11.4-2~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/speex/libspeex1_1.2~rc1.2-1.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/sqlite3/libsqlite3-0_3.34.1-3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/srt/libsrt1.4-gnutls_1.4.2-1.3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/libpam-systemd_252.29-1~deb12u1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/libsystemd-dev_252.29-1~deb12u1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/libsystemd-shared_252.29-1~deb12u1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/libsystemd0_252.29-1~deb12u1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/libudev-dev_252.29-1~deb12u1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/libudev1_252.29-1~deb12u1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/systemd-sysv_252.29-1~deb12u1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/systemd_252.29-1~deb12u1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tar/tar_1.34+dfsg-1+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tcp-wrappers/libwrap0_7.6.q-31_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tiff/libtiff-dev_4.2.0-1+deb11u5_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tiff/libtiff5_4.2.0-1+deb11u5_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tiff/libtiff6_4.5.0-6+deb12u2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tiff/libtiffxx5_4.2.0-1+deb11u5_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tslib/libts0_1.22-1+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/twolame/libtwolame0_0.4.0-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tzdata/tzdata_2021a-1+deb11u11_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/ucf/ucf_3.0043_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/unbound/libunbound8_1.17.1-2~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/libblkid-dev_2.36.1-8+deb11u2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/libblkid1_2.36.1-8+deb11u2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/libfdisk1_2.36.1-8+deb11u2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/libmount-dev_2.36.1-8+deb11u2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/libmount1_2.36.1-8+deb11u2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/libuuid1_2.36.1-8+deb11u2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/mount_2.36.1-8+deb11u2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/util-linux_2.36.1-8+deb11u2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/uuid-dev_2.36.1-8+deb11u2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/v/valgrind/valgrind_3.16.1-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/v/vulkan-loader/libvulkan-dev_1.3.224.0-1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/v/vulkan-loader/libvulkan1_1.3.224.0-1~bpo11+1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wavpack/libwavpack1_5.4.0-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland-protocols/wayland-protocols_1.20-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-bin_1.18.0-2~exp1.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-client0_1.18.0-2~exp1.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-cursor0_1.18.0-2~exp1.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-dev_1.18.0-2~exp1.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-egl-backend-dev_1.18.0-2~exp1.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-egl1_1.18.0-2~exp1.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-server0_1.18.0-2~exp1.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/webrtc-audio-processing/libwebrtc-audio-processing1_0.3-1+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/x264/libx264-160_0.160.3011+gitcde9a93-2.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/x265/libx265-192_3.4-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util-image/libxcb-image0-dev_0.4.0-1+b3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util-image/libxcb-image0_0.4.0-1+b3_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util-keysyms/libxcb-keysyms1_0.4.0-1+b2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0-dev_0.3.9-1+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0_0.3.9-1+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util-wm/libxcb-icccm4_0.4.1-1.1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util/libxcb-util-dev_0.4.0-1+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util/libxcb-util1_0.4.0-1+b1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xft/libxft-dev_2.3.2-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xft/libxft2_2.3.2-2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xkeyboard-config/xkb-data_2.29-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorg-sgml-doctools/xorg-sgml-doctools_1.11-1.1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorg/x11-common_7.7+22_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-core-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-input-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-randr-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-record-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-render-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-scrnsaver-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-xext-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-xf86vidmode-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-xinerama-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xtrans/xtrans-dev_1.4.0-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xvidcore/libxvidcore4_1.3.7-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xz-utils/liblzma-dev_5.2.5-2.1~deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xz-utils/liblzma5_5.2.5-2.1~deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xz-utils/xz-utils_5.2.5-2.1~deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/z/z3/libz3-4_4.8.10-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/z/zeromq3/libzmq5_4.3.4-1+deb11u1_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-2+deb11u2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/z/zlib/zlib1g_1.2.11.dfsg-2+deb11u2_mips64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/z/zvbi/libzvbi-common_0.2.35-18_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/z/zvbi/libzvbi0_0.2.35-18_mips64el.deb diff --git a/naiveproxy/src/build/linux/sysroot_scripts/generated_package_lists/bullseye.mipsel b/naiveproxy/src/build/linux/sysroot_scripts/generated_package_lists/bullseye.mipsel index 521dd5248b..bf657db624 100644 --- a/naiveproxy/src/build/linux/sysroot_scripts/generated_package_lists/bullseye.mipsel +++ b/naiveproxy/src/build/linux/sysroot_scripts/generated_package_lists/bullseye.mipsel @@ -1,462 +1,631 @@ -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/alsa-lib/libasound2-dev_1.2.4-1.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/alsa-lib/libasound2_1.2.4-1.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/aom/libaom0_1.0.0.errata1-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/aom/libaom3_3.6.0-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.38.0-4~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.38.0-4~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-core/libatspi2.0-0_2.44.1-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/at-spi2-core/libatspi2.0-dev_2.44.1-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/atk1.0/libatk1.0-0_2.38.0-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/atk1.0/libatk1.0-dev_2.38.0-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/attr/libattr1_2.4.48-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/audit/libaudit1_3.0-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/avahi/libavahi-client3_0.8-5+deb11u2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/a/avahi/libavahi-common3_0.8-5+deb11u2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/bluez/libbluetooth-dev_5.55-3.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/bluez/libbluetooth3_5.55-3.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/brotli/libbrotli-dev_1.0.9-2+b2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/brotli/libbrotli1_1.0.9-2+b2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/b/bzip2/libbz2-1.0_1.0.8-4_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo-gobject2_1.16.0-5_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo-script-interpreter2_1.16.0-5_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo2-dev_1.16.0-5_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cairo/libcairo2_1.16.0-5_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/chromaprint/libchromaprint1_1.5.0-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cjson/libcjson1_1.7.14-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/codec2/libcodec2-0.9_0.9.2-4_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/codec2/libcodec2-1.0_1.0.5-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/colord/libcolord2_1.4.5-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcups2-dev_2.3.3op2-3+deb11u2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcups2_2.3.3op2-3+deb11u2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcupsimage2-dev_2.3.3op2-3+deb11u2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cups/libcupsimage2_2.3.3op2-3+deb11u2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/curl/libcurl3-gnutls_7.88.1-7~bpo11+2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/curl/libcurl4-gnutls-dev_7.88.1-7~bpo11+2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/c/cyrus-sasl2/libsasl2-2_2.1.27+dfsg-2.1+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dav1d/libdav1d4_0.7.1-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dav1d/libdav1d6_1.0.0-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.8_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dbus/libdbus-1-3_1.12.24-0+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/dbus/libdbus-1-dev_1.12.24-0+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/d/double-conversion/libdouble-conversion3_3.1.5-6.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/e2fsprogs/comerr-dev_2.1-1.46.6-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/e2fsprogs/libcom-err2_1.46.6-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/elfutils/libelf-dev_0.187-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/elfutils/libelf1_0.187-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/expat/libexpat1-dev_2.2.10-2+deb11u5_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/e/expat/libexpat1_2.2.10-2+deb11u5_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavcodec-dev_4.3.5-0+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavcodec58_4.3.5-0+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavcodec59_5.1.3-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavformat-dev_4.3.5-0+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavformat59_5.1.3-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavutil-dev_4.3.5-0+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavutil56_4.3.5-0+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libavutil57_5.1.3-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libswresample-dev_4.3.5-0+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libswresample3_4.3.5-0+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/ffmpeg/libswresample4_5.1.3-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/flac/libflac-dev_1.3.3-2+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/flac/libflac8_1.3.3-2+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fontconfig/libfontconfig-dev_2.13.1-4.2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fontconfig/libfontconfig1_2.13.1-4.2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/freetype/libfreetype-dev_2.10.4+dfsg-1+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/freetype/libfreetype6_2.10.4+dfsg-1+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fribidi/libfribidi-dev_1.0.8-2+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/f/fribidi/libfribidi0_1.0.8-2+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/game-music-emu/libgme0_0.6.3-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libatomic1_10.2.1-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libgcc-10-dev_10.2.1-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libgcc-s1_10.2.1-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libgomp1_10.2.1-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libstdc++-10-dev_10.2.1-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gcc-10/libstdc++6_10.2.1-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-0_2.42.2+dfsg-1+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-dev_2.42.2+dfsg-1+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glib2.0/libglib2.0-0_2.66.8-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glib2.0/libglib2.0-dev_2.66.8-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glibc/libc6-dev_2.31-13+deb11u5_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/glibc/libc6_2.31-13+deb11u5_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gmp/libgmp10_6.2.1+dfsg-1+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls-dane0_3.7.1-5+deb11u3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls-openssl27_3.7.1-5+deb11u3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls28-dev_3.7.1-5+deb11u3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutls30_3.7.1-5+deb11u3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gnutls28/libgnutlsxx28_3.7.1-5+deb11u3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphene/libgraphene-1.0-0_1.10.4+dfsg1-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphene/libgraphene-1.0-dev_1.10.4+dfsg1-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphite2/libgraphite2-3_1.3.14-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/graphite2/libgraphite2-dev_1.3.14-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.33-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk+3.0/libgtk-3-0_3.24.24-4+deb11u3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.24-4+deb11u3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk4/libgtk-4-1_4.8.3+ds-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/g/gtk4/libgtk-4-dev_4.8.3+ds-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz-dev_2.7.4-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz-gobject0_2.7.4-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz-icu0_2.7.4-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/harfbuzz/libharfbuzz0b_2.7.4-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/h/highway/libhwy1_1.0.3-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git180724-3+b2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/i/icu/libicu67_67.1-7_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/jbigkit/libjbig-dev_2.1-3.1+b2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/jpeg-xl/libjxl0.7_0.7.0-10_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/j/json-glib/libjson-glib-1.0-0_1.6.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/keyutils/libkeyutils1_1.6.1-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/krb5-multidev_1.18.3-6+deb11u3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libgssapi-krb5-2_1.18.3-6+deb11u3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libgssrpc4_1.18.3-6+deb11u3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libk5crypto3_1.18.3-6+deb11u3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkadm5clnt-mit12_1.18.3-6+deb11u3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkadm5srv-mit12_1.18.3-6+deb11u3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkdb5-10_1.18.3-6+deb11u3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkrb5-3_1.18.3-6+deb11u3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkrb5-dev_1.18.3-6+deb11u3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/k/krb5/libkrb5support0_1.18.3-6+deb11u3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lame/libmp3lame0_3.100-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lcms2/liblcms2-2_2.12~rc1-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lerc/liblerc4_4.0.0+ds-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/linux/linux-libc-dev_6.1.12-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lz4/liblz4-1_1.9.3-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/l/lzo2/liblzo2-2_2.10-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/liba/libasyncns/libasyncns0_0.8-6+b2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libb/libb2/libb2-1_0.98.1-1.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libb/libbluray/libbluray2_1.2.1-4+deb11u2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libb/libbsd/libbsd0_0.11.3-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-2.2+b1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcap2/libcap-dev_2.44-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcap2/libcap2_2.44-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libc/libcloudproviders/libcloudproviders0_0.3.0-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdatrie/libdatrie-dev_0.2.13-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdatrie/libdatrie1_0.2.13-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr492+repack1-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr492+repack1-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_18.10.20180917~bzr492+repack1-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_18.10.20180917~bzr492+repack1-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdeflate/libdeflate-dev_1.10-2~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdeflate/libdeflate0_1.10-2~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.104-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-dev_2.4.104-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-nouveau2_2.4.104-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm-radeon1_2.4.104-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libd/libdrm/libdrm2_2.4.104-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libepoxy/libepoxy-dev_1.5.8-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libepoxy/libepoxy0_1.5.8-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libevdev/libevdev-dev_1.11.0+dfsg-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libevdev/libevdev2_1.11.0+dfsg-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libe/libevent/libevent-2.1-7_2.1.12-stable-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libf/libffi/libffi-dev_3.3-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libf/libffi/libffi7_3.3-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.7-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgcrypt20/libgcrypt20_1.8.7-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libegl-dev_1.3.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libegl1_1.3.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgl-dev_1.3.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgl1_1.3.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgles-dev_1.3.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgles1_1.3.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libgles2_1.3.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglvnd-dev_1.3.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglvnd0_1.3.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglx-dev_1.3.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libglx0_1.3.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libglvnd/libopengl0_1.3.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgpg-error/libgpg-error-dev_1.38-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgpg-error/libgpg-error0_1.38-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgsm/libgsm1_1.0.18-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libg/libgudev/libgudev-1.0-0_234-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libice/libice6_1.0.10-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libidl/libidl-2-0_0.8.14-4+b12_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libidn/libidn11_1.33-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libidn2/libidn2-0_2.3.0-5_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libinput/libinput-dev_1.16.4-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libi/libinput/libinput10_1.16.4-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_2.0.6-4_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_2.0.6-4_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.9.4-4_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libj/libjsoncpp/libjsoncpp24_1.9.4-4_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libm/libmd/libmd0_1.0.3-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libn/libnsl/libnsl2_1.3.0-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b10_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libo/libogg/libogg-dev_1.3.4-0.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libo/libogg/libogg0_1.3.4-0.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libo/libopenmpt/libopenmpt0_0.4.11-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpciaccess/libpciaccess0_0.16-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpgm/libpgm-5.3-0_5.3.128~dfsg-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpng1.6/libpng-dev_1.6.37-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpng1.6/libpng16-16_1.6.37-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libproxy/libproxy1v5_0.4.17-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpsl/libpsl5_0.21.0-1.2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.4-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libr/librabbitmq/librabbitmq4_0.10.0-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libr/librest/librest-0.7-0_0.8.1-1.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libr/librist/librist4_0.2.7+dfsg-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libr/librsvg/librsvg2-2_2.50.3+dfsg-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libselinux/libselinux1-dev_3.1-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libselinux/libselinux1_3.1-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsepol/libsepol1-dev_3.1-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsepol/libsepol1_3.1-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsm/libsm6_1.2.3-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsndfile/libsndfile1_1.0.31-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsodium/libsodium23_1.0.18-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.72.0-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsoup2.4/libsoup2.4-1_2.72.0-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libsoxr/libsoxr0_0.1.3-4_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libssh/libssh-gcrypt-4_0.9.5-1+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libs/libssh2/libssh2-1_1.9.0-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtasn1-6/libtasn1-6_4.16.0-2+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libthai/libthai-dev_0.1.28-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libthai/libthai0_0.1.28-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtheora/libtheora0_1.1.1+dfsg.1-15_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtirpc/libtirpc3_1.3.1-1+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libt/libtool/libltdl7_2.4.6-15_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libudfread/libudfread0_1.1.1-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libunistring/libunistring2_0.9.10-4_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libutempter/libutempter-dev_1.2.1-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libu/libutempter/libutempter0_1.2.1-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-dev_2.17.0-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-drm2_2.17.0-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-glx2_2.17.0-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-wayland2_2.17.0-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva-x11-2_2.17.0-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libva/libva2_2.17.0-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvdpau/libvdpau1_1.4-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvorbis/libvorbis0a_1.3.7-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvorbis/libvorbisenc2_1.3.7-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvorbis/libvorbisfile3_1.3.7-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvpx/libvpx-dev_1.9.0-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvpx/libvpx6_1.9.0-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libv/libvpx/libvpx7_1.12.0-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwacom/libwacom2_1.8-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebp-dev_0.6.1-2.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebp6_0.6.1-2.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebp7_1.2.4-0.2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libw/libwebp/libwebpmux3_0.6.1-2.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-6_1.7.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-dev_1.7.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-xcb-dev_1.7.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libx11/libx11-xcb1_1.7.2-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxau/libxau-dev_1.0.9-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxau/libxau6_1.0.9-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri2-0_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri3-0_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-dri3-dev_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-glx0-dev_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-glx0_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-present-dev_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-present0_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-randr0-dev_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-randr0_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-render0-dev_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-render0_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shape0-dev_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shape0_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shm0-dev_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-shm0_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-sync-dev_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-sync1_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xfixes0-dev_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xfixes0_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xinerama0_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xinput0_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb-xkb1_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb1-dev_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcb/libxcb1_1.14-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.5-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcomposite/libxcomposite1_0.4.5-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcrypt/libcrypt-dev_4.4.18-4_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcrypt/libcrypt1_4.4.18-4_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcursor/libxcursor-dev_1.2.0-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxcursor/libxcursor1_1.2.0-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdamage/libxdamage-dev_1.1.5-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdamage/libxdamage1_1.1.5-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxext/libxext-dev_1.3.3-1.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxext/libxext6_1.3.3-1.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxfixes/libxfixes3_5.0.3-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxi/libxi-dev_1.7.10-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxi/libxi6_1.7.10-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxinerama/libxinerama1_1.1.4-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxkbcommon/libxkbcommon-dev_1.0.3-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxkbcommon/libxkbcommon-x11-0_1.0.3-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxkbcommon/libxkbcommon0_1.0.3-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxml2/libxml2-dev_2.9.10+dfsg-6.7+deb11u4_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxml2/libxml2_2.9.10+dfsg-6.7+deb11u4_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxshmfence/libxshmfence-dev_1.3-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxslt/libxslt1-dev_1.1.34-4+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxslt/libxslt1.1_1.1.34-4+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxss/libxss-dev_1.2.3-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxss/libxss1_1.2.3-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxt/libxt-dev_1.2.0-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxt/libxt6_1.2.0-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxtst/libxtst6_1.2.3-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/libz/libzstd/libzstd1_1.4.8+dfsg-2.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mbedtls/libmbedcrypto7_2.28.3-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/md4c/libmd4c0_0.4.7-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libegl1-mesa-dev_20.3.5-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libegl1-mesa_20.3.5-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgbm-dev_20.3.5-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgbm1_20.3.5-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgl1-mesa-dev_20.3.5-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libgl1-mesa-glx_20.3.5-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libglapi-mesa_20.3.5-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/libwayland-egl1-mesa_20.3.5-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mesa/mesa-common-dev_20.3.5-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/minizip/libminizip-dev_1.1-8+b1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/minizip/libminizip1_1.1-8+b1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mpg123/libmpg123-0_1.26.4-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/m/mtdev/libmtdev1_1.1.6-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libncurses-dev_6.2+20201114-2+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libncurses6_6.2+20201114-2+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libncursesw6_6.2+20201114-2+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/ncurses/libtinfo6_6.2+20201114-2+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nettle/libhogweed6_3.7.3-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nettle/libnettle8_3.7.3-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nghttp2/libnghttp2-14_1.43.0-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/norm/libnorm1_1.5.9+dfsg-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nspr/libnspr4-dev_4.29-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nspr/libnspr4_4.29-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nss/libnss3-dev_3.61-1+deb11u3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/nss/libnss3_3.61-1+deb11u3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/n/numactl/libnuma1_2.0.12-1+b1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/ocl-icd/ocl-icd-libopencl1_2.2.14-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openjpeg2/libopenjp2-7_2.4.0-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openldap/libldap-2.4-2_2.4.59+dfsg-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openssl/libssl-dev_1.1.1n-0+deb11u4_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/openssl/libssl1.1_1.1.1n-0+deb11u4_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/opus/libopus-dev_1.3.1-0.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/o/opus/libopus0_1.3.1-0.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/p11-kit/libp11-kit0_0.23.22-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pam/libpam0g-dev_1.4.0-9+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pam/libpam0g_1.4.0-9+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpango-1.0-0_1.46.2-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpango1.0-dev_1.46.2-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpangocairo-1.0-0_1.46.2-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpangoft2-1.0-0_1.46.2-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pango1.0/libpangoxft-1.0-0_1.46.2-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pciutils/libpci-dev_3.7.0-5_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pciutils/libpci3_3.7.0-5_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-16-0_10.36-2+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-32-0_10.36-2+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-8-0_10.36-2+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-dev_10.36-2+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre2/libpcre2-posix2_10.36-2+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre16-3_8.39-13_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre3-dev_8.39-13_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre32-3_8.39-13_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcre3_8.39-13_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pcre3/libpcrecpp0v5_8.39-13_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pipewire/libpipewire-0.3-0_0.3.65-2~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pipewire/libpipewire-0.3-dev_0.3.65-2~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pipewire/libspa-0.2-dev_0.3.65-2~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pixman/libpixman-1-0_0.40.0-1.1~deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pixman/libpixman-1-dev_0.40.0-1.1~deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pulseaudio/libpulse-dev_14.2-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pulseaudio/libpulse-mainloop-glib0_14.2-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/p/pulseaudio/libpulse0_14.2-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6concurrent6_6.4.2+dfsg-10~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6core6_6.4.2+dfsg-10~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6dbus6_6.4.2+dfsg-10~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6gui6_6.4.2+dfsg-10~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6network6_6.4.2+dfsg-10~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6opengl6_6.4.2+dfsg-10~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6openglwidgets6_6.4.2+dfsg-10~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6printsupport6_6.4.2+dfsg-10~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6sql6_6.4.2+dfsg-10~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6test6_6.4.2+dfsg-10~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6widgets6_6.4.2+dfsg-10~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/libqt6xml6_6.4.2+dfsg-10~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/qt6-base-dev-tools_6.4.2+dfsg-10~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qt6-base/qt6-base-dev_6.4.2+dfsg-10~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5concurrent5_5.15.2+dfsg-9_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5core5a_5.15.2+dfsg-9_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5dbus5_5.15.2+dfsg-9_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5gui5_5.15.2+dfsg-9_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5network5_5.15.2+dfsg-9_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5printsupport5_5.15.2+dfsg-9_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5sql5_5.15.2+dfsg-9_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5test5_5.15.2+dfsg-9_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5widgets5_5.15.2+dfsg-9_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/libqt5xml5_5.15.2+dfsg-9_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/qtbase5-dev-tools_5.15.2+dfsg-9_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/q/qtbase-opensource-src/qtbase5-dev_5.15.2+dfsg-9_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/re2/libre2-9_20210201+dfsg-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/re2/libre2-dev_20210201+dfsg-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/rtmpdump/librtmp1_2.4+20151223.gitfa8646d.1-2+b2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/r/rust-rav1e/librav1e0_0.5.1-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/shared-mime-info/shared-mime-info_2.0-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/shine/libshine3_3.1.1-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/snappy/libsnappy-dev_1.1.8-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/snappy/libsnappy1v5_1.1.8-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/speech-dispatcher/libspeechd-dev_0.11.4-2~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/speech-dispatcher/libspeechd2_0.11.4-2~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/speex/libspeex1_1.2~rc1.2-1.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/sqlite3/libsqlite3-0_3.34.1-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/srt/libsrt1.5-gnutls_1.5.1-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/svt-av1/libsvtav1enc1_1.4.1+dfsg-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libsystemd-dev_252.5-2~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libsystemd0_252.5-2~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libudev-dev_252.5-2~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/s/systemd/libudev1_252.5-2~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tcp-wrappers/libwrap0_7.6.q-31_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiff-dev_4.2.0-1+deb11u4_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiff5_4.2.0-1+deb11u4_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiff6_4.5.0-6_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tiff/libtiffxx5_4.2.0-1+deb11u4_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/tslib/libts0_1.22-1+b1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/t/twolame/libtwolame0_0.4.0-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/unbound/libunbound8_1.17.1-2~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libblkid-dev_2.36.1-8+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libblkid1_2.36.1-8+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libmount-dev_2.36.1-8+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libmount1_2.36.1-8+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/libuuid1_2.36.1-8+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/u/util-linux/uuid-dev_2.36.1-8+deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/v/vulkan-loader/libvulkan-dev_1.3.224.0-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/v/vulkan-loader/libvulkan1_1.3.224.0-1~bpo11+1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wavpack/libwavpack1_5.4.0-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland-protocols/wayland-protocols_1.20-1_all.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-bin_1.18.0-2~exp1.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-client0_1.18.0-2~exp1.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-cursor0_1.18.0-2~exp1.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-dev_1.18.0-2~exp1.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-egl-backend-dev_1.18.0-2~exp1.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-egl1_1.18.0-2~exp1.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/w/wayland/libwayland-server0_1.18.0-2~exp1.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/x264/libx264-160_0.160.3011+gitcde9a93-2.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/x264/libx264-164_0.164.3095+gitbaee400-3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/x265/libx265-192_3.4-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/x265/libx265-199_3.5-2+b1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-image/libxcb-image0-dev_0.4.0-1+b3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-image/libxcb-image0_0.4.0-1+b3_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-keysyms/libxcb-keysyms1_0.4.0-1+b2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0-dev_0.3.9-1+b1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0_0.3.9-1+b1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util-wm/libxcb-icccm4_0.4.1-1.1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util/libxcb-util-dev_0.4.0-1+b1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xcb-util/libxcb-util1_0.4.0-1+b1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xft/libxft-dev_2.3.2-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xft/libxft2_2.3.2-2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xorgproto/x11proto-dev_2020.1-1_all.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xvidcore/libxvidcore4_1.3.7-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/x/xz-utils/liblzma5_5.2.5-2.1~deb11u1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/z/zeromq3/libzmq5_4.3.4-1_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-2+deb11u2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/z/zlib/zlib1g_1.2.11.dfsg-2+deb11u2_mipsel.deb -https://snapshot.debian.org/archive/debian/20230611T210420Z/pool/main/z/zvbi/libzvbi0_0.2.35-18_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/acl/libacl1_2.2.53-10_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/adduser/adduser_3.118+deb11u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/adwaita-icon-theme/adwaita-icon-theme_3.38.0-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/alsa-lib/libasound2-data_1.2.4-1.1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/alsa-lib/libasound2-dev_1.2.4-1.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/alsa-lib/libasound2_1.2.4-1.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/aom/libaom0_1.0.0.errata1-3+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/apparmor/libapparmor1_2.13.6-10_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/argon2/libargon2-1_0~20171227-0.2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.38.0-4~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.38.0-4~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/at-spi2-core/gir1.2-atspi-2.0_2.44.1-1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/at-spi2-core/libatspi2.0-0_2.44.1-1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/at-spi2-core/libatspi2.0-dev_2.44.1-1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/atk1.0/gir1.2-atk-1.0_2.38.0-1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/atk1.0/libatk1.0-0_2.38.0-1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/atk1.0/libatk1.0-data_2.38.0-1~bpo11+1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/atk1.0/libatk1.0-dev_2.38.0-1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/audit/libaudit-common_3.0-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/audit/libaudit1_3.0-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/avahi/libavahi-client3_0.8-5+deb11u2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/avahi/libavahi-common-data_0.8-5+deb11u2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/avahi/libavahi-common3_0.8-5+deb11u2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/binutils/binutils-common_2.35.2-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/binutils/binutils-mipsel-linux-gnu_2.35.2-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/binutils/binutils_2.35.2-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/binutils/libbinutils_2.35.2-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/binutils/libctf-nobfd0_2.35.2-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/binutils/libctf0_2.35.2-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/bluez/libbluetooth-dev_5.55-3.1+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/bluez/libbluetooth3_5.55-3.1+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/brotli/libbrotli-dev_1.0.9-2+b2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/brotli/libbrotli1_1.0.9-2+b2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/build-essential/build-essential_12.9_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/bzip2/bzip2_1.0.8-4_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/bzip2/libbz2-1.0_1.0.8-4_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cairo/libcairo-gobject2_1.16.0-5_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cairo/libcairo-script-interpreter2_1.16.0-5_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cairo/libcairo2-dev_1.16.0-5_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cairo/libcairo2_1.16.0-5_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/chromaprint/libchromaprint1_1.5.0-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/codec2/libcodec2-0.9_0.9.2-4_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/colord/gir1.2-colord-1.0_1.4.5-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/colord/libcolord-dev_1.4.5-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/colord/libcolord2_1.4.5-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/coreutils/coreutils_8.32-4_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cryptsetup/libcryptsetup12_2.3.7-1+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cups/libcups2-dev_2.3.3op2-3+deb11u8_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cups/libcups2_2.3.3op2-3+deb11u8_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cups/libcupsimage2-dev_2.3.3op2-3+deb11u8_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cups/libcupsimage2_2.3.3op2-3+deb11u8_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/curl/libcurl3-gnutls_7.88.1-10+deb12u6~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/curl/libcurl4-gnutls-dev_7.88.1-10+deb12u6~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cyrus-sasl2/libsasl2-2_2.1.27+dfsg-2.1+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cyrus-sasl2/libsasl2-modules-db_2.1.27+dfsg-2.1+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dav1d/libdav1d4_0.7.1-3+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.8_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/dbus-bin_1.14.10-1~deb12u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/dbus-daemon_1.14.10-1~deb12u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/dbus-session-bus-common_1.14.10-1~deb12u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/dbus-system-bus-common_1.14.10-1~deb12u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/dbus-user-session_1.14.10-1~deb12u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/dbus_1.14.10-1~deb12u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/libdbus-1-3_1.12.28-0+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/libdbus-1-dev_1.12.28-0+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dconf/dconf-gsettings-backend_0.38.0-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dconf/dconf-service_0.38.0-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dconf/libdconf1_0.38.0-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/debconf/debconf_1.5.77_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/double-conversion/libdouble-conversion3_3.1.5-6.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dpkg/dpkg-dev_1.20.13_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dpkg/dpkg_1.20.13_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dpkg/libdpkg-perl_1.20.13_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/e/e2fsprogs/comerr-dev_2.1-1.46.6-1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/e/e2fsprogs/libcom-err2_1.46.6-1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/e/elfutils/libelf-dev_0.187-1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/e/elfutils/libelf1_0.187-1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/e/expat/libexpat1-dev_2.2.10-2+deb11u5_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/e/expat/libexpat1_2.2.10-2+deb11u5_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libavcodec-dev_4.3.7-0+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libavcodec58_4.3.7-0+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libavformat-dev_4.3.7-0+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libavformat58_4.3.7-0+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libavutil-dev_4.3.7-0+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libavutil56_4.3.7-0+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libswresample-dev_4.3.7-0+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libswresample3_4.3.7-0+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/flac/libflac-dev_1.3.3-2+deb11u2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/flac/libflac8_1.3.3-2+deb11u2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fontconfig/fontconfig-config_2.13.1-4.2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fontconfig/fontconfig_2.13.1-4.2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fontconfig/libfontconfig-dev_2.13.1-4.2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fontconfig/libfontconfig1-dev_2.13.1-4.2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fontconfig/libfontconfig1_2.13.1-4.2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fonts-dejavu/fonts-dejavu-core_2.37-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/freetype/libfreetype-dev_2.10.4+dfsg-1+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/freetype/libfreetype6-dev_2.10.4+dfsg-1+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/freetype/libfreetype6_2.10.4+dfsg-1+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fribidi/libfribidi-dev_1.0.8-2+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fribidi/libfribidi0_1.0.8-2+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/game-music-emu/libgme0_0.6.3-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/cpp-10_10.2.1-6_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/g++-10_10.2.1-6_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/gcc-10-base_10.2.1-6_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/gcc-10_10.2.1-6_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libatomic1_10.2.1-6_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libcc1-0_10.2.1-6_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libgcc-10-dev_10.2.1-6_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libgcc-s1_10.2.1-6_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libgomp1_10.2.1-6_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libstdc++-10-dev_10.2.1-6_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libstdc++6_10.2.1-6_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-defaults/cpp_10.2.1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-defaults/g++_10.2.1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-defaults/gcc_10.2.1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdbm/libgdbm-compat4_1.19-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdbm/libgdbm6_1.19-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdk-pixbuf/gir1.2-gdkpixbuf-2.0_2.42.2+dfsg-1+deb11u2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-0_2.42.2+dfsg-1+deb11u2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-dev_2.42.2+dfsg-1+deb11u2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-bin_2.42.2+dfsg-1+deb11u2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-common_2.42.2+dfsg-1+deb11u2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib-networking/glib-networking-common_2.66.0-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib-networking/glib-networking-services_2.66.0-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib-networking/glib-networking_2.66.0-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib2.0/libglib2.0-0_2.66.8-1+deb11u4_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib2.0/libglib2.0-bin_2.66.8-1+deb11u4_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib2.0/libglib2.0-data_2.66.8-1+deb11u4_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib2.0/libglib2.0-dev-bin_2.66.8-1+deb11u4_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib2.0/libglib2.0-dev_2.66.8-1+deb11u4_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glibc/libc-dev-bin_2.31-13+deb11u5_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glibc/libc6-dbg_2.31-13+deb11u5_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glibc/libc6-dev_2.31-13+deb11u11_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glibc/libc6-dev_2.31-13+deb11u5_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glibc/libc6_2.31-13+deb11u5_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gmp/libgmp-dev_6.2.1+dfsg-1+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gmp/libgmp10_6.2.1+dfsg-1+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gmp/libgmpxx4ldbl_6.2.1+dfsg-1+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gnutls28/libgnutls-dane0_3.7.1-5+deb11u5_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gnutls28/libgnutls-openssl27_3.7.1-5+deb11u5_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gnutls28/libgnutls28-dev_3.7.1-5+deb11u5_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gnutls28/libgnutls30_3.7.1-5+deb11u5_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gnutls28/libgnutlsxx28_3.7.1-5+deb11u5_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gobject-introspection/gir1.2-freedesktop_1.66.1-1+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gobject-introspection/gir1.2-glib-2.0_1.66.1-1+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gobject-introspection/gobject-introspection_1.66.1-1+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gobject-introspection/libgirepository-1.0-1_1.66.1-1+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gobject-introspection/libgirepository1.0-dev_1.66.1-1+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/graphene/gir1.2-graphene-1.0_1.10.4+dfsg1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/graphene/libgraphene-1.0-0_1.10.4+dfsg1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/graphene/libgraphene-1.0-dev_1.10.4+dfsg1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/graphite2/libgraphite2-3_1.3.14-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/graphite2/libgraphite2-dev_1.3.14-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gsettings-desktop-schemas/gsettings-desktop-schemas_3.38.0-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+2.0/gir1.2-gtk-2.0_2.24.33-2+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.33-2+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+2.0/libgtk2.0-common_2.24.33-2+deb11u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+2.0/libgtk2.0-dev_2.24.33-2+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+3.0/gir1.2-gtk-3.0_3.24.24-4+deb11u4_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+3.0/gtk-update-icon-cache_3.24.24-4+deb11u4_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+3.0/libgtk-3-0_3.24.24-4+deb11u4_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+3.0/libgtk-3-common_3.24.24-4+deb11u4_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.24-4+deb11u4_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk4/gir1.2-gtk-4.0_4.8.3+ds-2+deb12u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk4/libgtk-4-1_4.8.3+ds-2+deb12u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk4/libgtk-4-common_4.8.3+ds-2+deb12u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk4/libgtk-4-dev_4.8.3+ds-2+deb12u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/h/harfbuzz/gir1.2-harfbuzz-0.0_2.7.4-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/h/harfbuzz/libharfbuzz-dev_2.7.4-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/h/harfbuzz/libharfbuzz-gobject0_2.7.4-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/h/harfbuzz/libharfbuzz-icu0_2.7.4-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/h/harfbuzz/libharfbuzz0b_2.7.4-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/h/hicolor-icon-theme/hicolor-icon-theme_0.17-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/i/icu/icu-devtools_67.1-7_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/i/icu/libicu-dev_67.1-7_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/i/icu/libicu67_67.1-7_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/i/iptables/libip4tc2_1.8.7-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/i/isl/libisl23_0.23-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/j/jbigkit/libjbig-dev_2.1-3.1+b2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/j/json-c/libjson-c5_0.15-2+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/j/json-glib/libjson-glib-1.0-0_1.6.2-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/j/json-glib/libjson-glib-1.0-common_1.6.2-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/keyutils/libkeyutils1_1.6.1-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/kmod/libkmod2_28-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/krb5-multidev_1.18.3-6+deb11u5_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libgssapi-krb5-2_1.18.3-6+deb11u5_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libgssrpc4_1.18.3-6+deb11u5_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libk5crypto3_1.18.3-6+deb11u5_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libkadm5clnt-mit12_1.18.3-6+deb11u5_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libkadm5srv-mit12_1.18.3-6+deb11u5_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libkdb5-10_1.18.3-6+deb11u5_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libkrb5-3_1.18.3-6+deb11u5_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libkrb5-dev_1.18.3-6+deb11u5_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libkrb5support0_1.18.3-6+deb11u5_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lame/libmp3lame0_3.100-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lcms2/liblcms2-2_2.12~rc1-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lcms2/liblcms2-dev_2.12~rc1-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lerc/liblerc4_4.0.0+ds-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/linux/linux-libc-dev_6.1.94-1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/llvm-toolchain-11/libllvm11_11.0.1-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lm-sensors/libsensors-config_3.6.0-7_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lm-sensors/libsensors5_3.6.0-7_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lsb/lsb-base_11.1.0_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lvm2/dmsetup_1.02.175-2.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lvm2/libdevmapper1.02.1_1.02.175-2.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lz4/liblz4-1_1.9.3-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lzo2/liblzo2-2_2.10-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/liba/libasyncns/libasyncns0_0.8-6+b2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libb/libb2/libb2-1_0.98.1-1.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libb/libbluray/libbluray2_1.2.1-4+deb11u2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libb/libbsd/libbsd0_0.11.3-1+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-2.2+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libc/libcap2/libcap-dev_2.44-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libc/libcap2/libcap2_2.44-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libc/libcloudproviders/libcloudproviders0_0.3.0-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdatrie/libdatrie-dev_0.2.13-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdatrie/libdatrie1_0.2.13-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdbusmenu/gir1.2-dbusmenu-glib-0.4_18.10.20180917~bzr492+repack1-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr492+repack1-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr492+repack1-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdeflate/libdeflate-dev_1.10-2~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdeflate/libdeflate0_1.10-2~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.104-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-common_2.4.104-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-dev_2.4.104-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-nouveau2_2.4.104-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-radeon1_2.4.104-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm2_2.4.104-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libe/libedit/libedit2_3.1-20191231-2+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libe/libepoxy/libepoxy-dev_1.5.8-1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libe/libepoxy/libepoxy0_1.5.8-1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libe/libevdev/libevdev-dev_1.11.0+dfsg-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libe/libevdev/libevdev2_1.11.0+dfsg-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libe/libevent/libevent-2.1-7_2.1.12-stable-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libf/libffi/libffi-dev_3.3-6_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libf/libffi/libffi7_3.3-6_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.7-6_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgcrypt20/libgcrypt20_1.8.7-6_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglu/libglu1-mesa-dev_9.0.1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglu/libglu1-mesa_9.0.1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libegl-dev_1.3.2-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libegl1_1.3.2-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libgl-dev_1.3.2-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libgl1_1.3.2-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libgles-dev_1.3.2-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libgles1_1.3.2-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libgles2_1.3.2-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libglvnd-dev_1.3.2-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libglvnd0_1.3.2-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libglx-dev_1.3.2-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libglx0_1.3.2-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libopengl-dev_1.3.2-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libopengl0_1.3.2-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgpg-error/libgpg-error-dev_1.38-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgpg-error/libgpg-error0_1.38-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgsm/libgsm1_1.0.18-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgudev/gir1.2-gudev-1.0_234-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgudev/libgudev-1.0-0_234-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgudev/libgudev-1.0-dev_234-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libice/libice-dev_1.0.10-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libice/libice6_1.0.10-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libidn2/libidn2-0_2.3.0-5_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libidn2/libidn2-dev_2.3.0-5_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libinput/libinput-bin_1.16.4-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libinput/libinput-dev_1.16.4-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libinput/libinput10_1.16.4-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libj/libjpeg-turbo/libjpeg-dev_2.0.6-4_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_2.0.6-4_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_2.0.6-4_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.9.4-4_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libj/libjsoncpp/libjsoncpp24_1.9.4-4_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libm/libmd/libmd0_1.0.3-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libn/libnsl/libnsl-dev_1.3.0-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libn/libnsl/libnsl2_1.3.0-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libo/libogg/libogg-dev_1.3.4-0.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libo/libogg/libogg0_1.3.4-0.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libo/libopenmpt/libopenmpt0_0.4.11-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libpgm/libpgm-5.3-0_5.3.128~dfsg-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libpng1.6/libpng-dev_1.6.37-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libpng1.6/libpng16-16_1.6.37-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libproxy/libproxy1v5_0.4.17-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libpsl/libpsl5_0.21.0-1.2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.4-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libr/librabbitmq/librabbitmq4_0.10.0-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libr/librest/librest-0.7-0_0.8.1-1.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libr/librsvg/librsvg2-2_2.50.3+dfsg-1+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libseccomp/libseccomp2_2.5.1-1+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libselinux/libselinux1-dev_3.1-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libselinux/libselinux1_3.1-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsemanage/libsemanage-common_3.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsemanage/libsemanage1_3.1-1+b2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsepol/libsepol1-dev_3.1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsepol/libsepol1_3.1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libset-scalar-perl/libset-scalar-perl_1.29-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsm/libsm-dev_1.2.3-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsm/libsm6_1.2.3-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsndfile/libsndfile1_1.0.31-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsodium/libsodium23_1.0.18-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.72.0-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsoup2.4/libsoup2.4-1_2.72.0-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsoxr/libsoxr0_0.1.3-4_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libssh/libssh-gcrypt-4_0.9.8-0+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libssh2/libssh2-1_1.9.0-2+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libtasn1-6/libtasn1-6-dev_4.16.0-2+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libtasn1-6/libtasn1-6_4.16.0-2+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libthai/libthai-data_0.1.28-3_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libthai/libthai-dev_0.1.28-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libthai/libthai0_0.1.28-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libtheora/libtheora0_1.1.1+dfsg.1-15_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libtirpc/libtirpc-common_1.3.1-1+deb11u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libtirpc/libtirpc-dev_1.3.1-1+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libtirpc/libtirpc3_1.3.1-1+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libu/libudfread/libudfread0_1.1.1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libu/libunistring/libunistring2_0.9.10-4_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libu/libutempter/libutempter-dev_1.2.1-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libu/libutempter/libutempter0_1.2.1-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libva/libva-dev_2.17.0-1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libva/libva-drm2_2.17.0-1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libva/libva-glx2_2.17.0-1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libva/libva-wayland2_2.17.0-1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libva/libva-x11-2_2.17.0-1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libva/libva2_2.17.0-1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libvdpau/libvdpau1_1.4-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libvorbis/libvorbis0a_1.3.7-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libvorbis/libvorbisenc2_1.3.7-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libvorbis/libvorbisfile3_1.3.7-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libvpx/libvpx-dev_1.9.0-1+deb11u3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libvpx/libvpx6_1.9.0-1+deb11u3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwacom/libwacom-common_1.8-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwacom/libwacom-dev_1.8-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwacom/libwacom2_1.8-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwebp/libwebp-dev_0.6.1-2.1+deb11u2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwebp/libwebp6_0.6.1-2.1+deb11u2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwebp/libwebp7_1.2.4-0.2+deb12u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2.1+deb11u2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwebp/libwebpmux3_0.6.1-2.1+deb11u2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libx11/libx11-6_1.7.2-1+deb11u2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libx11/libx11-data_1.7.2-1+deb11u2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libx11/libx11-dev_1.7.2-1+deb11u2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libx11/libx11-xcb-dev_1.7.2-1+deb11u2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libx11/libx11-xcb1_1.7.2-1+deb11u2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxau/libxau-dev_1.0.9-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxau/libxau6_1.0.9-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-dri2-0_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-dri3-0_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-dri3-dev_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-glx0-dev_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-glx0_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-present-dev_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-present0_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-randr0-dev_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-randr0_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-render0-dev_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-render0_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-shape0-dev_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-shape0_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-shm0-dev_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-shm0_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-sync-dev_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-sync1_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-xfixes0-dev_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-xfixes0_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-xinerama0_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-xinput0_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-xkb1_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb1-dev_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb1_1.14-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.5-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcomposite/libxcomposite1_0.4.5-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcrypt/libcrypt-dev_4.4.18-4_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcrypt/libcrypt1_4.4.18-4_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcursor/libxcursor-dev_1.2.0-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcursor/libxcursor1_1.2.0-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxdamage/libxdamage-dev_1.1.5-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxdamage/libxdamage1_1.1.5-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxext/libxext-dev_1.3.3-1.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxext/libxext6_1.3.3-1.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxfixes/libxfixes3_5.0.3-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxi/libxi-dev_1.7.10-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxi/libxi6_1.7.10-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxinerama/libxinerama1_1.1.4-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxkbcommon/libxkbcommon-dev_1.0.3-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxkbcommon/libxkbcommon-x11-0_1.0.3-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxkbcommon/libxkbcommon0_1.0.3-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxml2/libxml2-dev_2.9.10+dfsg-6.7+deb11u4_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxml2/libxml2-utils_2.9.10+dfsg-6.7+deb11u4_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxml2/libxml2_2.9.10+dfsg-6.7+deb11u4_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxshmfence/libxshmfence-dev_1.3-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxslt/libxslt1-dev_1.1.34-4+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxslt/libxslt1.1_1.1.34-4+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxss/libxss-dev_1.2.3-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxss/libxss1_1.2.3-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxt/libxt-dev_1.2.0-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxt/libxt6_1.2.0-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxtst/libxtst6_1.2.3-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libz/libzstd/libzstd1_1.4.8+dfsg-2.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/make-dfsg/make_4.3-4.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mako/python3-mako_1.1.3+ds1-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/markupsafe/python3-markupsafe_2.0.1-2~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/md4c/libmd4c0_0.4.7-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/media-types/media-types_4.0.0_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libegl-mesa0_20.3.5-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libegl1-mesa-dev_20.3.5-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libgbm-dev_20.3.5-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libgbm1_20.3.5-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libgl1-mesa-dev_20.3.5-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libgl1-mesa-dri_20.3.5-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libglapi-mesa_20.3.5-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libglx-mesa0_20.3.5-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/mesa-common-dev_20.3.5-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/minizip/libminizip-dev_1.1-8+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/minizip/libminizip1_1.1-8+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mpclib3/libmpc3_1.2.0-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mpdecimal/libmpdec3_2.5.1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mpfr4/libmpfr6_4.1.0-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mpg123/libmpg123-0_1.26.4-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mtdev/libmtdev-dev_1.1.6-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mtdev/libmtdev1_1.1.6-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/ncurses/libncurses-dev_6.2+20201114-2+deb11u2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/ncurses/libncurses6_6.2+20201114-2+deb11u2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/ncurses/libncursesw6_6.2+20201114-2+deb11u2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/ncurses/libtinfo6_6.2+20201114-2+deb11u2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/ncurses/ncurses-bin_6.2+20201114-2+deb11u2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nettle/libhogweed6_3.7.3-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nettle/libnettle8_3.7.3-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nettle/nettle-dev_3.7.3-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nghttp2/libnghttp2-14_1.43.0-1+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/norm/libnorm1_1.5.9+dfsg-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nspr/libnspr4-dev_4.29-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nspr/libnspr4_4.29-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nss/libnss3-dev_3.61-1+deb11u3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nss/libnss3_3.61-1+deb11u3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/numactl/libnuma1_2.0.12-1+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/ocl-icd/ocl-icd-libopencl1_2.2.14-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/openjpeg2/libopenjp2-7_2.4.0-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/openldap/libldap-2.4-2_2.4.57+dfsg-3+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/openssl/libssl-dev_1.1.1w-0+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/openssl/libssl1.1_1.1.1w-0+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/opus/libopus-dev_1.3.1-0.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/opus/libopus0_1.3.1-0.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/p11-kit/libp11-kit-dev_0.23.22-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/p11-kit/libp11-kit0_0.23.22-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pam/libpam-modules_1.4.0-9+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pam/libpam-runtime_1.4.0-9+deb11u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pam/libpam0g-dev_1.4.0-9+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pam/libpam0g_1.4.0-9+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/gir1.2-pango-1.0_1.46.2-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/libpango-1.0-0_1.46.2-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/libpango1.0-dev_1.46.2-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/libpangocairo-1.0-0_1.46.2-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/libpangoft2-1.0-0_1.46.2-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/libpangoxft-1.0-0_1.46.2-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/pango1.0-tools_1.46.2-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/patch/patch_2.7.6-7_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pci.ids/pci.ids_0.0~2021.02.08-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pciutils/libpci-dev_3.7.0-5_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pciutils/libpci3_3.7.0-5_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre2/libpcre2-16-0_10.36-2+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre2/libpcre2-32-0_10.36-2+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre2/libpcre2-8-0_10.36-2+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre2/libpcre2-dev_10.36-2+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre2/libpcre2-posix2_10.36-2+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre3/libpcre16-3_8.39-13_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre3/libpcre3-dev_8.39-13_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre3/libpcre32-3_8.39-13_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre3/libpcre3_8.39-13_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre3/libpcrecpp0v5_8.39-13_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/perl/libperl5.32_5.32.1-4+deb11u3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/perl/perl-base_5.32.1-4+deb11u3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/perl/perl-modules-5.32_5.32.1-4+deb11u3_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/perl/perl_5.32.1-4+deb11u3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pipewire/libpipewire-0.3-0_0.3.65-2~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pipewire/libpipewire-0.3-dev_0.3.65-2~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pipewire/libspa-0.2-dev_0.3.65-2~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pipewire/libspa-0.2-modules_0.3.65-2~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pixman/libpixman-1-0_0.40.0-1.1~deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pixman/libpixman-1-dev_0.40.0-1.1~deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pkg-config/pkg-config_0.29.2-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pulseaudio/libpulse-dev_14.2-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pulseaudio/libpulse-mainloop-glib0_14.2-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pulseaudio/libpulse0_14.2-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python-markdown/python3-markdown_3.3.4-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3-defaults/libpython3-stdlib_3.9.2-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3-defaults/python3_3.9.2-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3-stdlib-extensions/python3-distutils_3.9.2-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3-stdlib-extensions/python3-lib2to3_3.9.2-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3.9/libpython3.9-minimal_3.9.2-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3.9/libpython3.9-stdlib_3.9.2-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3.9/python3.9-minimal_3.9.2-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3.9/python3.9_3.9.2-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6concurrent6_6.4.2+dfsg-11~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6core6_6.4.2+dfsg-11~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6dbus6_6.4.2+dfsg-11~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6gui6_6.4.2+dfsg-11~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6network6_6.4.2+dfsg-11~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6opengl6_6.4.2+dfsg-11~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6openglwidgets6_6.4.2+dfsg-11~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6printsupport6_6.4.2+dfsg-11~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6sql6_6.4.2+dfsg-11~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6test6_6.4.2+dfsg-11~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6widgets6_6.4.2+dfsg-11~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6xml6_6.4.2+dfsg-11~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/qmake6-bin_6.4.2+dfsg-11~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/qmake6_6.4.2+dfsg-11~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/qt6-base-dev-tools_6.4.2+dfsg-11~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/qt6-base-dev_6.4.2+dfsg-11~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/qt6-qpa-plugins_6.4.2+dfsg-11~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5concurrent5_5.15.2+dfsg-9+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5core5a_5.15.2+dfsg-9+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5dbus5_5.15.2+dfsg-9+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5gui5_5.15.2+dfsg-9+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5network5_5.15.2+dfsg-9+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5printsupport5_5.15.2+dfsg-9+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5sql5_5.15.2+dfsg-9+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5test5_5.15.2+dfsg-9+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5widgets5_5.15.2+dfsg-9+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5xml5_5.15.2+dfsg-9+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/qt5-qmake-bin_5.15.2+dfsg-9+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/qt5-qmake_5.15.2+dfsg-9+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/qtbase5-dev-tools_5.15.2+dfsg-9+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/qtbase5-dev_5.15.2+dfsg-9+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtchooser/qtchooser_66-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/r/re2/libre2-9_20210201+dfsg-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/r/re2/libre2-dev_20210201+dfsg-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/r/readline/libreadline8_8.1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/r/readline/readline-common_8.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/r/rtmpdump/librtmp1_2.4+20151223.gitfa8646d.1-2+b2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/sensible-utils/sensible-utils_0.0.14_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/setuptools/python3-pkg-resources_66.1.1-1~bpo11+1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/shadow/login_4.8.1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/shadow/passwd_4.8.1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/shared-mime-info/shared-mime-info_2.0-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/shine/libshine3_3.1.1-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/snappy/libsnappy-dev_1.1.8-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/snappy/libsnappy1v5_1.1.8-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/speech-dispatcher/libspeechd-dev_0.11.4-2~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/speech-dispatcher/libspeechd2_0.11.4-2~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/speex/libspeex1_1.2~rc1.2-1.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/sqlite3/libsqlite3-0_3.34.1-3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/srt/libsrt1.4-gnutls_1.4.2-1.3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/libpam-systemd_252.29-1~deb12u1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/libsystemd-dev_252.29-1~deb12u1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/libsystemd-shared_252.29-1~deb12u1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/libsystemd0_252.29-1~deb12u1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/libudev-dev_252.29-1~deb12u1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/libudev1_252.29-1~deb12u1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/systemd-sysv_252.29-1~deb12u1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/systemd_252.29-1~deb12u1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tar/tar_1.34+dfsg-1+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tcp-wrappers/libwrap0_7.6.q-31_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tiff/libtiff-dev_4.2.0-1+deb11u5_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tiff/libtiff5_4.2.0-1+deb11u5_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tiff/libtiff6_4.5.0-6+deb12u2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tiff/libtiffxx5_4.2.0-1+deb11u5_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tslib/libts0_1.22-1+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/twolame/libtwolame0_0.4.0-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tzdata/tzdata_2021a-1+deb11u11_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/ucf/ucf_3.0043_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/unbound/libunbound8_1.17.1-2~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/libblkid-dev_2.36.1-8+deb11u2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/libblkid1_2.36.1-8+deb11u2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/libfdisk1_2.36.1-8+deb11u2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/libmount-dev_2.36.1-8+deb11u2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/libmount1_2.36.1-8+deb11u2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/libuuid1_2.36.1-8+deb11u2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/mount_2.36.1-8+deb11u2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/util-linux_2.36.1-8+deb11u2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/uuid-dev_2.36.1-8+deb11u2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/v/valgrind/valgrind_3.16.1-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/v/vulkan-loader/libvulkan-dev_1.3.224.0-1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/v/vulkan-loader/libvulkan1_1.3.224.0-1~bpo11+1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wavpack/libwavpack1_5.4.0-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland-protocols/wayland-protocols_1.20-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-bin_1.18.0-2~exp1.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-client0_1.18.0-2~exp1.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-cursor0_1.18.0-2~exp1.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-dev_1.18.0-2~exp1.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-egl-backend-dev_1.18.0-2~exp1.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-egl1_1.18.0-2~exp1.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-server0_1.18.0-2~exp1.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/webrtc-audio-processing/libwebrtc-audio-processing1_0.3-1+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/x264/libx264-160_0.160.3011+gitcde9a93-2.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/x265/libx265-192_3.4-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util-image/libxcb-image0-dev_0.4.0-1+b3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util-image/libxcb-image0_0.4.0-1+b3_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util-keysyms/libxcb-keysyms1_0.4.0-1+b2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0-dev_0.3.9-1+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0_0.3.9-1+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util-wm/libxcb-icccm4_0.4.1-1.1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util/libxcb-util-dev_0.4.0-1+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util/libxcb-util1_0.4.0-1+b1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xft/libxft-dev_2.3.2-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xft/libxft2_2.3.2-2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xkeyboard-config/xkb-data_2.29-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorg-sgml-doctools/xorg-sgml-doctools_1.11-1.1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorg/x11-common_7.7+22_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-core-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-input-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-randr-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-record-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-render-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-scrnsaver-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-xext-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-xf86vidmode-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-xinerama-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xtrans/xtrans-dev_1.4.0-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xvidcore/libxvidcore4_1.3.7-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xz-utils/liblzma-dev_5.2.5-2.1~deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xz-utils/liblzma5_5.2.5-2.1~deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xz-utils/xz-utils_5.2.5-2.1~deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/z/z3/libz3-4_4.8.10-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/z/zeromq3/libzmq5_4.3.4-1+deb11u1_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-2+deb11u2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/z/zlib/zlib1g_1.2.11.dfsg-2+deb11u2_mipsel.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/z/zvbi/libzvbi-common_0.2.35-18_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/z/zvbi/libzvbi0_0.2.35-18_mipsel.deb diff --git a/naiveproxy/src/build/linux/sysroot_scripts/generated_package_lists/bullseye.ppc64el b/naiveproxy/src/build/linux/sysroot_scripts/generated_package_lists/bullseye.ppc64el new file mode 100644 index 0000000000..d0e9aa9b6a --- /dev/null +++ b/naiveproxy/src/build/linux/sysroot_scripts/generated_package_lists/bullseye.ppc64el @@ -0,0 +1,637 @@ +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/acl/libacl1_2.2.53-10_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/adduser/adduser_3.118+deb11u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/adwaita-icon-theme/adwaita-icon-theme_3.38.0-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/alsa-lib/libasound2-data_1.2.4-1.1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/alsa-lib/libasound2-dev_1.2.4-1.1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/alsa-lib/libasound2_1.2.4-1.1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/aom/libaom0_1.0.0.errata1-3+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/apparmor/libapparmor1_2.13.6-10_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/argon2/libargon2-1_0~20171227-0.2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.38.0-4~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.38.0-4~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/at-spi2-core/gir1.2-atspi-2.0_2.44.1-1~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/at-spi2-core/libatspi2.0-0_2.44.1-1~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/at-spi2-core/libatspi2.0-dev_2.44.1-1~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/atk1.0/gir1.2-atk-1.0_2.38.0-1~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/atk1.0/libatk1.0-0_2.38.0-1~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/atk1.0/libatk1.0-data_2.38.0-1~bpo11+1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/atk1.0/libatk1.0-dev_2.38.0-1~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/audit/libaudit-common_3.0-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/audit/libaudit1_3.0-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/avahi/libavahi-client3_0.8-5+deb11u2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/avahi/libavahi-common-data_0.8-5+deb11u2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/a/avahi/libavahi-common3_0.8-5+deb11u2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/binutils/binutils-common_2.35.2-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/binutils/binutils-powerpc64le-linux-gnu_2.35.2-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/binutils/binutils_2.35.2-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/binutils/libbinutils_2.35.2-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/binutils/libctf-nobfd0_2.35.2-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/binutils/libctf0_2.35.2-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/bluez/libbluetooth-dev_5.55-3.1+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/bluez/libbluetooth3_5.55-3.1+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/brotli/libbrotli-dev_1.0.9-2+b2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/brotli/libbrotli1_1.0.9-2+b2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/build-essential/build-essential_12.9_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/bzip2/bzip2_1.0.8-4_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/b/bzip2/libbz2-1.0_1.0.8-4_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cairo/libcairo-gobject2_1.16.0-5_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cairo/libcairo-script-interpreter2_1.16.0-5_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cairo/libcairo2-dev_1.16.0-5_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cairo/libcairo2_1.16.0-5_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/chromaprint/libchromaprint1_1.5.0-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/codec2/libcodec2-0.9_0.9.2-4_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/colord/gir1.2-colord-1.0_1.4.5-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/colord/libcolord-dev_1.4.5-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/colord/libcolord2_1.4.5-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/coreutils/coreutils_8.32-4_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cryptsetup/libcryptsetup12_2.3.7-1+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cups/libcups2-dev_2.3.3op2-3+deb11u8_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cups/libcups2_2.3.3op2-3+deb11u8_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cups/libcupsimage2-dev_2.3.3op2-3+deb11u8_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cups/libcupsimage2_2.3.3op2-3+deb11u8_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/curl/libcurl3-gnutls_7.88.1-10+deb12u6~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/curl/libcurl4-gnutls-dev_7.88.1-10+deb12u6~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cyrus-sasl2/libsasl2-2_2.1.27+dfsg-2.1+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/c/cyrus-sasl2/libsasl2-modules-db_2.1.27+dfsg-2.1+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dav1d/libdav1d4_0.7.1-3+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.8_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/dbus-bin_1.14.10-1~deb12u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/dbus-daemon_1.14.10-1~deb12u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/dbus-session-bus-common_1.14.10-1~deb12u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/dbus-system-bus-common_1.14.10-1~deb12u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/dbus-user-session_1.14.10-1~deb12u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/dbus_1.14.10-1~deb12u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/libdbus-1-3_1.12.28-0+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dbus/libdbus-1-dev_1.12.28-0+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dconf/dconf-gsettings-backend_0.38.0-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dconf/dconf-service_0.38.0-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dconf/libdconf1_0.38.0-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/debconf/debconf_1.5.77_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/double-conversion/libdouble-conversion3_3.1.5-6.1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dpkg/dpkg-dev_1.20.13_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dpkg/dpkg_1.20.13_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/d/dpkg/libdpkg-perl_1.20.13_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/e/e2fsprogs/comerr-dev_2.1-1.46.6-1~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/e/e2fsprogs/libcom-err2_1.46.6-1~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/e/elfutils/libelf-dev_0.187-1~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/e/elfutils/libelf1_0.187-1~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/e/expat/libexpat1-dev_2.2.10-2+deb11u5_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/e/expat/libexpat1_2.2.10-2+deb11u5_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libavcodec-dev_4.3.7-0+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libavcodec58_4.3.7-0+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libavformat-dev_4.3.7-0+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libavformat58_4.3.7-0+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libavutil-dev_4.3.7-0+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libavutil56_4.3.7-0+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libswresample-dev_4.3.7-0+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/ffmpeg/libswresample3_4.3.7-0+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/flac/libflac-dev_1.3.3-2+deb11u2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/flac/libflac8_1.3.3-2+deb11u2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fontconfig/fontconfig-config_2.13.1-4.2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fontconfig/fontconfig_2.13.1-4.2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fontconfig/libfontconfig-dev_2.13.1-4.2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fontconfig/libfontconfig1-dev_2.13.1-4.2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fontconfig/libfontconfig1_2.13.1-4.2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fonts-dejavu/fonts-dejavu-core_2.37-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/freetype/libfreetype-dev_2.10.4+dfsg-1+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/freetype/libfreetype6-dev_2.10.4+dfsg-1+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/freetype/libfreetype6_2.10.4+dfsg-1+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fribidi/libfribidi-dev_1.0.8-2+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/f/fribidi/libfribidi0_1.0.8-2+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/game-music-emu/libgme0_0.6.3-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/cpp-10_10.2.1-6_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/g++-10_10.2.1-6_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/gcc-10-base_10.2.1-6_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/gcc-10_10.2.1-6_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libasan6_10.2.1-6_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libatomic1_10.2.1-6_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libcc1-0_10.2.1-6_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libgcc-10-dev_10.2.1-6_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libgcc-s1_10.2.1-6_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libgomp1_10.2.1-6_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libitm1_10.2.1-6_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/liblsan0_10.2.1-6_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libquadmath0_10.2.1-6_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libstdc++-10-dev_10.2.1-6_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libstdc++6_10.2.1-6_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libtsan0_10.2.1-6_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-10/libubsan1_10.2.1-6_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-defaults/cpp_10.2.1-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-defaults/g++_10.2.1-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gcc-defaults/gcc_10.2.1-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdbm/libgdbm-compat4_1.19-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdbm/libgdbm6_1.19-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdk-pixbuf/gir1.2-gdkpixbuf-2.0_2.42.2+dfsg-1+deb11u2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-0_2.42.2+dfsg-1+deb11u2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf-2.0-dev_2.42.2+dfsg-1+deb11u2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-bin_2.42.2+dfsg-1+deb11u2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-common_2.42.2+dfsg-1+deb11u2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib-networking/glib-networking-common_2.66.0-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib-networking/glib-networking-services_2.66.0-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib-networking/glib-networking_2.66.0-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib2.0/libglib2.0-0_2.66.8-1+deb11u4_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib2.0/libglib2.0-bin_2.66.8-1+deb11u4_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib2.0/libglib2.0-data_2.66.8-1+deb11u4_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib2.0/libglib2.0-dev-bin_2.66.8-1+deb11u4_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glib2.0/libglib2.0-dev_2.66.8-1+deb11u4_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glibc/libc-dev-bin_2.31-13+deb11u5_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glibc/libc6-dbg_2.31-13+deb11u5_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glibc/libc6-dev_2.31-13+deb11u11_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glibc/libc6-dev_2.31-13+deb11u5_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/glibc/libc6_2.31-13+deb11u5_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gmp/libgmp-dev_6.2.1+dfsg-1+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gmp/libgmp10_6.2.1+dfsg-1+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gmp/libgmpxx4ldbl_6.2.1+dfsg-1+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gnutls28/libgnutls-dane0_3.7.1-5+deb11u5_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gnutls28/libgnutls-openssl27_3.7.1-5+deb11u5_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gnutls28/libgnutls28-dev_3.7.1-5+deb11u5_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gnutls28/libgnutls30_3.7.1-5+deb11u5_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gnutls28/libgnutlsxx28_3.7.1-5+deb11u5_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gobject-introspection/gir1.2-freedesktop_1.66.1-1+b1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gobject-introspection/gir1.2-glib-2.0_1.66.1-1+b1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gobject-introspection/gobject-introspection_1.66.1-1+b1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gobject-introspection/libgirepository-1.0-1_1.66.1-1+b1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gobject-introspection/libgirepository1.0-dev_1.66.1-1+b1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/graphene/gir1.2-graphene-1.0_1.10.4+dfsg1-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/graphene/libgraphene-1.0-0_1.10.4+dfsg1-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/graphene/libgraphene-1.0-dev_1.10.4+dfsg1-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/graphite2/libgraphite2-3_1.3.14-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/graphite2/libgraphite2-dev_1.3.14-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gsettings-desktop-schemas/gsettings-desktop-schemas_3.38.0-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+2.0/gir1.2-gtk-2.0_2.24.33-2+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.33-2+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+2.0/libgtk2.0-common_2.24.33-2+deb11u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+2.0/libgtk2.0-dev_2.24.33-2+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+3.0/gir1.2-gtk-3.0_3.24.24-4+deb11u4_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+3.0/gtk-update-icon-cache_3.24.24-4+deb11u4_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+3.0/libgtk-3-0_3.24.24-4+deb11u4_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+3.0/libgtk-3-common_3.24.24-4+deb11u4_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk+3.0/libgtk-3-dev_3.24.24-4+deb11u4_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk4/gir1.2-gtk-4.0_4.8.3+ds-2+deb12u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk4/libgtk-4-1_4.8.3+ds-2+deb12u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk4/libgtk-4-common_4.8.3+ds-2+deb12u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/g/gtk4/libgtk-4-dev_4.8.3+ds-2+deb12u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/h/harfbuzz/gir1.2-harfbuzz-0.0_2.7.4-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/h/harfbuzz/libharfbuzz-dev_2.7.4-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/h/harfbuzz/libharfbuzz-gobject0_2.7.4-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/h/harfbuzz/libharfbuzz-icu0_2.7.4-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/h/harfbuzz/libharfbuzz0b_2.7.4-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/h/hicolor-icon-theme/hicolor-icon-theme_0.17-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/i/icu/icu-devtools_67.1-7_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/i/icu/libicu-dev_67.1-7_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/i/icu/libicu67_67.1-7_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/i/iptables/libip4tc2_1.8.7-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/i/isl/libisl23_0.23-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/j/jbigkit/libjbig-dev_2.1-3.1+b2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/j/json-c/libjson-c5_0.15-2+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/j/json-glib/libjson-glib-1.0-0_1.6.2-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/j/json-glib/libjson-glib-1.0-common_1.6.2-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/keyutils/libkeyutils1_1.6.1-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/kmod/libkmod2_28-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/krb5-multidev_1.18.3-6+deb11u5_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libgssapi-krb5-2_1.18.3-6+deb11u5_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libgssrpc4_1.18.3-6+deb11u5_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libk5crypto3_1.18.3-6+deb11u5_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libkadm5clnt-mit12_1.18.3-6+deb11u5_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libkadm5srv-mit12_1.18.3-6+deb11u5_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libkdb5-10_1.18.3-6+deb11u5_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libkrb5-3_1.18.3-6+deb11u5_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libkrb5-dev_1.18.3-6+deb11u5_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/k/krb5/libkrb5support0_1.18.3-6+deb11u5_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lame/libmp3lame0_3.100-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lcms2/liblcms2-2_2.12~rc1-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lcms2/liblcms2-dev_2.12~rc1-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lerc/liblerc4_4.0.0+ds-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/linux/linux-libc-dev_6.1.94-1~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/llvm-toolchain-11/libllvm11_11.0.1-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lm-sensors/libsensors-config_3.6.0-7_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lm-sensors/libsensors5_3.6.0-7_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lsb/lsb-base_11.1.0_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lvm2/dmsetup_1.02.175-2.1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lvm2/libdevmapper1.02.1_1.02.175-2.1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lz4/liblz4-1_1.9.3-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/l/lzo2/liblzo2-2_2.10-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/liba/libasyncns/libasyncns0_0.8-6+b2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libb/libb2/libb2-1_0.98.1-1.1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libb/libbluray/libbluray2_1.2.1-4+deb11u2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libb/libbsd/libbsd0_0.11.3-1+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-2.2+b1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libc/libcap2/libcap-dev_2.44-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libc/libcap2/libcap2_2.44-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libc/libcloudproviders/libcloudproviders0_0.3.0-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdatrie/libdatrie-dev_0.2.13-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdatrie/libdatrie1_0.2.13-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdbusmenu/gir1.2-dbusmenu-glib-0.4_18.10.20180917~bzr492+repack1-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_18.10.20180917~bzr492+repack1-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdbusmenu/libdbusmenu-glib4_18.10.20180917~bzr492+repack1-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdeflate/libdeflate-dev_1.10-2~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdeflate/libdeflate0_1.10-2~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.104-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-common_2.4.104-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-dev_2.4.104-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-nouveau2_2.4.104-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm-radeon1_2.4.104-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libd/libdrm/libdrm2_2.4.104-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libe/libedit/libedit2_3.1-20191231-2+b1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libe/libepoxy/libepoxy-dev_1.5.8-1~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libe/libepoxy/libepoxy0_1.5.8-1~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libe/libevdev/libevdev-dev_1.11.0+dfsg-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libe/libevdev/libevdev2_1.11.0+dfsg-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libe/libevent/libevent-2.1-7_2.1.12-stable-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libf/libffi/libffi-dev_3.3-6_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libf/libffi/libffi7_3.3-6_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.7-6_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgcrypt20/libgcrypt20_1.8.7-6_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglu/libglu1-mesa-dev_9.0.1-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglu/libglu1-mesa_9.0.1-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libegl-dev_1.3.2-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libegl1_1.3.2-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libgl-dev_1.3.2-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libgl1_1.3.2-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libgles-dev_1.3.2-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libgles1_1.3.2-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libgles2_1.3.2-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libglvnd-dev_1.3.2-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libglvnd0_1.3.2-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libglx-dev_1.3.2-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libglx0_1.3.2-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libopengl-dev_1.3.2-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libglvnd/libopengl0_1.3.2-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgpg-error/libgpg-error-dev_1.38-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgpg-error/libgpg-error0_1.38-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgsm/libgsm1_1.0.18-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgudev/gir1.2-gudev-1.0_234-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgudev/libgudev-1.0-0_234-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libg/libgudev/libgudev-1.0-dev_234-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libice/libice-dev_1.0.10-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libice/libice6_1.0.10-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libidn2/libidn2-0_2.3.0-5_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libidn2/libidn2-dev_2.3.0-5_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libinput/libinput-bin_1.16.4-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libinput/libinput-dev_1.16.4-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libi/libinput/libinput10_1.16.4-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libj/libjpeg-turbo/libjpeg-dev_2.0.6-4_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo-dev_2.0.6-4_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_2.0.6-4_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libj/libjsoncpp/libjsoncpp-dev_1.9.4-4_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libj/libjsoncpp/libjsoncpp24_1.9.4-4_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libm/libmd/libmd0_1.0.3-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libn/libnsl/libnsl-dev_1.3.0-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libn/libnsl/libnsl2_1.3.0-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libo/libogg/libogg-dev_1.3.4-0.1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libo/libogg/libogg0_1.3.4-0.1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libo/libopenmpt/libopenmpt0_0.4.11-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libpgm/libpgm-5.3-0_5.3.128~dfsg-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libpng1.6/libpng-dev_1.6.37-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libpng1.6/libpng16-16_1.6.37-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libproxy/libproxy1v5_0.4.17-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libpsl/libpsl5_0.21.0-1.2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.4-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libr/librabbitmq/librabbitmq4_0.10.0-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libr/librest/librest-0.7-0_0.8.1-1.1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libr/librsvg/librsvg2-2_2.50.3+dfsg-1+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libseccomp/libseccomp2_2.5.1-1+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libselinux/libselinux1-dev_3.1-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libselinux/libselinux1_3.1-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsemanage/libsemanage-common_3.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsemanage/libsemanage1_3.1-1+b2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsepol/libsepol1-dev_3.1-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsepol/libsepol1_3.1-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libset-scalar-perl/libset-scalar-perl_1.29-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsm/libsm-dev_1.2.3-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsm/libsm6_1.2.3-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsndfile/libsndfile1_1.0.31-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsodium/libsodium23_1.0.18-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.72.0-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsoup2.4/libsoup2.4-1_2.72.0-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libsoxr/libsoxr0_0.1.3-4_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libssh/libssh-gcrypt-4_0.9.8-0+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libs/libssh2/libssh2-1_1.9.0-2+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libtasn1-6/libtasn1-6-dev_4.16.0-2+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libtasn1-6/libtasn1-6_4.16.0-2+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libthai/libthai-data_0.1.28-3_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libthai/libthai-dev_0.1.28-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libthai/libthai0_0.1.28-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libtheora/libtheora0_1.1.1+dfsg.1-15_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libtirpc/libtirpc-common_1.3.1-1+deb11u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libtirpc/libtirpc-dev_1.3.1-1+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libt/libtirpc/libtirpc3_1.3.1-1+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libu/libudfread/libudfread0_1.1.1-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libu/libunistring/libunistring2_0.9.10-4_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libu/libutempter/libutempter-dev_1.2.1-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libu/libutempter/libutempter0_1.2.1-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libva/libva-dev_2.17.0-1~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libva/libva-drm2_2.17.0-1~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libva/libva-glx2_2.17.0-1~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libva/libva-wayland2_2.17.0-1~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libva/libva-x11-2_2.17.0-1~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libva/libva2_2.17.0-1~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libvdpau/libvdpau1_1.4-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libvorbis/libvorbis0a_1.3.7-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libvorbis/libvorbisenc2_1.3.7-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libvorbis/libvorbisfile3_1.3.7-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libvpx/libvpx-dev_1.9.0-1+deb11u3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libv/libvpx/libvpx6_1.9.0-1+deb11u3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwacom/libwacom-common_1.8-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwacom/libwacom-dev_1.8-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwacom/libwacom2_1.8-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwebp/libwebp-dev_0.6.1-2.1+deb11u2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwebp/libwebp6_0.6.1-2.1+deb11u2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwebp/libwebp7_1.2.4-0.2+deb12u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwebp/libwebpdemux2_0.6.1-2.1+deb11u2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libw/libwebp/libwebpmux3_0.6.1-2.1+deb11u2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libx11/libx11-6_1.7.2-1+deb11u2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libx11/libx11-data_1.7.2-1+deb11u2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libx11/libx11-dev_1.7.2-1+deb11u2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libx11/libx11-xcb-dev_1.7.2-1+deb11u2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libx11/libx11-xcb1_1.7.2-1+deb11u2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxau/libxau-dev_1.0.9-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxau/libxau6_1.0.9-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-dri2-0-dev_1.14-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-dri2-0_1.14-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-dri3-0_1.14-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-dri3-dev_1.14-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-glx0-dev_1.14-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-glx0_1.14-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-present-dev_1.14-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-present0_1.14-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-randr0-dev_1.14-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-randr0_1.14-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-render0-dev_1.14-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-render0_1.14-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-shape0-dev_1.14-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-shape0_1.14-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-shm0-dev_1.14-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-shm0_1.14-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-sync-dev_1.14-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-sync1_1.14-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-xfixes0-dev_1.14-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-xfixes0_1.14-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-xinerama0_1.14-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-xinput0_1.14-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb-xkb1_1.14-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb1-dev_1.14-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcb/libxcb1_1.14-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.5-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcomposite/libxcomposite1_0.4.5-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcrypt/libcrypt-dev_4.4.18-4_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcrypt/libcrypt1_4.4.18-4_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcursor/libxcursor-dev_1.2.0-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxcursor/libxcursor1_1.2.0-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxdamage/libxdamage-dev_1.1.5-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxdamage/libxdamage1_1.1.5-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxdmcp/libxdmcp-dev_1.1.2-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxdmcp/libxdmcp6_1.1.2-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxext/libxext-dev_1.3.3-1.1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxext/libxext6_1.3.3-1.1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxfixes/libxfixes-dev_5.0.3-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxfixes/libxfixes3_5.0.3-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxi/libxi-dev_1.7.10-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxi/libxi6_1.7.10-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxinerama/libxinerama-dev_1.1.4-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxinerama/libxinerama1_1.1.4-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxkbcommon/libxkbcommon-dev_1.0.3-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxkbcommon/libxkbcommon-x11-0_1.0.3-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxkbcommon/libxkbcommon0_1.0.3-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxml2/libxml2-dev_2.9.10+dfsg-6.7+deb11u4_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxml2/libxml2-utils_2.9.10+dfsg-6.7+deb11u4_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxml2/libxml2_2.9.10+dfsg-6.7+deb11u4_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxshmfence/libxshmfence-dev_1.3-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxslt/libxslt1-dev_1.1.34-4+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxslt/libxslt1.1_1.1.34-4+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxss/libxss-dev_1.2.3-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxss/libxss1_1.2.3-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxt/libxt-dev_1.2.0-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxt/libxt6_1.2.0-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxtst/libxtst6_1.2.3-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxxf86vm/libxxf86vm-dev_1.1.4-1+b2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/libz/libzstd/libzstd1_1.4.8+dfsg-2.1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/make-dfsg/make_4.3-4.1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mako/python3-mako_1.1.3+ds1-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/markupsafe/python3-markupsafe_2.0.1-2~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/md4c/libmd4c0_0.4.7-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/media-types/media-types_4.0.0_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libegl-mesa0_20.3.5-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libegl1-mesa-dev_20.3.5-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libgbm-dev_20.3.5-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libgbm1_20.3.5-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libgl1-mesa-dev_20.3.5-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libgl1-mesa-dri_20.3.5-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libglapi-mesa_20.3.5-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/libglx-mesa0_20.3.5-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mesa/mesa-common-dev_20.3.5-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/minizip/libminizip-dev_1.1-8+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/minizip/libminizip1_1.1-8+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mpclib3/libmpc3_1.2.0-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mpdecimal/libmpdec3_2.5.1-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mpfr4/libmpfr6_4.1.0-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mpg123/libmpg123-0_1.26.4-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mtdev/libmtdev-dev_1.1.6-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/m/mtdev/libmtdev1_1.1.6-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/ncurses/libncurses-dev_6.2+20201114-2+deb11u2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/ncurses/libncurses6_6.2+20201114-2+deb11u2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/ncurses/libncursesw6_6.2+20201114-2+deb11u2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/ncurses/libtinfo6_6.2+20201114-2+deb11u2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/ncurses/ncurses-bin_6.2+20201114-2+deb11u2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nettle/libhogweed6_3.7.3-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nettle/libnettle8_3.7.3-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nettle/nettle-dev_3.7.3-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nghttp2/libnghttp2-14_1.43.0-1+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/norm/libnorm1_1.5.9+dfsg-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nspr/libnspr4-dev_4.29-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nspr/libnspr4_4.29-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nss/libnss3-dev_3.61-1+deb11u3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/nss/libnss3_3.61-1+deb11u3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/n/numactl/libnuma1_2.0.12-1+b1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/ocl-icd/ocl-icd-libopencl1_2.2.14-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/openjpeg2/libopenjp2-7_2.4.0-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/openldap/libldap-2.4-2_2.4.57+dfsg-3+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/openssl/libssl-dev_1.1.1w-0+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/openssl/libssl1.1_1.1.1w-0+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/opus/libopus-dev_1.3.1-0.1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/o/opus/libopus0_1.3.1-0.1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/p11-kit/libp11-kit-dev_0.23.22-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/p11-kit/libp11-kit0_0.23.22-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pam/libpam-modules_1.4.0-9+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pam/libpam-runtime_1.4.0-9+deb11u1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pam/libpam0g-dev_1.4.0-9+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pam/libpam0g_1.4.0-9+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/gir1.2-pango-1.0_1.46.2-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/libpango-1.0-0_1.46.2-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/libpango1.0-dev_1.46.2-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/libpangocairo-1.0-0_1.46.2-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/libpangoft2-1.0-0_1.46.2-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/libpangoxft-1.0-0_1.46.2-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pango1.0/pango1.0-tools_1.46.2-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/patch/patch_2.7.6-7_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pci.ids/pci.ids_0.0~2021.02.08-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pciutils/libpci-dev_3.7.0-5_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pciutils/libpci3_3.7.0-5_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre2/libpcre2-16-0_10.36-2+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre2/libpcre2-32-0_10.36-2+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre2/libpcre2-8-0_10.36-2+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre2/libpcre2-dev_10.36-2+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre2/libpcre2-posix2_10.36-2+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre3/libpcre16-3_8.39-13_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre3/libpcre3-dev_8.39-13_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre3/libpcre32-3_8.39-13_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre3/libpcre3_8.39-13_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pcre3/libpcrecpp0v5_8.39-13_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/perl/libperl5.32_5.32.1-4+deb11u3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/perl/perl-base_5.32.1-4+deb11u3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/perl/perl-modules-5.32_5.32.1-4+deb11u3_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/perl/perl_5.32.1-4+deb11u3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pipewire/libpipewire-0.3-0_0.3.65-2~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pipewire/libpipewire-0.3-dev_0.3.65-2~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pipewire/libspa-0.2-dev_0.3.65-2~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pipewire/libspa-0.2-modules_0.3.65-2~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pixman/libpixman-1-0_0.40.0-1.1~deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pixman/libpixman-1-dev_0.40.0-1.1~deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pkg-config/pkg-config_0.29.2-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pulseaudio/libpulse-dev_14.2-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pulseaudio/libpulse-mainloop-glib0_14.2-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/pulseaudio/libpulse0_14.2-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python-markdown/python3-markdown_3.3.4-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3-defaults/libpython3-stdlib_3.9.2-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3-defaults/python3_3.9.2-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3-stdlib-extensions/python3-distutils_3.9.2-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3-stdlib-extensions/python3-lib2to3_3.9.2-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3.9/libpython3.9-minimal_3.9.2-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3.9/libpython3.9-stdlib_3.9.2-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3.9/python3.9-minimal_3.9.2-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/p/python3.9/python3.9_3.9.2-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6concurrent6_6.4.2+dfsg-11~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6core6_6.4.2+dfsg-11~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6dbus6_6.4.2+dfsg-11~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6gui6_6.4.2+dfsg-11~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6network6_6.4.2+dfsg-11~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6opengl6_6.4.2+dfsg-11~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6openglwidgets6_6.4.2+dfsg-11~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6printsupport6_6.4.2+dfsg-11~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6sql6_6.4.2+dfsg-11~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6test6_6.4.2+dfsg-11~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6widgets6_6.4.2+dfsg-11~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/libqt6xml6_6.4.2+dfsg-11~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/qmake6-bin_6.4.2+dfsg-11~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/qmake6_6.4.2+dfsg-11~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/qt6-base-dev-tools_6.4.2+dfsg-11~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/qt6-base-dev_6.4.2+dfsg-11~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qt6-base/qt6-qpa-plugins_6.4.2+dfsg-11~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5concurrent5_5.15.2+dfsg-9+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5core5a_5.15.2+dfsg-9+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5dbus5_5.15.2+dfsg-9+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5gui5_5.15.2+dfsg-9+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5network5_5.15.2+dfsg-9+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5printsupport5_5.15.2+dfsg-9+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5sql5_5.15.2+dfsg-9+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5test5_5.15.2+dfsg-9+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5widgets5_5.15.2+dfsg-9+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/libqt5xml5_5.15.2+dfsg-9+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/qt5-qmake-bin_5.15.2+dfsg-9+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/qt5-qmake_5.15.2+dfsg-9+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/qtbase5-dev-tools_5.15.2+dfsg-9+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtbase-opensource-src/qtbase5-dev_5.15.2+dfsg-9+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/q/qtchooser/qtchooser_66-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/r/re2/libre2-9_20210201+dfsg-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/r/re2/libre2-dev_20210201+dfsg-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/r/readline/libreadline8_8.1-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/r/readline/readline-common_8.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/r/rtmpdump/librtmp1_2.4+20151223.gitfa8646d.1-2+b2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/sensible-utils/sensible-utils_0.0.14_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/setuptools/python3-pkg-resources_66.1.1-1~bpo11+1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/shadow/login_4.8.1-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/shadow/passwd_4.8.1-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/shared-mime-info/shared-mime-info_2.0-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/shine/libshine3_3.1.1-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/snappy/libsnappy-dev_1.1.8-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/snappy/libsnappy1v5_1.1.8-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/speech-dispatcher/libspeechd-dev_0.11.4-2~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/speech-dispatcher/libspeechd2_0.11.4-2~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/speex/libspeex1_1.2~rc1.2-1.1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/sqlite3/libsqlite3-0_3.34.1-3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/srt/libsrt1.4-gnutls_1.4.2-1.3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/libpam-systemd_252.29-1~deb12u1~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/libsystemd-dev_252.29-1~deb12u1~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/libsystemd-shared_252.29-1~deb12u1~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/libsystemd0_252.29-1~deb12u1~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/libudev-dev_252.29-1~deb12u1~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/libudev1_252.29-1~deb12u1~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/systemd-sysv_252.29-1~deb12u1~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/s/systemd/systemd_252.29-1~deb12u1~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tar/tar_1.34+dfsg-1+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tcp-wrappers/libwrap0_7.6.q-31_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tiff/libtiff-dev_4.2.0-1+deb11u5_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tiff/libtiff5_4.2.0-1+deb11u5_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tiff/libtiff6_4.5.0-6+deb12u2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tiff/libtiffxx5_4.2.0-1+deb11u5_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tslib/libts0_1.22-1+b1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/twolame/libtwolame0_0.4.0-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/t/tzdata/tzdata_2021a-1+deb11u11_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/ucf/ucf_3.0043_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/unbound/libunbound8_1.17.1-2~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/libblkid-dev_2.36.1-8+deb11u2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/libblkid1_2.36.1-8+deb11u2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/libfdisk1_2.36.1-8+deb11u2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/libmount-dev_2.36.1-8+deb11u2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/libmount1_2.36.1-8+deb11u2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/libuuid1_2.36.1-8+deb11u2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/mount_2.36.1-8+deb11u2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/util-linux_2.36.1-8+deb11u2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/u/util-linux/uuid-dev_2.36.1-8+deb11u2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/v/valgrind/valgrind_3.16.1-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/v/vulkan-loader/libvulkan-dev_1.3.224.0-1~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/v/vulkan-loader/libvulkan1_1.3.224.0-1~bpo11+1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wavpack/libwavpack1_5.4.0-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland-protocols/wayland-protocols_1.20-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-bin_1.18.0-2~exp1.1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-client0_1.18.0-2~exp1.1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-cursor0_1.18.0-2~exp1.1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-dev_1.18.0-2~exp1.1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-egl-backend-dev_1.18.0-2~exp1.1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-egl1_1.18.0-2~exp1.1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/wayland/libwayland-server0_1.18.0-2~exp1.1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/w/webrtc-audio-processing/libwebrtc-audio-processing1_0.3-1+b1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/x264/libx264-160_0.160.3011+gitcde9a93-2.1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/x265/libx265-192_3.4-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util-image/libxcb-image0-dev_0.4.0-1+b3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util-image/libxcb-image0_0.4.0-1+b3_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util-keysyms/libxcb-keysyms1_0.4.0-1+b2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0-dev_0.3.9-1+b1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util-renderutil/libxcb-render-util0_0.3.9-1+b1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util-wm/libxcb-icccm4_0.4.1-1.1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util/libxcb-util-dev_0.4.0-1+b1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xcb-util/libxcb-util1_0.4.0-1+b1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xft/libxft-dev_2.3.2-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xft/libxft2_2.3.2-2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xkeyboard-config/xkb-data_2.29-2_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorg-sgml-doctools/xorg-sgml-doctools_1.11-1.1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorg/x11-common_7.7+22_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-core-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-input-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-randr-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-record-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-render-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-scrnsaver-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-xext-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-xf86vidmode-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xorgproto/x11proto-xinerama-dev_2020.1-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xtrans/xtrans-dev_1.4.0-1_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xvidcore/libxvidcore4_1.3.7-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xz-utils/liblzma-dev_5.2.5-2.1~deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xz-utils/liblzma5_5.2.5-2.1~deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/x/xz-utils/xz-utils_5.2.5-2.1~deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/z/z3/libz3-4_4.8.10-1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/z/zeromq3/libzmq5_4.3.4-1+deb11u1_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-2+deb11u2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/z/zlib/zlib1g_1.2.11.dfsg-2+deb11u2_ppc64el.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/z/zvbi/libzvbi-common_0.2.35-18_all.deb +https://snapshot.debian.org/archive/debian/20250129T203412Z/pool/main/z/zvbi/libzvbi0_0.2.35-18_ppc64el.deb diff --git a/naiveproxy/src/build/linux/sysroot_scripts/install-sysroot.py b/naiveproxy/src/build/linux/sysroot_scripts/install-sysroot.py index 834a47eb0e..6e5dd2c4c0 100755 --- a/naiveproxy/src/build/linux/sysroot_scripts/install-sysroot.py +++ b/naiveproxy/src/build/linux/sysroot_scripts/install-sysroot.py @@ -36,7 +36,8 @@ from urllib.request import urlopen SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) SRC_DIR = os.path.dirname(os.path.dirname(os.path.dirname(SCRIPT_DIR))) -VALID_ARCHS = ("amd64", "i386", "armhf", "arm64", "mipsel", "mips64el", "riscv64") +VALID_ARCHS = ("amd64", "i386", "armhf", "arm64", "mipsel", "mips64el", + "ppc64el", "riscv64") ARCH_TRANSLATIONS = { "x64": "amd64", @@ -44,6 +45,7 @@ ARCH_TRANSLATIONS = { "arm": "armhf", "mips": "mipsel", "mips64": "mips64el", + "ppc64le": "ppc64el", } DEFAULT_SYSROOTS_PATH = os.path.join(os.path.relpath(SCRIPT_DIR, SRC_DIR), diff --git a/naiveproxy/src/build/linux/sysroot_scripts/reversion_glibc.py b/naiveproxy/src/build/linux/sysroot_scripts/reversion_glibc.py index 44941e3609..a20e5023f4 100644 --- a/naiveproxy/src/build/linux/sysroot_scripts/reversion_glibc.py +++ b/naiveproxy/src/build/linux/sysroot_scripts/reversion_glibc.py @@ -1,7 +1,6 @@ -# Copyright 2021 The Chromium Authors +# Copyright 2025 The Chromium Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. - """Rewrite incompatible default symbols in glibc. """ @@ -13,7 +12,7 @@ import subprocess # //chrome/installer/linux/rpm/dist_package_provides.json MAX_ALLOWED_GLIBC_VERSION = [2, 26] -VERSION_PATTERN = re.compile(r"GLIBC_([0-9\.]+)") +VERSION_PATTERN = re.compile("GLIBC_([0-9\.]+)") SECTION_PATTERN = re.compile(r"^ *\[ *[0-9]+\] +(\S+) +\S+ + ([0-9a-f]+) .*$") # Some otherwise disallowed symbols are referenced in the linux-chromeos build. @@ -35,7 +34,7 @@ def reversion_glibc(bin_file: str) -> None: stdout = subprocess.check_output( ["readelf", "--dyn-syms", "--wide", bin_file]) for line in stdout.decode("utf-8").split("\n"): - cols = re.split(r"\s+", line) + cols = re.split("\s+", line) # Skip the preamble. if len(cols) < 9: continue diff --git a/naiveproxy/src/build/linux/sysroot_scripts/sysroot.gni b/naiveproxy/src/build/linux/sysroot_scripts/sysroot.gni index 42410d47cc..b96946a0d8 100644 --- a/naiveproxy/src/build/linux/sysroot_scripts/sysroot.gni +++ b/naiveproxy/src/build/linux/sysroot_scripts/sysroot.gni @@ -5,4 +5,4 @@ # This file was generated by # build/linux/sysroot_scripts/build_and_upload.py -cr_sysroot_key = "20230611T210420Z-2" +cr_sysroot_key = "20250129T203412Z-1" diff --git a/naiveproxy/src/build/linux/sysroot_scripts/sysroot_creator.py b/naiveproxy/src/build/linux/sysroot_scripts/sysroot_creator.py index 614e41ac9b..7239801092 100755 --- a/naiveproxy/src/build/linux/sysroot_scripts/sysroot_creator.py +++ b/naiveproxy/src/build/linux/sysroot_scripts/sysroot_creator.py @@ -7,6 +7,7 @@ This script is used to build Debian sysroot images for building Chromium. """ import argparse +import collections import hashlib import lzma import os @@ -25,7 +26,7 @@ RELEASE = "bullseye" # This number is appended to the sysroot key to cause full rebuilds. It # should be incremented when removing packages or patching existing packages. # It should not be incremented when adding packages. -SYSROOT_RELEASE = 2 +SYSROOT_RELEASE = 1 SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) @@ -35,7 +36,7 @@ BUILD_DIR = os.path.join(CHROME_DIR, "out", "sysroot-build", RELEASE) # gpg keyring file generated using generate_keyring.sh KEYRING_FILE = os.path.join(SCRIPT_DIR, "keyring.gpg") -ARCHIVE_TIMESTAMP = "20230611T210420Z" +ARCHIVE_TIMESTAMP = "20250129T203412Z" ARCHIVE_URL = f"https://snapshot.debian.org/archive/debian/{ARCHIVE_TIMESTAMP}/" APT_SOURCES_LIST = [ @@ -52,6 +53,7 @@ TRIPLES = { "arm64": "aarch64-linux-gnu", "mipsel": "mipsel-linux-gnu", "mips64el": "mips64el-linux-gnuabi64", + "ppc64el": "powerpc64le-linux-gnu", "riscv64": "riscv64-linux-gnu", } @@ -69,53 +71,14 @@ PACKAGES_EXT = "xz" RELEASE_FILE = "Release" RELEASE_FILE_GPG = "Release.gpg" -# Packages common to all architectures. +# List of development packages. Dependencies are automatically included. DEBIAN_PACKAGES = [ - "libatomic1", - "libc6", "libc6-dev", - "libcrypt1", "libgcc-10-dev", - "libgcc-s1", - "libgomp1", "libstdc++-10-dev", - "libstdc++6", "linux-libc-dev", ] -DEBIAN_PACKAGES_ARCH = { - "amd64": [ - "libasan6", - "libitm1", - "liblsan0", - "libquadmath0", - "libtsan0", - "libubsan1", - ], - "i386": [ - "libasan6", - "libitm1", - "libquadmath0", - "libubsan1", - ], - "armhf": [ - "libasan6", - "libubsan1", - ], - "arm64": [ - "libasan6", - "libgmp10", - "libitm1", - "liblsan0", - "libtsan0", - "libubsan1", - ], - "mipsel": [], - "mips64el": [], - "riscv64": [], -} - - def banner(message: str) -> None: print("#" * 70) print(message) @@ -232,6 +195,11 @@ def create_tarball(install_root: str, arch: str) -> None: banner("Creating tarball " + tarball_path) command = [ "tar", + "--owner=0", + "--group=0", + "--numeric-owner", + "--sort=name", + "--no-xattrs", "-I", "xz -z9 -T0 --lzma2='dict=256MiB'", "-cf", @@ -266,22 +234,45 @@ def generate_package_list_dist_repo(arch: str, dist: str, def generate_package_list(arch: str) -> dict[str, str]: + # Workaround for some misconfigured package dependencies. + BROKEN_DEPS = { + "libgcc1", + "qt6-base-abi", + } + package_meta = {} for dist, repos in APT_SOURCES_LIST: for repo_name in repos: for meta in generate_package_list_dist_repo(arch, dist, repo_name): package_meta[meta["Package"]] = meta + if "Provides" not in meta: + continue + for provides in meta["Provides"].split(", "): + if provides in package_meta: + continue + package_meta[provides] = meta + + def add_package_dependencies(package: str) -> None: + if package in BROKEN_DEPS: + return + meta = package_meta[package] + url = ARCHIVE_URL + meta["Filename"] + if url in package_dict: + return + package_dict[url] = meta["SHA256"] + if "Depends" in meta: + for dep in meta["Depends"].split(", "): + add_package_dependencies(dep.split()[0].split(":")[0]) # Read the input file and create a dictionary mapping package names to URLs # and checksums. - missing = set(DEBIAN_PACKAGES + DEBIAN_PACKAGES_ARCH[arch]) + missing = set(DEBIAN_PACKAGES) package_dict: dict[str, str] = {} for meta in package_meta.values(): package = meta["Package"] if package in missing: missing.remove(package) - url = ARCHIVE_URL + meta["Filename"] - package_dict[url] = meta["SHA256"] + add_package_dependencies(package) if missing: raise Exception(f"Missing packages: {', '.join(missing)}") @@ -296,6 +287,11 @@ def generate_package_list(arch: str) -> dict[str, str]: def hacks_and_patches(install_root: str, script_dir: str, arch: str) -> None: banner("Misc Hacks & Patches") + debian_dir = os.path.join(install_root, "debian") + control_file = os.path.join(debian_dir, "control") + # Create an empty control file + open(control_file, "a").close() + # Remove an unnecessary dependency on qtchooser. qtchooser_conf = os.path.join(install_root, "usr", "lib", TRIPLES[arch], "qt-default/qtchooser/default.conf") @@ -354,6 +350,9 @@ def hacks_and_patches(install_root: str, script_dir: str, arch: str) -> None: lib_path = os.path.join(install_root, "lib", TRIPLES[arch], lib) reversion_glibc.reversion_glibc(lib_path) + # Remove a cyclic symlink: /usr/bin/X11 -> /usr/bin + os.remove(os.path.join(install_root, "usr/bin/X11")) + def replace_in_file(file_path: str, search_pattern: str, replace_pattern: str) -> None: @@ -375,10 +374,6 @@ def install_into_sysroot(build_dir: str, install_root: str, debian_dir = os.path.join(install_root, "debian") os.makedirs(debian_dir, exist_ok=True) - control_file = os.path.join(debian_dir, "control") - # Create an empty control file - open(control_file, "a").close() - for package, sha256sum in packages.items(): package_name = os.path.basename(package) package_path = os.path.join(debian_packages_dir, package_name) @@ -408,15 +403,17 @@ def install_into_sysroot(build_dir: str, install_root: str, raise Exception( f"{message} {package_path}: {err.decode('utf-8')}") - # Prune /usr/share, leaving only pkgconfig, wayland, and wayland-protocols + # Prune /usr/share, leaving only allowlisted directories. + USR_SHARE_ALLOWLIST = { + "fontconfig", + "pkgconfig", + "wayland", + "wayland-protocols", + } usr_share = os.path.join(install_root, "usr", "share") for item in os.listdir(usr_share): full_path = os.path.join(usr_share, item) - if os.path.isdir(full_path) and item not in [ - "pkgconfig", - "wayland", - "wayland-protocols", - ]: + if os.path.isdir(full_path) and item not in USR_SHARE_ALLOWLIST: shutil.rmtree(full_path) @@ -443,9 +440,23 @@ def cleanup_jail_symlinks(install_root: str) -> None: full_path = os.path.join(root, name) if os.path.islink(full_path): target_path = os.readlink(full_path) + if target_path == "/dev/null": + # Some systemd services get masked by symlinking them to + # /dev/null. It's safe to remove these. + os.remove(full_path) + continue + + # If the link's target does not exist, remove this broken link. + if os.path.isabs(target_path): + absolute_target = os.path.join(install_root, + target_path.strip("/")) + else: + absolute_target = os.path.join(os.path.dirname(full_path), + target_path) + if not os.path.exists(absolute_target): + os.remove(full_path) + continue - # Check if the symlink is absolute and points inside the - # install_root. if os.path.isabs(target_path): # Compute the relative path from the symlink to the target. relative_path = os.path.relpath( @@ -462,37 +473,147 @@ def cleanup_jail_symlinks(install_root: str) -> None: os.symlink(relative_path, full_path) -def verify_library_deps(install_root: str) -> None: +def removing_unnecessary_files(install_root, arch): """ - Verifies if all required libraries are present in the sysroot environment. + Minimizes the sysroot by removing unnecessary files. """ - # Get all shared libraries and their dependencies. - shared_libs = set() - needed_libs = set() + # Preserve these files. + gcc_triple = "i686-linux-gnu" if arch == "i386" else TRIPLES[arch] + ALLOWLIST = { + "usr/bin/cups-config", + f"usr/lib/gcc/{gcc_triple}/10/libgcc.a", + f"usr/lib/{TRIPLES[arch]}/libc_nonshared.a", + f"usr/lib/{TRIPLES[arch]}/libffi_pic.a", + } + + for file in ALLOWLIST: + assert os.path.exists(os.path.join(install_root, file)) + + # Remove all executables and static libraries, and any symlinks that + # were pointing to them. + reverse_links = collections.defaultdict(list) + remove = [] + for root, _, files in os.walk(install_root): + for filename in files: + filepath = os.path.join(root, filename) + if os.path.relpath(filepath, install_root) in ALLOWLIST: + continue + if os.path.islink(filepath): + target_path = os.readlink(filepath) + if not os.path.isabs(target_path): + target_path = os.path.join(root, target_path) + reverse_links[os.path.realpath(target_path)].append(filepath) + elif "so" in filepath.split(".")[-3:]: + continue + elif os.access(filepath, os.X_OK) or filepath.endswith(".a"): + remove.append(filepath) + for filepath in remove: + os.remove(filepath) + for link in reverse_links[filepath]: + os.remove(link) + + +def strip_sections(install_root: str, arch: str): + """ + Strips all sections from ELF files except for dynamic linking and + essential sections. Skips static libraries (.a) and object files (.o). + """ + PRESERVED_SECTIONS = { + ".dynamic", + ".dynstr", + ".dynsym", + ".gnu.version", + ".gnu.version_d", + ".gnu.version_r", + ".hash", + ".note.ABI-tag", + ".note.gnu.build-id", + } + for root, _, files in os.walk(install_root): for file in files: - if ".so" not in file: - continue - path = os.path.join(root, file) - islink = os.path.islink(path) - if islink: - path = os.path.join(root, os.readlink(path)) - cmd_file = ["file", path] - output = subprocess.check_output(cmd_file).decode() - if ": ELF" not in output or "shared object" not in output: - continue - shared_libs.add(file) - if islink: - continue - cmd_readelf = ["readelf", "-d", path] - output = subprocess.check_output(cmd_readelf).decode() - for line in output.split("\n"): - if "NEEDED" in line: - needed_libs.add(line.split("[")[1].split("]")[0]) + file_path = os.path.join(root, file) - missing_libs = needed_libs - shared_libs - if missing_libs: - raise Exception(f"Missing libraries: {missing_libs}") + if (os.access(file, os.X_OK) or file.endswith((".a", ".o")) + or os.path.islink(file_path)): + continue + + # Verify this is an ELF file + with open(file_path, "rb") as f: + magic = f.read(4) + if magic != b"\x7fELF": + continue + + # Get section headers + objdump_cmd = ["objdump", "-h", file_path] + result = subprocess.run(objdump_cmd, + check=True, + text=True, + capture_output=True) + section_lines = result.stdout.splitlines() + + # Parse section names + sections = set() + for line in section_lines: + parts = line.split() + if len(parts) > 1 and parts[0].isdigit(): + sections.add(parts[1]) + + sections_to_remove = sections - PRESERVED_SECTIONS + if sections_to_remove: + objcopy_arch = "amd64" if arch == "i386" else arch + objcopy_bin = TRIPLES[objcopy_arch] + "-objcopy" + objcopy_cmd = ([objcopy_bin] + [ + f"--remove-section={section}" + for section in sections_to_remove + ] + [file_path]) + subprocess.run(objcopy_cmd, check=True, stderr=subprocess.PIPE) + + +def record_metadata(install_root: str) -> dict[str, tuple[float, float]]: + """ + Recursively walk the install_root directory and record the metadata of all + files. Symlinks are not followed. Returns a dictionary mapping each path + (relative to install_root) to its original metadata. + """ + metadata = {} + for root, dirs, files in os.walk(install_root): + for name in dirs + files: + full_path = os.path.join(root, name) + rel_path = os.path.relpath(full_path, install_root) + st = os.lstat(full_path) + metadata[rel_path] = (st.st_atime, st.st_mtime) + return metadata + + +def restore_metadata(install_root: str, + old_meta: dict[str, tuple[float, float]]) -> None: + """ + 1. Restore the metadata of any file that exists in old_meta. + 2. For all other files, set their timestamp to ARCHIVE_TIMESTAMP. + 3. For all directories (including install_root), set the timestamp + to ARCHIVE_TIMESTAMP. + """ + # Convert the timestamp to a UNIX epoch time. + archive_time = time.mktime( + time.strptime(ARCHIVE_TIMESTAMP, "%Y%m%dT%H%M%SZ")) + + # Walk through the install_root, applying old_meta where available; + # otherwise set times to archive_time. + for root, dirs, files in os.walk(install_root): + # Directories get archive_time. + os.utime(root, (archive_time, archive_time)) + + # Files: old_meta if available, else archive_time. + for file_name in files: + file_path = os.path.join(root, file_name) + if os.path.lexists(file_path): + rel_path = os.path.relpath(file_path, install_root) + if rel_path in old_meta: + restore_time = old_meta[rel_path] + else: + restore_time = (archive_time, archive_time) + os.utime(file_path, restore_time, follow_symlinks=False) def build_sysroot(arch: str) -> None: @@ -500,9 +621,12 @@ def build_sysroot(arch: str) -> None: clear_install_dir(install_root) packages = generate_package_list(arch) install_into_sysroot(BUILD_DIR, install_root, packages) + old_metadata = record_metadata(install_root) hacks_and_patches(install_root, SCRIPT_DIR, arch) cleanup_jail_symlinks(install_root) - verify_library_deps(install_root) + removing_unnecessary_files(install_root, arch) + strip_sections(install_root, arch) + restore_metadata(install_root, old_metadata) def upload_sysroot(arch: str) -> str: diff --git a/naiveproxy/src/build/linux/sysroot_scripts/sysroots.json b/naiveproxy/src/build/linux/sysroot_scripts/sysroots.json index 61811dac19..95fd75121d 100644 --- a/naiveproxy/src/build/linux/sysroot_scripts/sysroots.json +++ b/naiveproxy/src/build/linux/sysroot_scripts/sysroots.json @@ -1,40 +1,46 @@ { "bullseye_amd64": { - "Sha256Sum": "dec7a3a0fc5b83b909cba1b6d119077e0429a138eadef6bf5a0f2e03b1904631", + "Sha256Sum": "ac6166be1352e9e66a7574e0d6891c90868a564dd26b52ba6595db28cb81c9f1", "SysrootDir": "debian_bullseye_amd64-sysroot", "Tarball": "debian_bullseye_amd64_sysroot.tar.xz", "URL": "https://commondatastorage.googleapis.com/chrome-linux-sysroot" }, "bullseye_arm64": { - "Sha256Sum": "308e23faba3174bd01accfe358467b8a40fad4db4c49ef629da30219f65a275f", + "Sha256Sum": "963550f05d3325262f6a601ee5ff82a1c84da639b11d5dea6d9f3ac5fbf299f7", "SysrootDir": "debian_bullseye_arm64-sysroot", "Tarball": "debian_bullseye_arm64_sysroot.tar.xz", "URL": "https://commondatastorage.googleapis.com/chrome-linux-sysroot" }, "bullseye_armhf": { - "Sha256Sum": "fe81e7114b97440262bce004caf02c1514732e2fa7f99693b2836932ad1c4626", + "Sha256Sum": "6b89f9afce71ceb0ba5e6430996abbda73092dc0fb8cc4e9167e298f89a8b725", "SysrootDir": "debian_bullseye_armhf-sysroot", "Tarball": "debian_bullseye_armhf_sysroot.tar.xz", "URL": "https://commondatastorage.googleapis.com/chrome-linux-sysroot" }, "bullseye_i386": { - "Sha256Sum": "b53933120bb08ffc38140a817e3f0f99782254a6bf9622271574fa004e8783a4", + "Sha256Sum": "b62fcf15801fee0ae59e69ab515aaf4941e855d5ce342a002a7ac75185c293d7", "SysrootDir": "debian_bullseye_i386-sysroot", "Tarball": "debian_bullseye_i386_sysroot.tar.xz", "URL": "https://commondatastorage.googleapis.com/chrome-linux-sysroot" }, "bullseye_mips64el": { - "Sha256Sum": "783cb79f26736c69e8125788d95ffb65a28172349009d75188838a004280a92b", + "Sha256Sum": "2b5e7783121b184b5847ee9ab24da09763b593d312ef91a619f12f03569dad02", "SysrootDir": "debian_bullseye_mips64el-sysroot", "Tarball": "debian_bullseye_mips64el_sysroot.tar.xz", "URL": "https://commondatastorage.googleapis.com/chrome-linux-sysroot" }, "bullseye_mipsel": { - "Sha256Sum": "fcf8c3931476dd097c58f2f5d44621c7090b135e85ab56885aa4b44f4bd6cdb5", + "Sha256Sum": "e83949b9242fb00d38a93c3c4b043e473135a1a8f99aa53af3642cbc4edb86ab", "SysrootDir": "debian_bullseye_mipsel-sysroot", "Tarball": "debian_bullseye_mipsel_sysroot.tar.xz", "URL": "https://commondatastorage.googleapis.com/chrome-linux-sysroot" }, + "bullseye_ppc64el": { + "Sha256Sum": "52044855dbbb7056a5ff2a51c88faca856278ca3ebf1c5c088704cf633d7e39c", + "SysrootDir": "debian_bullseye_ppc64el-sysroot", + "Tarball": "debian_bullseye_ppc64el_sysroot.tar.xz", + "URL": "https://commondatastorage.googleapis.com/chrome-linux-sysroot" + }, "bullseye_riscv64": { "Key": "", "Sha1Sum": "", diff --git a/naiveproxy/src/build/linux/unbundle/replace_gn_files.py b/naiveproxy/src/build/linux/unbundle/replace_gn_files.py index f6abec6aa4..9ee6fda654 100755 --- a/naiveproxy/src/build/linux/unbundle/replace_gn_files.py +++ b/naiveproxy/src/build/linux/unbundle/replace_gn_files.py @@ -53,7 +53,6 @@ REPLACEMENTS = { 'icu': 'third_party/icu/BUILD.gn', 'jsoncpp': 'third_party/jsoncpp/BUILD.gn', 'libaom': 'third_party/libaom/BUILD.gn', - 'libavif': 'third_party/libavif/BUILD.gn', 'libdrm': 'third_party/libdrm/BUILD.gn', 'libjpeg': 'third_party/libjpeg.gni', 'libpng': 'third_party/libpng/BUILD.gn', diff --git a/naiveproxy/src/build/private_code_test/BUILD.gn b/naiveproxy/src/build/private_code_test/BUILD.gn index d7a1efadb7..1e65d98bdf 100644 --- a/naiveproxy/src/build/private_code_test/BUILD.gn +++ b/naiveproxy/src/build/private_code_test/BUILD.gn @@ -6,6 +6,8 @@ import("//build/config/python.gni") import("//build_overrides/build.gni") import("private_code_test.gni") +testonly = true + action("private_paths") { script = "list_gclient_deps.py" outputs = [ "$target_gen_dir/private_paths.txt" ] @@ -34,6 +36,9 @@ if (!is_component_build) { shared_library("private_code_test_inputs") { deps = [ "//v8" ] + + # This is unnecessary, but used to make this test-only target + # lighter-weight. ldflags = [ "--collect-inputs-only" ] } diff --git a/naiveproxy/src/build/private_code_test/README.md b/naiveproxy/src/build/private_code_test/README.md index 52d1dd7ccd..8624deb2cc 100644 --- a/naiveproxy/src/build/private_code_test/README.md +++ b/naiveproxy/src/build/private_code_test/README.md @@ -28,9 +28,20 @@ The main alternative I found was to use `gclient flatten`. Example output: ## Determining Linker Inputs -This is done by performing a custom link step with a linker that just records -inputs. This seemed like the simplest approach. +This is done by parsing `build.ninja` to find all inputs to an executable. This +approach is pretty fast & simple, but does not catch the case where a public +`.cc` file has an `#include` a private `.h` file. + +Alternatives considered: -Two alternatives: 1) Dump paths found in debug information. + * Hard to do cross-platform. 2) Scan a linker map file for input paths. + * LTO causes paths in linker map to be inaccurate. +3) Use a fake link step to capture all object file inputs + * Object files paths are relative to GN target, so this does not catch + internal sources referenced by public GN targets. +4) Query GN / Ninja for transitive inputs + * This ends up listing non-linker inputs as well, which we do not want. +5) Parse depfiles to find all headers, and add them to the list of inputs + * Additional work, but would give us full coverage. diff --git a/naiveproxy/src/build/private_code_test/ninja_parser.py b/naiveproxy/src/build/private_code_test/ninja_parser.py new file mode 100755 index 0000000000..aa4833f756 --- /dev/null +++ b/naiveproxy/src/build/private_code_test/ninja_parser.py @@ -0,0 +1,211 @@ +#!/usr/bin/env python3 +# Copyright 2017 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +"""Extract source file information from .ninja files.""" + +# Copied from //tools/binary_size/libsupersize + +import argparse +import io +import json +import logging +import os +import re +import sys + +sys.path.insert(1, os.path.join(os.path.dirname(__file__), '..')) +import action_helpers + +# E.g.: +# build obj/.../foo.o: cxx gen/.../foo.cc || obj/.../foo.inputdeps.stamp +# build obj/.../libfoo.a: alink obj/.../a.o obj/.../b.o | +# build ./libchrome.so ./lib.unstripped/libchrome.so: solink a.o b.o ... +# build libmonochrome.so: __chrome_android_libmonochrome___rule | ... +_REGEX = re.compile(r'build ([^:]+): \w+ (.*?)(?: *\||\n|$)') + +_RLIBS_REGEX = re.compile(r' rlibs = (.*?)(?:\n|$)') + +# Unmatches seems to happen for empty source_sets(). E.g.: +# obj/chrome/browser/ui/libui_public_dependencies.a +_MAX_UNMATCHED_TO_LOG = 20 +_MAX_UNMATCHED_TO_IGNORE = 200 + + +class _SourceMapper: + + def __init__(self, dep_map, parsed_files): + self._dep_map = dep_map + self.parsed_files = parsed_files + self._unmatched_paths = set() + + def _FindSourceForPathInternal(self, path): + if not path.endswith(')'): + if path.startswith('..'): + return path + return self._dep_map.get(path) + + # foo/bar.a(baz.o) + start_idx = path.index('(') + lib_name = path[:start_idx] + obj_name = path[start_idx + 1:-1] + by_basename = self._dep_map.get(lib_name) + if not by_basename: + if lib_name.endswith('rlib') and 'std/' in lib_name: + # Currently we use binary prebuilt static libraries of the Rust + # stdlib so we can't get source paths. That may change in future. + return '(Rust stdlib)/%s' % lib_name + return None + if lib_name.endswith('.rlib'): + # Rust doesn't really have the concept of an object file because + # the compilation unit is the whole 'crate'. Return whichever + # filename was the crate root. + return next(iter(by_basename.values())) + obj_path = by_basename.get(obj_name) + if not obj_path: + # Found the library, but it doesn't list the .o file. + logging.warning('no obj basename for %s %s', path, obj_name) + return None + return self._dep_map.get(obj_path) + + def FindSourceForPath(self, path): + """Returns the source path for the given object path (or None if not found). + + Paths for objects within archives should be in the format: foo/bar.a(baz.o) + """ + ret = self._FindSourceForPathInternal(path) + if not ret and path not in self._unmatched_paths: + if self.unmatched_paths_count < _MAX_UNMATCHED_TO_LOG: + logging.warning('Could not find source path for %s (empty source_set?)', + path) + self._unmatched_paths.add(path) + return ret + + @property + def unmatched_paths_count(self): + return len(self._unmatched_paths) + + +def _ParseNinjaPathList(path_list): + ret = path_list.replace('\\ ', '\b') + return [s.replace('\b', ' ') for s in ret.split()] + + +def _OutputsAreObject(outputs): + return (outputs.endswith('.a') or outputs.endswith('.o') + or outputs.endswith('.rlib')) + + +def _ParseOneFile(lines, dep_map, executable_path): + sub_ninjas = [] + executable_inputs = None + last_executable_paths = [] + for line in lines: + if line.startswith('subninja '): + sub_ninjas.append(line[9:-1]) + # Rust .rlibs are listed as implicit dependencies of the main + # target linking rule, then are given as an extra + # rlibs = + # variable on a subsequent line. Watch out for that line. + elif m := _RLIBS_REGEX.match(line): + if executable_path in last_executable_paths: + executable_inputs.extend(_ParseNinjaPathList(m.group(1))) + elif m := _REGEX.match(line): + outputs, srcs = m.groups() + if _OutputsAreObject(outputs): + output = outputs.replace('\\ ', ' ') + assert output not in dep_map, 'Duplicate output: ' + output + if output[-1] == 'o': + dep_map[output] = srcs.replace('\\ ', ' ') + else: + obj_paths = _ParseNinjaPathList(srcs) + dep_map[output] = {os.path.basename(p): p for p in obj_paths} + elif executable_path: + last_executable_paths = [ + os.path.normpath(p) for p in _ParseNinjaPathList(outputs) + ] + if executable_path in last_executable_paths: + executable_inputs = _ParseNinjaPathList(srcs) + + return sub_ninjas, executable_inputs + + +def _Parse(output_directory, executable_path): + """Parses build.ninja and subninjas. + + Args: + output_directory: Where to find the root build.ninja. + executable_path: Path to binary to find inputs for. + + Returns: A tuple of (source_mapper, executable_inputs). + source_mapper: _SourceMapper instance. + executable_inputs: List of paths of linker inputs. + """ + if executable_path: + executable_path = os.path.relpath(executable_path, output_directory) + to_parse = ['build.ninja'] + seen_paths = set(to_parse) + dep_map = {} + executable_inputs = None + while to_parse: + path = os.path.join(output_directory, to_parse.pop()) + with open(path, encoding='utf-8', errors='ignore') as obj: + sub_ninjas, found_executable_inputs = _ParseOneFile( + obj, dep_map, executable_path) + if found_executable_inputs: + assert not executable_inputs, ( + 'Found multiple inputs for executable_path ' + executable_path) + executable_inputs = found_executable_inputs + for subpath in sub_ninjas: + assert subpath not in seen_paths, 'Double include of ' + subpath + seen_paths.add(subpath) + to_parse.extend(sub_ninjas) + + assert executable_inputs, 'Failed to find rule that builds ' + executable_path + return _SourceMapper(dep_map, seen_paths), executable_inputs + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('--executable', required=True) + parser.add_argument('--result-json', required=True) + parser.add_argument('--depfile') + args = parser.parse_args() + logs_io = io.StringIO() + logging.basicConfig(level=logging.DEBUG, + format='%(levelname).1s %(relativeCreated)6d %(message)s', + stream=logs_io) + + source_mapper, object_paths = _Parse('.', args.executable) + logging.info('Found %d linker inputs', len(object_paths)) + source_paths = [] + for obj_path in object_paths: + result = source_mapper.FindSourceForPath(obj_path) or obj_path + # Need to recurse on .a files. + if isinstance(result, dict): + source_paths.extend( + source_mapper.FindSourceForPath(v) or v for v in result.values()) + else: + source_paths.append(result) + logging.info('Found %d source paths', len(source_paths)) + + num_unmatched = source_mapper.unmatched_paths_count + if num_unmatched > _MAX_UNMATCHED_TO_LOG: + logging.warning('%d paths were missing sources (showed the first %d)', + num_unmatched, _MAX_UNMATCHED_TO_LOG) + if num_unmatched > _MAX_UNMATCHED_TO_IGNORE: + raise Exception('Too many unmapped files. Likely a bug in ninja_parser.py') + + if args.depfile: + action_helpers.write_depfile(args.depfile, args.result_json, + source_mapper.parsed_files) + + with open(args.result_json, 'w', encoding='utf-8') as f: + json.dump({ + 'logs': logs_io.getvalue(), + 'source_paths': source_paths, + }, f) + + +if __name__ == '__main__': + main() diff --git a/naiveproxy/src/build/private_code_test/private_code_test.gni b/naiveproxy/src/build/private_code_test/private_code_test.gni index 23c7471f8d..09d6a8dcae 100644 --- a/naiveproxy/src/build/private_code_test/private_code_test.gni +++ b/naiveproxy/src/build/private_code_test/private_code_test.gni @@ -5,25 +5,53 @@ import("//testing/test.gni") template("private_code_test") { - isolated_script_test(target_name) { - forward_variables_from(invoker, - [ - "data", - "data_deps", - ]) - script = "//build/private_code_test/private_code_test.py" - _linker_inputs_dep = invoker.linker_inputs_dep + testonly = true + assert(!is_component_build, "Guard your test behind if (!is_component_build)") + + _linker_inputs_dep = invoker.linker_inputs_dep + _dir = get_label_info(_linker_inputs_dep, "root_out_dir") + + if (defined(invoker.executable_name)) { + _executable_path = "$_dir/${invoker.executable_name}" + } else { + if (is_android) { + _dir += "/lib.unstripped" + } if (shlib_prefix != "") { _so_name = shlib_prefix + get_label_info(_linker_inputs_dep, "name") _so_name = string_replace(_so_name, "${shlib_prefix}${shlib_prefix}", shlib_prefix) } - _dir = get_label_info(_linker_inputs_dep, "root_out_dir") - if (is_android) { - _dir += "/lib.unstripped" + _executable_path = "$_dir/${_so_name}$shlib_extension" + } + + _collect_sources_output = "$target_gen_dir/$target_name.json" + _collect_sources_target_name = "${target_name}__parse_ninja" + action(_collect_sources_target_name) { + script = "//build/private_code_test/ninja_parser.py" + outputs = [ _collect_sources_output ] + inputs = [ "//build/action_helpers.py" ] + depfile = "$target_gen_dir/$target_name.d" + + # The script does not read this file, so the dep is not really required. + # It is needed only in the case where the target is in a different + # toolchain, and would not be added to build.ninja otherwise. + if (get_label_info(_linker_inputs_dep, "toolchain") != default_toolchain) { + deps = [ _linker_inputs_dep ] } - _linker_inputs_file = "$_dir/${_so_name}$shlib_extension" + args = [ + "--executable", + rebase_path(_executable_path, root_build_dir), + "--result-json", + rebase_path(_collect_sources_output, root_build_dir), + "--depfile", + rebase_path(depfile, root_build_dir), + ] + } + + isolated_script_test(target_name) { + script = "//build/private_code_test/private_code_test.py" if (defined(invoker.private_paths_dep)) { _private_paths_dep = invoker.private_paths_dep _private_paths_file = invoker.private_paths_file @@ -36,12 +64,13 @@ template("private_code_test") { } data_deps = [ - _linker_inputs_dep, + ":$_collect_sources_target_name", _private_paths_dep, ] args = [ - "--linker-inputs", - "@WrappedPath(" + rebase_path(_linker_inputs_file, root_build_dir) + ")", + "--collect-sources-json", + "@WrappedPath(" + rebase_path(_collect_sources_output, root_build_dir) + + ")", "--private-paths-file", "@WrappedPath(" + rebase_path(_private_paths_file, root_build_dir) + ")", "--root-out-dir", diff --git a/naiveproxy/src/build/private_code_test/private_code_test.py b/naiveproxy/src/build/private_code_test/private_code_test.py index a164741a4b..f51888443a 100755 --- a/naiveproxy/src/build/private_code_test/private_code_test.py +++ b/naiveproxy/src/build/private_code_test/private_code_test.py @@ -6,6 +6,8 @@ import argparse import fnmatch +import json +import logging import os import pathlib import sys @@ -76,7 +78,7 @@ def _read_private_paths(path): # outside of // (and what would the obj/ path for them look like?). ret = [p[4:] for p in text.splitlines() if p.startswith('src/')] if not ret: - sys.stderr.write(f'No src/ paths found in {args.private_paths_file}\n') + sys.stderr.write(f'No src/ paths found in {path}\n') sys.stderr.write(f'This test should not be run on public bots.\n') sys.stderr.write(f'File contents:\n') sys.stderr.write(text) @@ -87,10 +89,9 @@ def _read_private_paths(path): def main(): parser = argparse.ArgumentParser() - parser.add_argument('--linker-inputs', + parser.add_argument('--collect-sources-json', required=True, - help='Path to file containing one linker input per line, ' - 'relative to --root-out-dir') + help='Path to ninja_parser.py output') parser.add_argument('--private-paths-file', required=True, help='Path to file containing list of paths that are ' @@ -105,15 +106,23 @@ def main(): action='store_true', help='Invert exit code.') args = parser.parse_args() + logging.basicConfig(level=logging.INFO, + format='%(levelname).1s %(relativeCreated)6d %(message)s') + with open(args.collect_sources_json) as f: + collect_sources_json = json.load(f) + if collect_sources_json['logs']: + logging.info('Start logs from ninja_parser.py:') + sys.stderr.write(collect_sources_json['logs']) + logging.info('End logs from ninja_parser.py:') + source_paths = collect_sources_json['source_paths'] private_paths = _read_private_paths(args.private_paths_file) - linker_inputs = pathlib.Path(args.linker_inputs).read_text().splitlines() root_out_dir = args.root_out_dir if root_out_dir == '.': root_out_dir = '' - found = _find_private_paths(linker_inputs, private_paths, root_out_dir) + found = _find_private_paths(source_paths, private_paths, root_out_dir) if args.allow_violation: found, ignored_paths = _apply_allowlist(found, args.allow_violation) @@ -127,6 +136,8 @@ def main(): _print_paths(found, limit) elif args.expect_failure: print('Expected to find a private path, but none were found.') + else: + print('No private paths found 👍.') sys.exit(0 if bool(found) == args.expect_failure else 1) diff --git a/naiveproxy/src/build/rust/cxx_version.gni b/naiveproxy/src/build/rust/cxx_version.gni index 95dc659ad7..7d6ef40146 100644 --- a/naiveproxy/src/build/rust/cxx_version.gni +++ b/naiveproxy/src/build/rust/cxx_version.gni @@ -4,4 +4,4 @@ # The version of cxx under //third_party/rust/chromium_crates_io/vendor. # Update this whenever cxx is rolled. -cxx_version = "1.0.135" +cxx_version = "1.0.137" diff --git a/naiveproxy/src/build/rust/run_build_script.py b/naiveproxy/src/build/rust/run_build_script.py index 3cbb2c0194..845b0f16e9 100755 --- a/naiveproxy/src/build/rust/run_build_script.py +++ b/naiveproxy/src/build/rust/run_build_script.py @@ -151,11 +151,19 @@ def main(): env["CARGO_FEATURE_%s" % feature_name] = "1" if args.rustflags: with open(args.rustflags) as flags: + for flag in flags: + if "-Copt-level" in flag: + (_, opt) = flag.split("=") + env["OPT_LEVEL"] = opt.rstrip() + flags.seek(0) env["CARGO_ENCODED_RUSTFLAGS"] = '\x1f'.join(flags.readlines()) if args.env: for e in args.env: (k, v) = e.split("=") env[k] = v + if "OPT_LEVEL" not in env: + env["OPT_LEVEL"] = "0" + # Pass through a couple which are useful for diagnostics if os.environ.get("RUST_BACKTRACE"): env["RUST_BACKTRACE"] = os.environ.get("RUST_BACKTRACE") diff --git a/naiveproxy/src/build/rust/std/BUILD.gn b/naiveproxy/src/build/rust/std/BUILD.gn index 68b085be20..6b996aa1fe 100644 --- a/naiveproxy/src/build/rust/std/BUILD.gn +++ b/naiveproxy/src/build/rust/std/BUILD.gn @@ -89,7 +89,7 @@ if (toolchain_has_rust) { # These are no longer present in the Windows toolchain. stdlib_files += [ "addr2line", - "adler", + "adler2", "gimli", "libc", "memchr", diff --git a/naiveproxy/src/build/rust/std/remap_alloc.cc b/naiveproxy/src/build/rust/std/remap_alloc.cc index 854694b141..a443b11ec5 100644 --- a/naiveproxy/src/build/rust/std/remap_alloc.cc +++ b/naiveproxy/src/build/rust/std/remap_alloc.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include #include diff --git a/naiveproxy/src/build/rust/std/rules/BUILD.gn b/naiveproxy/src/build/rust/std/rules/BUILD.gn index 6b59b0894d..e44d638832 100644 --- a/naiveproxy/src/build/rust/std/rules/BUILD.gn +++ b/naiveproxy/src/build/rust/std/rules/BUILD.gn @@ -8,12 +8,17 @@ import("//build/rust/cargo_crate.gni") cargo_crate("addr2line") { crate_type = "rlib" - crate_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/addr2line-0.22.0/src/lib.rs" + crate_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/addr2line-0.24.2/src/lib.rs" sources = [ - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/addr2line-0.22.0/src/builtin_split_dwarf_loader.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/addr2line-0.22.0/src/function.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/addr2line-0.22.0/src/lazy.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/addr2line-0.22.0/src/lib.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/addr2line-0.24.2/src/bin/addr2line.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/addr2line-0.24.2/src/frame.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/addr2line-0.24.2/src/function.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/addr2line-0.24.2/src/lazy.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/addr2line-0.24.2/src/lib.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/addr2line-0.24.2/src/line.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/addr2line-0.24.2/src/loader.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/addr2line-0.24.2/src/lookup.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/addr2line-0.24.2/src/unit.rs", ] inputs = [] no_std = true @@ -21,7 +26,7 @@ cargo_crate("addr2line") { # Unit tests skipped. Generate with --with-tests to include them. build_native_rust_unit_tests = false edition = "2018" - cargo_pkg_version = "0.22.0" + cargo_pkg_version = "0.24.2" cargo_pkg_name = "addr2line" cargo_pkg_description = "A cross-platform symbolication library written in Rust, using `gimli`" @@ -65,22 +70,22 @@ cargo_crate("addr2line") { output_dir = "$root_out_dir/local_rustc_sysroot/lib/rustlib/$rust_abi_target/lib/" } -cargo_crate("adler") { +cargo_crate("adler2") { crate_type = "rlib" - crate_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/adler-1.0.2/src/lib.rs" + crate_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/adler2-2.0.0/src/lib.rs" sources = [ - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/adler-1.0.2/src/algo.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/adler-1.0.2/src/lib.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/adler2-2.0.0/src/algo.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/adler2-2.0.0/src/lib.rs", ] inputs = [] no_std = true # Unit tests skipped. Generate with --with-tests to include them. build_native_rust_unit_tests = false - edition = "2015" - cargo_pkg_version = "1.0.2" - cargo_pkg_authors = "Jonas Schievink " - cargo_pkg_name = "adler" + edition = "2021" + cargo_pkg_version = "2.0.0" + cargo_pkg_authors = "Jonas Schievink , oyvindln " + cargo_pkg_name = "adler2" cargo_pkg_description = "A simple clean-room implementation of the Adler-32 checksum" library_configs -= [ @@ -287,179 +292,179 @@ cargo_crate("cfg_if") { } cargo_crate("compiler_builtins") { crate_type = "rlib" - crate_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/lib.rs" + crate_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/lib.rs" sources = [ - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/aarch64.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/aarch64_linux.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/arm.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/arm_linux.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/float/add.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/float/cmp.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/float/conv.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/float/div.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/float/extend.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/float/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/float/mul.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/float/pow.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/float/sub.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/float/trunc.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/hexagon.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/int/addsub.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/int/big.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/int/bswap.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/int/leading_zeros.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/int/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/int/mul.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/int/sdiv.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/int/shift.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/int/specialized_div_rem/asymmetric.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/int/specialized_div_rem/binary_long.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/int/specialized_div_rem/delegate.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/int/specialized_div_rem/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/int/specialized_div_rem/norm_shift.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/int/specialized_div_rem/trifecta.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/int/trailing_zeros.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/int/udiv.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/lib.miri.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/lib.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/macros.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/math.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/mem/impls.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/mem/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/mem/x86_64.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/probestack.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/riscv.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/x86.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/x86_64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/aarch64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/aarch64_linux.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/arm.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/arm_linux.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/float/add.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/float/cmp.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/float/conv.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/float/div.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/float/extend.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/float/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/float/mul.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/float/pow.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/float/sub.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/float/trunc.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/hexagon.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/int/addsub.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/int/big.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/int/bswap.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/int/leading_zeros.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/int/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/int/mul.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/int/sdiv.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/int/shift.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/int/specialized_div_rem/asymmetric.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/int/specialized_div_rem/binary_long.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/int/specialized_div_rem/delegate.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/int/specialized_div_rem/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/int/specialized_div_rem/norm_shift.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/int/specialized_div_rem/trifecta.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/int/trailing_zeros.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/int/udiv.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/lib.miri.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/lib.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/macros.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/math.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/mem/impls.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/mem/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/mem/x86_64.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/probestack.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/riscv.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/x86.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/x86_64.rs", ] inputs = [ - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/acos.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/acosf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/acosh.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/acoshf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/asin.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/asinf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/asinh.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/asinhf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/atan.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/atan2.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/atan2f.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/atanf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/atanh.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/atanhf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/cbrt.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/cbrtf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/ceil.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/ceilf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/copysign.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/copysignf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/cos.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/cosf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/cosh.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/coshf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/erf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/erff.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/exp.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/exp10.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/exp10f.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/exp2.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/exp2f.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/expf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/expm1.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/expm1f.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/expo2.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/fabs.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/fabsf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/fdim.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/fdimf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/fenv.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/floor.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/floorf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/fma.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/fmaf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/fmax.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/fmaxf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/fmin.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/fminf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/fmod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/fmodf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/frexp.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/frexpf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/hypot.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/hypotf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/ilogb.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/ilogbf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/j0.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/j0f.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/j1.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/j1f.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/jn.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/jnf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/k_cos.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/k_cosf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/k_expo2.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/k_expo2f.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/k_sin.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/k_sinf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/k_tan.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/k_tanf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/ldexp.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/ldexpf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/lgamma.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/lgamma_r.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/lgammaf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/lgammaf_r.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/log.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/log10.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/log10f.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/log1p.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/log1pf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/log2.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/log2f.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/logf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/modf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/modff.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/nextafter.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/nextafterf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/pow.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/powf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/rem_pio2.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/rem_pio2_large.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/rem_pio2f.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/remainder.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/remainderf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/remquo.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/remquof.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/rint.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/rintf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/round.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/roundf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/scalbn.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/scalbnf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/sin.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/sincos.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/sincosf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/sinf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/sinh.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/sinhf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/sqrt.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/sqrtf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/tan.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/tanf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/tanh.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/tanhf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/tgamma.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/tgammaf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/trunc.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../libm/src/math/truncf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/acos.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/acosf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/acosh.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/acoshf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/asin.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/asinf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/asinh.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/asinhf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/atan.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/atan2.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/atan2f.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/atanf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/atanh.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/atanhf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/cbrt.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/cbrtf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/ceil.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/ceilf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/copysign.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/copysignf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/cos.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/cosf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/cosh.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/coshf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/erf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/erff.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/exp.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/exp10.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/exp10f.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/exp2.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/exp2f.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/expf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/expm1.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/expm1f.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/expo2.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/fabs.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/fabsf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/fdim.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/fdimf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/fenv.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/floor.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/floorf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/fma.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/fmaf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/fmax.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/fmaxf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/fmin.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/fminf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/fmod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/fmodf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/frexp.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/frexpf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/hypot.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/hypotf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/ilogb.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/ilogbf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/j0.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/j0f.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/j1.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/j1f.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/jn.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/jnf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/k_cos.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/k_cosf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/k_expo2.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/k_expo2f.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/k_sin.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/k_sinf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/k_tan.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/k_tanf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/ldexp.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/ldexpf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/lgamma.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/lgamma_r.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/lgammaf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/lgammaf_r.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/log.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/log10.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/log10f.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/log1p.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/log1pf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/log2.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/log2f.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/logf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/modf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/modff.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/nextafter.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/nextafterf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/pow.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/powf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/rem_pio2.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/rem_pio2_large.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/rem_pio2f.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/remainder.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/remainderf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/remquo.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/remquof.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/rint.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/rintf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/round.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/roundf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/scalbn.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/scalbnf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/sin.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/sincos.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/sincosf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/sinf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/sinh.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/sinhf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/sqrt.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/sqrtf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/tan.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/tanf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/tanh.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/tanhf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/tgamma.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/tgammaf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/trunc.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../libm/src/math/truncf.rs", ] no_std = true # Unit tests skipped. Generate with --with-tests to include them. build_native_rust_unit_tests = false edition = "2021" - cargo_pkg_version = "0.1.138" + cargo_pkg_version = "0.1.140" cargo_pkg_authors = "Jorge Aparicio " cargo_pkg_name = "compiler_builtins" cargo_pkg_description = "Compiler intrinsics used by the Rust compiler. Also available for other targets if necessary!" @@ -486,9 +491,9 @@ cargo_crate("compiler_builtins") { "core", "rustc-dep-of-std", ] - build_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/build.rs" - build_sources = [ "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/build.rs" ] - build_script_inputs = [ "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.138/src/../configure.rs" ] + build_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/build.rs" + build_sources = [ "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/build.rs" ] + build_script_inputs = [ "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/compiler_builtins-0.1.140/src/../configure.rs" ] rustenv = [ "CFG_DISABLE_UNSTABLE_FEATURES=0", "STD_ENV_ARCH=$rust_target_arch", @@ -564,6 +569,7 @@ cargo_crate("core") { "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/hash/sip.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/hint.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/internal_macros.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/intrinsics/fallback.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/intrinsics/mir.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/intrinsics/mod.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/core/src/intrinsics/simd.rs", @@ -1082,52 +1088,52 @@ cargo_crate("getopts") { } cargo_crate("gimli") { crate_type = "rlib" - crate_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/lib.rs" + crate_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/lib.rs" sources = [ - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/arch.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/common.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/constants.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/endianity.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/leb128.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/lib.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/read/abbrev.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/read/addr.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/read/aranges.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/read/cfi.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/read/dwarf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/read/endian_reader.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/read/endian_slice.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/read/index.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/read/line.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/read/lists.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/read/loclists.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/read/lookup.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/read/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/read/op.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/read/pubnames.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/read/pubtypes.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/read/reader.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/read/relocate.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/read/rnglists.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/read/str.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/read/unit.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/read/util.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/read/value.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/test_util.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/write/abbrev.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/write/cfi.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/write/dwarf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/write/endian_vec.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/write/line.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/write/loc.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/write/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/write/op.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/write/range.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/write/relocate.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/write/section.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/write/str.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/write/unit.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.29.0/src/write/writer.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/arch.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/common.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/constants.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/endianity.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/leb128.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/lib.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/read/abbrev.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/read/addr.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/read/aranges.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/read/cfi.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/read/dwarf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/read/endian_reader.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/read/endian_slice.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/read/index.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/read/line.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/read/lists.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/read/loclists.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/read/lookup.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/read/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/read/op.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/read/pubnames.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/read/pubtypes.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/read/reader.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/read/relocate.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/read/rnglists.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/read/str.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/read/unit.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/read/util.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/read/value.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/test_util.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/write/abbrev.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/write/cfi.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/write/dwarf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/write/endian_vec.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/write/line.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/write/loc.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/write/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/write/op.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/write/range.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/write/relocate.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/write/section.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/write/str.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/write/unit.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/gimli-0.31.1/src/write/writer.rs", ] inputs = [] no_std = true @@ -1135,7 +1141,7 @@ cargo_crate("gimli") { # Unit tests skipped. Generate with --with-tests to include them. build_native_rust_unit_tests = false edition = "2018" - cargo_pkg_version = "0.29.0" + cargo_pkg_version = "0.31.1" cargo_pkg_name = "gimli" cargo_pkg_description = "A library for reading and writing the DWARF debugging format." @@ -1584,26 +1590,26 @@ cargo_crate("memchr") { } cargo_crate("miniz_oxide") { crate_type = "rlib" - crate_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/miniz_oxide-0.7.4/src/lib.rs" + crate_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/miniz_oxide-0.8.2/src/lib.rs" sources = [ - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/miniz_oxide-0.7.4/src/deflate/buffer.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/miniz_oxide-0.7.4/src/deflate/core.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/miniz_oxide-0.7.4/src/deflate/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/miniz_oxide-0.7.4/src/deflate/stream.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/miniz_oxide-0.7.4/src/inflate/core.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/miniz_oxide-0.7.4/src/inflate/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/miniz_oxide-0.7.4/src/inflate/output_buffer.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/miniz_oxide-0.7.4/src/inflate/stream.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/miniz_oxide-0.7.4/src/lib.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/miniz_oxide-0.7.4/src/shared.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/miniz_oxide-0.8.2/src/deflate/buffer.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/miniz_oxide-0.8.2/src/deflate/core.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/miniz_oxide-0.8.2/src/deflate/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/miniz_oxide-0.8.2/src/deflate/stream.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/miniz_oxide-0.8.2/src/inflate/core.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/miniz_oxide-0.8.2/src/inflate/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/miniz_oxide-0.8.2/src/inflate/output_buffer.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/miniz_oxide-0.8.2/src/inflate/stream.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/miniz_oxide-0.8.2/src/lib.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/miniz_oxide-0.8.2/src/shared.rs", ] inputs = [] no_std = true # Unit tests skipped. Generate with --with-tests to include them. build_native_rust_unit_tests = false - edition = "2018" - cargo_pkg_version = "0.7.4" + edition = "2021" + cargo_pkg_version = "0.8.2" cargo_pkg_authors = "Frommi , oyvindln " cargo_pkg_name = "miniz_oxide" cargo_pkg_description = "DEFLATE compression and decompression library rewritten in Rust based on miniz" @@ -1618,7 +1624,7 @@ cargo_crate("miniz_oxide") { ] executable_configs += [ "//build/config/compiler:no_chromium_code" ] deps = [ - ":adler", + ":adler2", ":compiler_builtins", ":rustc_std_workspace_alloc", ":rustc_std_workspace_core", @@ -1649,88 +1655,88 @@ cargo_crate("miniz_oxide") { } cargo_crate("object") { crate_type = "rlib" - crate_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/lib.rs" + crate_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/lib.rs" sources = [ - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/archive.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/build/bytes.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/build/elf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/build/error.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/build/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/build/table.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/common.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/elf.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/endian.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/lib.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/macho.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/pe.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/pod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/any.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/archive.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/coff/comdat.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/coff/file.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/coff/import.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/coff/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/coff/relocation.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/coff/section.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/coff/symbol.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/elf/attributes.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/elf/comdat.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/elf/compression.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/elf/dynamic.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/elf/file.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/elf/hash.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/elf/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/elf/note.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/elf/relocation.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/elf/section.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/elf/segment.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/elf/symbol.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/elf/version.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/gnu_compression.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/macho/dyld_cache.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/macho/fat.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/macho/file.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/macho/load_command.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/macho/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/macho/relocation.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/macho/section.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/macho/segment.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/macho/symbol.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/pe/data_directory.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/pe/export.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/pe/file.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/pe/import.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/pe/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/pe/relocation.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/pe/resource.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/pe/rich.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/pe/section.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/read_cache.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/read_ref.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/traits.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/util.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/wasm.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/xcoff/comdat.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/xcoff/file.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/xcoff/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/xcoff/relocation.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/xcoff/section.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/xcoff/segment.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/read/xcoff/symbol.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/write/coff/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/write/coff/object.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/write/coff/writer.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/write/elf/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/write/elf/object.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/write/elf/writer.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/write/macho.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/write/mod.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/write/pe.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/write/string.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/write/util.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/write/xcoff.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.5/src/xcoff.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/archive.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/build/bytes.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/build/elf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/build/error.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/build/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/build/table.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/common.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/elf.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/endian.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/lib.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/macho.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/pe.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/pod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/any.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/archive.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/coff/comdat.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/coff/file.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/coff/import.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/coff/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/coff/relocation.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/coff/section.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/coff/symbol.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/elf/attributes.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/elf/comdat.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/elf/compression.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/elf/dynamic.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/elf/file.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/elf/hash.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/elf/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/elf/note.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/elf/relocation.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/elf/section.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/elf/segment.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/elf/symbol.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/elf/version.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/gnu_compression.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/macho/dyld_cache.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/macho/fat.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/macho/file.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/macho/load_command.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/macho/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/macho/relocation.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/macho/section.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/macho/segment.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/macho/symbol.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/pe/data_directory.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/pe/export.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/pe/file.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/pe/import.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/pe/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/pe/relocation.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/pe/resource.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/pe/rich.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/pe/section.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/read_cache.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/read_ref.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/traits.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/util.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/wasm.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/xcoff/comdat.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/xcoff/file.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/xcoff/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/xcoff/relocation.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/xcoff/section.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/xcoff/segment.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/read/xcoff/symbol.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/write/coff/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/write/coff/object.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/write/coff/writer.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/write/elf/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/write/elf/object.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/write/elf/writer.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/write/macho.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/write/mod.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/write/pe.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/write/string.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/write/util.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/write/xcoff.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/src/xcoff.rs", ] inputs = [] no_std = true @@ -1738,7 +1744,7 @@ cargo_crate("object") { # Unit tests skipped. Generate with --with-tests to include them. build_native_rust_unit_tests = false edition = "2018" - cargo_pkg_version = "0.36.5" + cargo_pkg_version = "0.36.7" cargo_pkg_name = "object" cargo_pkg_description = "A unified interface for reading and writing object file formats." @@ -1778,6 +1784,8 @@ cargo_crate("object") { "unaligned", "xcoff", ] + build_root = "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/build.rs" + build_sources = [ "//third_party/rust-toolchain/lib/rustlib/src/rust/library/vendor/object-0.36.7/build.rs" ] rustenv = [ "CFG_DISABLE_UNSTABLE_FEATURES=0", "STD_ENV_ARCH=$rust_target_arch", @@ -2405,8 +2413,6 @@ cargo_crate("std") { "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/rt.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/barrier.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/barrier/tests.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/condvar.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/condvar/tests.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/lazy_lock.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/lazy_lock/tests.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mod.rs", @@ -2424,17 +2430,19 @@ cargo_crate("std") { "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mpsc/mod.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mpsc/sync_tests.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mpsc/tests.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mutex.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/mutex/tests.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/once.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/once/tests.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/once_lock.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/once_lock/tests.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/poison.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/poison/condvar.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/poison/condvar/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/poison/mutex.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/poison/mutex/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/poison/once.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/poison/once/tests.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/poison/rwlock.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/poison/rwlock/tests.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/reentrant_lock.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/reentrant_lock/tests.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/rwlock.rs", - "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sync/rwlock/tests.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/alloc/hermit.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/alloc/mod.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/sys/alloc/sgx.rs", @@ -2785,6 +2793,7 @@ cargo_crate("std") { "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../backtrace/src/symbolize/gimli/libs_libnx.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../backtrace/src/symbolize/gimli/libs_macos.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../backtrace/src/symbolize/gimli/libs_windows.rs", + "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../backtrace/src/symbolize/gimli/lru.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../backtrace/src/symbolize/gimli/macho.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../backtrace/src/symbolize/gimli/mmap_fake.rs", "//third_party/rust-toolchain/lib/rustlib/src/rust/library/std/src/../../backtrace/src/symbolize/gimli/mmap_unix.rs", diff --git a/naiveproxy/src/build/rust/tests/test_control_flow_guard/test_control_flow_guard.rs b/naiveproxy/src/build/rust/tests/test_control_flow_guard/test_control_flow_guard.rs index d303d3dc83..33809c7301 100644 --- a/naiveproxy/src/build/rust/tests/test_control_flow_guard/test_control_flow_guard.rs +++ b/naiveproxy/src/build/rust/tests/test_control_flow_guard/test_control_flow_guard.rs @@ -37,7 +37,8 @@ fn main() { let fptr = unsafe { std::mem::transmute::(nop_sled as usize + NOP_INSTRUCTION_SIZE) }; // Generates a FAST_FAIL_GUARD_ICALL_CHECK_FAILURE if CFG triggers. - indirect_call(fptr); + // `std::hint::black_box` is used to prevent optimizing away the call. + indirect_call(std::hint::black_box(fptr)); // Should only reach here if CFG is disabled. eprintln!("failed"); } diff --git a/naiveproxy/src/build/toolchain/apple/linker_driver.py b/naiveproxy/src/build/toolchain/apple/linker_driver.py index ec3f673384..4f97969605 100755 --- a/naiveproxy/src/build/toolchain/apple/linker_driver.py +++ b/naiveproxy/src/build/toolchain/apple/linker_driver.py @@ -20,9 +20,6 @@ import whole_archive # Prefix for all custom linker driver arguments. LINKER_DRIVER_ARG_PREFIX = '-Wcrl,' LINKER_DRIVER_COMPILER_ARG_PREFIX = '-Wcrl,driver,' -# Linker action to create a directory and pass it to the linker as -# `-object_path_lto`. Special-cased since it has to run before the link. -OBJECT_PATH_LTO = 'object_path_lto' # The linker_driver.py is responsible for forwarding a linker invocation to # the compiler driver, while processing special arguments itself. @@ -77,7 +74,16 @@ OBJECT_PATH_LTO = 'object_path_lto' # `xcrun` is not used to invoke it. # -Wcrl,object_path_lto # Creates temporary directory for LTO object files. - +# +# -Wcrl,otoolpath, +# Sets the path to the otool for solink process. +# -Wcrl,nmpath, +# Sets the path to the nm for solink process. +# +# -Wcrl.tocname, +# Output TOC for solink. +# It would be processed both before the linker (to check reexport +# in old module) and after the linker (to produce TOC if needed). class LinkerDriver(object): def __init__(self, args): @@ -88,31 +94,47 @@ class LinkerDriver(object): """ self._args = args + # List of linker driver pre-actions that need to run before the link. + # **The sort order of this list affects the order in which + # the actions are invoked.** + # The first item in the tuple is the argument's -Wcrl, + # and the second is the function to invoke. + self._pre_actions = [ + ('object_path_lto', self.prepare_object_path_lto), + ('installnametoolpath,', self.set_install_name_tool_path), + ('dsymutilpath,', self.set_dsymutil_path), + ('strippath,', self.set_strip_path), + ('otoolpath,', self.set_otool_path), + ('nmpath,', self.set_nm_path), + ('tocname,', self.check_reexport_in_old_module), + ] + # List of linker driver actions. **The sort order of this list affects # the order in which the actions are invoked.** # The first item in the tuple is the argument's -Wcrl, # and the second is the function to invoke. self._actions = [ - ('installnametoolpath,', self.set_install_name_tool_path), ('installnametool,', self.run_install_name_tool), - ('dsymutilpath,', self.set_dsymutil_path), ('dsym,', self.run_dsymutil), ('unstripped,', self.run_save_unstripped), - ('strippath,', self.set_strip_path), ('strip,', self.run_strip), + ('tocname,', self.output_toc), ] # Linker driver actions can modify the these values. self._driver_path = None # Must be specified on the command line. + self._otool_cmd = ['xcrun', 'otool'] + self._nm_cmd = ['xcrun', 'nm'] self._install_name_tool_cmd = ['xcrun', 'install_name_tool'] self._dsymutil_cmd = ['xcrun', 'dsymutil'] self._strip_cmd = ['xcrun', 'strip'] # The linker output file, lazily computed in self._get_linker_output(). self._linker_output = None - # The temporary directory for intermediate LTO object files. If it - # exists, it will clean itself up on script exit. - self._object_path_lto = None + + # may not need to reexport unless LC_REEXPORT_DYLIB is used. + self._reexport_in_old_module = False + def run(self): """Runs the linker driver, separating out the main compiler driver's @@ -122,8 +144,9 @@ class LinkerDriver(object): """ # Collect arguments to the linker driver (this script) and remove them # from the arguments being passed to the compiler driver. - linker_driver_actions = {} - compiler_driver_args = [] + self._linker_driver_actions = {} + self._linker_driver_pre_actions = {} + self._compiler_driver_args = [] for index, arg in enumerate(self._args[1:]): if arg.startswith(LINKER_DRIVER_COMPILER_ARG_PREFIX): assert not self._driver_path @@ -131,9 +154,7 @@ class LinkerDriver(object): ):] elif arg.startswith(LINKER_DRIVER_ARG_PREFIX): # Convert driver actions into a map of name => lambda to invoke. - driver_action = self._process_driver_arg(arg) - assert driver_action[0] not in linker_driver_actions - linker_driver_actions[driver_action[0]] = driver_action[1] + self._process_driver_arg(arg) else: # TODO(crbug.com/40268754): On Apple, the linker command line # produced by rustc for LTO includes these arguments, but the @@ -141,16 +162,13 @@ class LinkerDriver(object): # Upstream bug: https://github.com/rust-lang/rust/issues/60059 BAD_RUSTC_ARGS = '-Wl,-plugin-opt=O[0-9],-plugin-opt=mcpu=.*' if not re.match(BAD_RUSTC_ARGS, arg): - compiler_driver_args.append(arg) + self._compiler_driver_args.append(arg) if not self._driver_path: raise RuntimeError( "Usage: linker_driver.py -Wcrl,driver, " "[linker-args]...") - if self._object_path_lto is not None: - compiler_driver_args.append('-Wl,-object_path_lto,{}'.format( - os.path.relpath(self._object_path_lto.name))) if self._get_linker_output() is None: raise ValueError( 'Could not find path to linker output (-o or --output)') @@ -158,8 +176,8 @@ class LinkerDriver(object): # We want to link rlibs as --whole-archive if they are part of a unit # test target. This is determined by switch # `-LinkWrapper,add-whole-archive`. - compiler_driver_args = whole_archive.wrap_with_whole_archive( - compiler_driver_args, is_apple=True) + self._compiler_driver_args = whole_archive.wrap_with_whole_archive( + self._compiler_driver_args, is_apple=True) linker_driver_outputs = [self._get_linker_output()] @@ -168,16 +186,26 @@ class LinkerDriver(object): # https://crbug.com/330262. env = os.environ.copy() env['ZERO_AR_DATE'] = '1' + + # Run the driver pre-actions, in the order specified by the + # actions list. + for action in self._pre_actions: + name = action[0] + if name in self._linker_driver_pre_actions: + self._linker_driver_pre_actions[name]() + # Run the linker by invoking the compiler driver. - subprocess.check_call([self._driver_path] + compiler_driver_args, + subprocess.check_call([self._driver_path] + + self._compiler_driver_args, env=env) # Run the linker driver actions, in the order specified by the # actions list. for action in self._actions: name = action[0] - if name in linker_driver_actions: - linker_driver_outputs += linker_driver_actions[name]() + if name in self._linker_driver_actions: + linker_driver_outputs += self._linker_driver_actions[name]( + ) except: # If a linker driver action failed, remove all the outputs to make # the build step atomic. @@ -212,23 +240,65 @@ class LinkerDriver(object): raise ValueError('%s is not a linker driver argument' % (arg, )) sub_arg = arg[len(LINKER_DRIVER_ARG_PREFIX):] - # Special-cased, since it needs to run before the link. - # TODO(lgrey): Remove if/when we start running `dsymutil` - # through the clang driver. See https://crbug.com/1324104 - if sub_arg == OBJECT_PATH_LTO: - self._object_path_lto = tempfile.TemporaryDirectory( - dir=os.getcwd()) - return (OBJECT_PATH_LTO, lambda: []) + + found = False + for driver_action in self._pre_actions: + (pre_name, pre_action) = driver_action + if sub_arg.startswith(pre_name): + assert pre_name not in self._linker_driver_pre_actions + self._linker_driver_pre_actions[pre_name] = \ + lambda: pre_action(sub_arg[len(pre_name):]) + # same sub_arg may be used in actions. + found = True + break for driver_action in self._actions: (name, action) = driver_action if sub_arg.startswith(name): - return (name, lambda: action(sub_arg[len(name):])) + assert name not in self._linker_driver_actions + self._linker_driver_actions[name] = \ + lambda: action(sub_arg[len(name):]) + return - raise ValueError('Unknown linker driver argument: %s' % (arg, )) + if not found: + raise ValueError('Unknown linker driver argument: %s' % (arg, )) + + def prepare_object_path_lto(self, arg): + """Linker driver pre-action for -Wcrl,object_path_lto. + + Prepare object_path_lto path in temp directory. + """ + # TODO(lgrey): Remove if/when we start running `dsymutil` + # through the clang driver. See https://crbug.com/1324104 + # The temporary directory for intermediate LTO object files. If it + # exists, it will clean itself up on script exit. + object_path_lto = tempfile.TemporaryDirectory(dir=os.getcwd()) + self._compiler_driver_args.append('-Wl,-object_path_lto,{}'.format( + os.path.relpath(object_path_lto.name))) + + def check_reexport_in_old_module(self, tocname): + """Linker driver pre-action for -Wcrl,tocname,. + + Check whether it contains LC_REEXPORT_DYLIB in old module, so that + needs to ouptupt TOC file for solink even if the same TOC. + + Returns: + True if old module have LC_REEXPORT_DYLIB + """ + if not os.path.exists(tocname): + return + dylib = self._get_linker_output() + if not os.path.exists(dylib): + return + p = subprocess.run(self._otool_cmd + ['-l', dylib], + capture_output=True) + if p.returncode != 0: + return + if re.match(rb'\s+cmd LC_REEXPORT_DYLIB$', p.stdout, re.MULTILINE): + self._reexport_in_old_module = True def set_install_name_tool_path(self, install_name_tool_path): - """Linker driver action for -Wcrl,installnametoolpath,. + """Linker driver pre-action for -Wcrl,installnametoolpath,. Sets the invocation command for install_name_tool, which allows the caller to specify an alternate path. This action is always @@ -237,12 +307,8 @@ class LinkerDriver(object): Args: install_name_tool_path: string, The path to the install_name_tool binary to run - - Returns: - No output - this step is run purely for its side-effect. """ self._install_name_tool_cmd = [install_name_tool_path] - return [] def run_install_name_tool(self, args_string): """Linker driver action for -Wcrl,installnametool,. Invokes @@ -294,7 +360,7 @@ class LinkerDriver(object): return [dsym_out] def set_dsymutil_path(self, dsymutil_path): - """Linker driver action for -Wcrl,dsymutilpath,. + """Linker driver pre-action for -Wcrl,dsymutilpath,. Sets the invocation command for dsymutil, which allows the caller to specify an alternate dsymutil. This action is always processed before @@ -302,12 +368,8 @@ class LinkerDriver(object): Args: dsymutil_path: string, The path to the dsymutil binary to run - - Returns: - No output - this step is run purely for its side-effect. """ self._dsymutil_cmd = [dsymutil_path] - return [] def run_save_unstripped(self, unstripped_path_prefix): """Linker driver action for -Wcrl,unstripped,. @@ -335,9 +397,6 @@ class LinkerDriver(object): Args: strip_args_string: string, Comma-separated arguments for `strip`. - - Returns: - list of string, Build step outputs. """ strip_command = list(self._strip_cmd) if len(strip_args_string) > 0: @@ -347,7 +406,7 @@ class LinkerDriver(object): return [] def set_strip_path(self, strip_path): - """Linker driver action for -Wcrl,strippath,. + """Linker driver pre-action for -Wcrl,strippath,. Sets the invocation command for strip, which allows the caller to specify an alternate strip. This action is always processed before the @@ -355,12 +414,105 @@ class LinkerDriver(object): Args: strip_path: string, The path to the strip binary to run - - Returns: - No output - this step is run purely for its side-effect. """ self._strip_cmd = [strip_path] - return [] + + def set_otool_path(self, otool_path): + """Linker driver pre-action for -Wcrl,otoolpath,. + + Sets the invocation command for otool. + + Args: + otool_path: string. The path to the otool binary to run + + """ + self._otool_cmd = [otool_path] + + def set_nm_path(self, nm_path): + """Linker driver pre-action for -Wcrl,nmpath,. + + Sets the invocation command for nm. + + Args: + nm_path: string. The path to the nm binary to run + + Returns: + No output - this step is run purely for its side-effect. + """ + self._nm_cmd = [nm_path] + + def output_toc(self, tocname): + """Linker driver action for -Wcrl,tocname,. + + Produce *.TOC from linker output. + + TODO(ukai): recursively collect symbols from all 'LC_REEXPORT_DYLIB'- + exported modules and present them all in the TOC, and + drop self._reexport_in_old_module. + + Args: + tocname: string, The path to *.TOC file. + Returns: + list of string, TOC file as output. + """ + new_toc = self._extract_toc() + old_toc = None + if not self._reexport_in_old_module: + try: + with open(tocname, 'rb') as f: + old_toc = f.read() + except OSError: + pass + + if self._reexport_in_old_module or new_toc != old_toc: + # TODO: use delete_on_close in python 3.12 or later. + with tempfile.NamedTemporaryFile(prefix=tocname + '.', + dir='.', + delete=False) as f: + f.write(new_toc) + f.close() + os.rename(f.name, tocname) + return [tocname] + + def _extract_toc(self): + """Extract TOC from linker output. + + Returns: + output contents in bytes. + """ + toc = b'' + dylib = self._get_linker_output() + out = subprocess.check_output(self._otool_cmd + ['-l', dylib]) + lines = out.split(b'\n') + found_id = False + for i, line in enumerate(lines): + # Too many LC_ID_DYLIBs? We didn’t understand something about + # the otool output. Raise an exception and die, rather than + # proceeding. + + # Not any LC_ID_DYLIBs? Probably not an MH_DYLIB. Probably fine, we + # can proceed with ID-less TOC generation. + if line == b' cmd LC_ID_DYLIB': + if found_id: + raise ValueError('Too many LC_ID_DYLIBs in %s' % dylib) + toc += line + b'\n' + for j in range(5): + toc += lines[i + 1 + j] + b'\n' + found_id = True + + # -U ignores undefined symbols + # -g display only global (external) symbols + # -p unsorted https://crrev.com/c/2173969 + out = subprocess.check_output(self._nm_cmd + ['-Ugp', dylib]) + lines = out.split(b'\n') + for line in lines: + fields = line.split(b' ', 2) + if len(fields) < 3: + continue + # fields = (value, type, name) + # emit [type, name] + toc += b' '.join(fields[1:3]) + b'\n' + return toc def _find_tools_paths(full_args): diff --git a/naiveproxy/src/build/toolchain/apple/toolchain.gni b/naiveproxy/src/build/toolchain/apple/toolchain.gni index 9d8583fbad..3521ba1c40 100644 --- a/naiveproxy/src/build/toolchain/apple/toolchain.gni +++ b/naiveproxy/src/build/toolchain/apple/toolchain.gni @@ -479,7 +479,6 @@ template("single_apple_toolchain") { # libraries, we always update the .TOC and skip the temporary file and # diffing steps, since that library always needs to be re-linked. tocname = dylib + ".TOC" - temporary_tocname = dylib + ".tmp" # Use explicit paths to binaries. The binaries present on the default # search path in /usr/bin are thin wrappers around xcrun, which requires a @@ -493,20 +492,17 @@ template("single_apple_toolchain") { otool = "${prefix}llvm-otool" } - does_reexport_command = "[ ! -e \"$dylib\" -o ! -e \"$tocname\" ] || $otool -l \"$dylib\" | grep -q LC_REEXPORT_DYLIB" - - link_command = - "$linker_driver_env $linker_driver $linker_driver_args -shared " + link_command = "$linker_driver_env $linker_driver" + link_command += " -Wcrl,otoolpath,$otool -Wcrl,nmpath,$nm" + link_command += " -Wcrl,tocname,\"$tocname\"" + link_command += " $linker_driver_args -shared " if (toolchain_is_component_build) { link_command += " -Wl,-install_name,@rpath/\"{{target_output_name}}{{output_extension}}\" " } link_command += dsym_switch link_command += "{{ldflags}} -o \"$dylib\" \"@$rspfile\" {{rlibs}}" - replace_command = "if ! cmp -s \"$temporary_tocname\" \"$tocname\"; then mv \"$temporary_tocname\" \"$tocname\"" - extract_toc_command = "{ $otool -l \"$dylib\" | grep LC_ID_DYLIB -A 5; $nm -gPp \"$dylib\" | cut -f1-2 -d' ' | grep -v U\$\$; true; }" - - command = "if $does_reexport_command ; then $link_command && $extract_toc_command > \"$tocname\"; else $link_command && $extract_toc_command > \"$temporary_tocname\" && $replace_command ; fi; fi" + command = "$link_command" rspfile_content = "{{inputs}} {{frameworks}} {{swiftmodules}} {{solibs}} {{libs}}" diff --git a/naiveproxy/src/build/toolchain/toolchain.gni b/naiveproxy/src/build/toolchain/toolchain.gni index 4e18accf1f..e313f5e339 100644 --- a/naiveproxy/src/build/toolchain/toolchain.gni +++ b/naiveproxy/src/build/toolchain/toolchain.gni @@ -50,7 +50,10 @@ if (generate_linker_map) { declare_args() { if (llvm_android_mainline) { # https://crbug.com/1481060 clang_version = "17" + } else if (llvm_force_head_revision) { + clang_version = "21" } else { + # TODO(crbug.com/392929930): Remove in the next Clang roll. clang_version = "20" } } diff --git a/naiveproxy/src/build/toolchain/use_reclient_value.py b/naiveproxy/src/build/toolchain/use_reclient_value.py index 1284f16b7f..ff6cf55a87 100755 --- a/naiveproxy/src/build/toolchain/use_reclient_value.py +++ b/naiveproxy/src/build/toolchain/use_reclient_value.py @@ -14,35 +14,18 @@ import sys sys.path.insert(0, os.path.join(os.path.dirname(__file__))) import use_siso_default -# instead of finding depot_tools in PATH, -# just use pinned third_party/depot_tools. -sys.path.insert( - 0, - os.path.join(os.path.dirname(__file__), "..", "..", "third_party", - "depot_tools")) -import gn_helper - - -def _gn_bool(value): - if value == "true": - return True - if value == "false": - return False - raise Exception("invalid bool value %s" % value) - +sys.path.insert(0, os.path.join(os.path.dirname(__file__), os.path.pardir)) +import gn_helpers def use_reclient_value(output_dir): """Returns use_reclient value.""" use_remoteexec = None use_reclient = None use_siso = use_siso_default.use_siso_default(output_dir) - for k, v in gn_helper.args(output_dir): - if k == "use_remoteexec": - use_remoteexec = _gn_bool(v) - if k == "use_reclient": - use_reclient = _gn_bool(v) - if k == "use_siso": - use_siso = _gn_bool(v) + args = gn_helpers.ReadArgsGN(output_dir) + use_remoteexec = args.get('use_remoteexec', False) + use_reclient = args.get('use_reclient') + use_siso = args.get('use_siso', use_siso) # If args.gn has use_reclient, use it. if use_reclient is not None: return use_reclient diff --git a/naiveproxy/src/build/toolchain/use_remoteexec_value.py b/naiveproxy/src/build/toolchain/use_remoteexec_value.py index 33d0ba606e..1fba7b5b14 100755 --- a/naiveproxy/src/build/toolchain/use_remoteexec_value.py +++ b/naiveproxy/src/build/toolchain/use_remoteexec_value.py @@ -11,39 +11,13 @@ or used in depot_tools' autoninja or siso wrapper. import os import sys -sys.path.insert(0, os.path.join(os.path.dirname(__file__))) -import use_siso_default - -# instead of finding depot_tools in PATH, -# just use pinned third_party/depot_tools. -sys.path.insert( - 0, - os.path.join(os.path.dirname(__file__), "..", "..", "third_party", - "depot_tools")) -import gn_helper - - -def _gn_bool(value): - if value == "true": - return True - if value == "false": - return False - raise Exception("invalid bool value %s" % value) - +sys.path.insert(0, os.path.join(os.path.dirname(__file__), os.path.pardir)) +import gn_helpers def use_remoteexec_value(output_dir): """Returns use_remoteexec value.""" - use_remoteexec = None - for k, v in gn_helper.args(output_dir): - if k == "use_remoteexec": - use_remoteexec = _gn_bool(v) - # If args.gn has use_remoteexec, use it. - if use_remoteexec is not None: - return use_remoteexec - # TODO(crbug.com/341167943): Use remoteexec by default. - return False - + return gn_helpers.ReadArgsGN(output_dir).get("use_remoteexec", False) if __name__ == "__main__": # exec_script runs in output directory. diff --git a/naiveproxy/src/build/toolchain/use_siso_default.py b/naiveproxy/src/build/toolchain/use_siso_default.py index 5d115bb6f5..10db7fa3f4 100755 --- a/naiveproxy/src/build/toolchain/use_siso_default.py +++ b/naiveproxy/src/build/toolchain/use_siso_default.py @@ -4,8 +4,8 @@ # found in the LICENSE file. """Script to decide use_siso default value. -It is called by siso.gni via exec_script, -or used in depot_tools' autoninja or siso wrapper. +`use_siso_default` is called by siso.gni via exec_script, and +`use_siso_default_and_suggest_siso` is called by autoninja in depot_tools. """ # TODO(crbug.com/379584977): move this to depot_tools once `use_siso` # is not used for build graph. @@ -14,22 +14,16 @@ import os import shutil import sys +_SISO_SUGGESTION = """Please run 'gn clean {output_dir}' when convenient to upgrade this output directory to Siso (Chromium’s Ninja replacement). If you run into any issues, please file a bug via go/siso-bug and switch back temporarily by setting the GN arg 'use_siso = false'""" + def _is_google_corp_machine(): """This assumes that corp machine has gcert binary in known location.""" return shutil.which("gcert") is not None -def use_siso_default(output_dir): - """Returns use_siso default value.""" - # This output directory is already using Siso. - if os.path.exists(os.path.join(output_dir, ".siso_deps")): - return True - - # This output directory is already using Ninja. - if os.path.exists(os.path.join(output_dir, ".ninja_deps")): - return False - +def _siso_supported(output_dir): + """Returns whether siso is supported for the current scenario.""" # If no .sisoenv, use Ninja. if not os.path.exists( os.path.join(os.path.dirname(__file__), "../config/siso/.sisoenv")): @@ -55,6 +49,28 @@ def use_siso_default(output_dir): return False +def use_siso_default(output_dir, suggest_siso=False): + """Returns use_siso default value.""" + if not _siso_supported(output_dir): + return False + + # This output directory is already using Siso. + if os.path.exists(os.path.join(output_dir, ".siso_deps")): + return True + + # This output directory is still using Ninja. + if os.path.exists(os.path.join(output_dir, ".ninja_deps")): + if suggest_siso: + print(_SISO_SUGGESTION.format(output_dir=output_dir), file=sys.stderr) + return False + + return True + +def use_siso_default_and_suggest_siso(output_dir): + """Returns use_siso default value and suggests to use siso.""" + return use_siso_default(output_dir, suggest_siso = True) + + if __name__ == "__main__": # exec_script runs in output directory. print(str(use_siso_default(".")).lower()) diff --git a/naiveproxy/src/build/util/LASTCHANGE b/naiveproxy/src/build/util/LASTCHANGE index 13fac097ed..57c72dbb78 100644 --- a/naiveproxy/src/build/util/LASTCHANGE +++ b/naiveproxy/src/build/util/LASTCHANGE @@ -1,2 +1,2 @@ -LASTCHANGE=2c6eb8e0ad4fc118077dd42b7c3efbcf2ab61d24-refs/branch-heads/6943@{#1380} +LASTCHANGE=ce04a62809fedca5f5800c8b8252f0044a7a2da1-refs/branch-heads/6998@{#1478} LASTCHANGE_YEAR=2025 diff --git a/naiveproxy/src/build/util/LASTCHANGE.committime b/naiveproxy/src/build/util/LASTCHANGE.committime index cf1d8dffe7..e3c0089248 100644 --- a/naiveproxy/src/build/util/LASTCHANGE.committime +++ b/naiveproxy/src/build/util/LASTCHANGE.committime @@ -1 +1 @@ -1738604772 \ No newline at end of file +1740516609 \ No newline at end of file diff --git a/naiveproxy/src/build/whitespace_file.txt b/naiveproxy/src/build/whitespace_file.txt index 7a51762ae3..93996e9f80 100644 --- a/naiveproxy/src/build/whitespace_file.txt +++ b/naiveproxy/src/build/whitespace_file.txt @@ -230,3 +230,5 @@ which allows it to serve as a bridge of sorts for people of different cultures. New :) The longest word in English with only one vowel is "strengths." + +Adding more non whitespace. diff --git a/naiveproxy/src/buildtools/deps_revisions.gni b/naiveproxy/src/buildtools/deps_revisions.gni index a7d53e89a1..2ef8353f94 100644 --- a/naiveproxy/src/buildtools/deps_revisions.gni +++ b/naiveproxy/src/buildtools/deps_revisions.gni @@ -5,5 +5,5 @@ declare_args() { # Used to cause full rebuilds on libc++ rolls. This should be kept in sync # with the libcxx_revision var in //DEPS. - libcxx_revision = "1f7db7501cf902d5d3ad5fd9b31bea33bb8bf9da" + libcxx_revision = "2e25154d49c29fa9aa42c30ad4a027bd30123434" } diff --git a/naiveproxy/src/chrome/VERSION b/naiveproxy/src/chrome/VERSION index 7d9f935b17..d2b9572db8 100644 --- a/naiveproxy/src/chrome/VERSION +++ b/naiveproxy/src/chrome/VERSION @@ -1,4 +1,4 @@ -MAJOR=133 +MAJOR=134 MINOR=0 -BUILD=6943 -PATCH=49 +BUILD=6998 +PATCH=39 diff --git a/naiveproxy/src/chrome/android/profiles/newest.txt b/naiveproxy/src/chrome/android/profiles/newest.txt index 09456d2723..ef59e54eae 100644 --- a/naiveproxy/src/chrome/android/profiles/newest.txt +++ b/naiveproxy/src/chrome/android/profiles/newest.txt @@ -1 +1 @@ -chromeos-chrome-amd64-133.0.6943.48_rc-r1-merged.afdo.bz2 +chromeos-chrome-amd64-134.0.6971.0_rc-r1-merged.afdo.bz2 diff --git a/naiveproxy/src/chrome/build/android-arm32.pgo.txt b/naiveproxy/src/chrome/build/android-arm32.pgo.txt index 00b08f32d1..b2fa5a39e3 100644 --- a/naiveproxy/src/chrome/build/android-arm32.pgo.txt +++ b/naiveproxy/src/chrome/build/android-arm32.pgo.txt @@ -1 +1 @@ -chrome-android32-main-1736207974-9403999c51e28672dd9adf462e32c386a1941775-af4ba91a321f05ca255d879c0b3f1d78b123ad44.profdata +chrome-android32-main-1738627109-283fb3ec46398cba73de687ec7c59e70c99302bf-212daadf87e8359f54932fbe56a2338e7825efc5.profdata diff --git a/naiveproxy/src/chrome/build/android-arm64.pgo.txt b/naiveproxy/src/chrome/build/android-arm64.pgo.txt index 8bb4e5357e..9467bdf396 100644 --- a/naiveproxy/src/chrome/build/android-arm64.pgo.txt +++ b/naiveproxy/src/chrome/build/android-arm64.pgo.txt @@ -1 +1 @@ -chrome-android64-6943-1738595254-56803cdffb59e0593578c30dd68c468b211767ca-40619281b7e4bc1687d8f17684afea665f8fe181.profdata +chrome-android64-6998-1740504838-47a4781cea22005770e857a0a553b0ea8e935fb9-3199264f1b9d2b6785a12312fb1dde786c7cffea.profdata diff --git a/naiveproxy/src/chrome/build/linux.pgo.txt b/naiveproxy/src/chrome/build/linux.pgo.txt index 5f039b9897..63409548c6 100644 --- a/naiveproxy/src/chrome/build/linux.pgo.txt +++ b/naiveproxy/src/chrome/build/linux.pgo.txt @@ -1 +1 @@ -chrome-linux-6943-1738539685-8a4fa01b9f94909fb8f8c7e665286160c8d4fd20-1a553c683a339149e06ef9c42174c1b041f209f1.profdata +chrome-linux-6998-1740504838-d674c0736f2395257e3218be5f686d4659c91386-3199264f1b9d2b6785a12312fb1dde786c7cffea.profdata diff --git a/naiveproxy/src/chrome/build/mac-arm.pgo.txt b/naiveproxy/src/chrome/build/mac-arm.pgo.txt index ceb27c3801..7ef7e276f3 100644 --- a/naiveproxy/src/chrome/build/mac-arm.pgo.txt +++ b/naiveproxy/src/chrome/build/mac-arm.pgo.txt @@ -1 +1 @@ -chrome-mac-arm-6943-1738598191-aa144277707b445a1078446e0f110ce3d368d24c-f28c7e798aa8adc61bfaa7a338787d1232ed7dd7.profdata +chrome-mac-arm-6998-1740513316-7dd995e053fe65ad11c5b87aeacb2a6dcb522561-ea6ef4c2ac15ae95d2cfd65682da62c093415099.profdata diff --git a/naiveproxy/src/chrome/build/mac.pgo.txt b/naiveproxy/src/chrome/build/mac.pgo.txt index f88f9afe98..6d257370a0 100644 --- a/naiveproxy/src/chrome/build/mac.pgo.txt +++ b/naiveproxy/src/chrome/build/mac.pgo.txt @@ -1 +1 @@ -chrome-mac-6943-1738583734-165b1ecbb94b5cf9bcf06a0e73fe33ee4fac824f-4989d63f629052c8fb3dd4fa09e9eb6b03bc048e.profdata +chrome-mac-6998-1740484393-2bd6374a291d89a553417c9e05df3abb37d1758f-7f86ca29d203b5862a7d0e2823afabb57f84f66f.profdata diff --git a/naiveproxy/src/chrome/build/win-arm64.pgo.txt b/naiveproxy/src/chrome/build/win-arm64.pgo.txt index 9856b56400..453940565f 100644 --- a/naiveproxy/src/chrome/build/win-arm64.pgo.txt +++ b/naiveproxy/src/chrome/build/win-arm64.pgo.txt @@ -1 +1 @@ -chrome-win-arm64-main-1736207974-13a7a4f62fa5e67d31ba1283a11ad93955e5d5b8-af4ba91a321f05ca255d879c0b3f1d78b123ad44.profdata +chrome-win-arm64-main-1738627109-377e5cb2d369d08177f405b1f7bb6d66aa9487c2-212daadf87e8359f54932fbe56a2338e7825efc5.profdata diff --git a/naiveproxy/src/chrome/build/win32.pgo.txt b/naiveproxy/src/chrome/build/win32.pgo.txt index a1bbd1612a..d1f9d70160 100644 --- a/naiveproxy/src/chrome/build/win32.pgo.txt +++ b/naiveproxy/src/chrome/build/win32.pgo.txt @@ -1 +1 @@ -chrome-win32-6943-1738583734-c616a5e91da73d1c9e06454ce057ca41f98e5470-4989d63f629052c8fb3dd4fa09e9eb6b03bc048e.profdata +chrome-win32-6998-1740052255-9ec7b4fbd5ddd37388cfad21b00e20583b929df5-fad58b5ab918c82c42a609bb5f3f93b233eacb11.profdata diff --git a/naiveproxy/src/chrome/build/win64.pgo.txt b/naiveproxy/src/chrome/build/win64.pgo.txt index aea2fd176e..b0ce0e6e09 100644 --- a/naiveproxy/src/chrome/build/win64.pgo.txt +++ b/naiveproxy/src/chrome/build/win64.pgo.txt @@ -1 +1 @@ -chrome-win64-6943-1738559309-b34047c2d27a4cda29e170dd17a4b18a31395a69-2e17619ec72262df73c63996748046a2e2fdc8c3.profdata +chrome-win64-6998-1740484393-6007b6990106fb5edb6db0e78f1e798d94e9ef49-7f86ca29d203b5862a7d0e2823afabb57f84f66f.profdata diff --git a/naiveproxy/src/components/miracle_parameter/common/public/miracle_parameter.h b/naiveproxy/src/components/miracle_parameter/common/public/miracle_parameter.h index 8df3760287..ef92298621 100644 --- a/naiveproxy/src/components/miracle_parameter/common/public/miracle_parameter.h +++ b/naiveproxy/src/components/miracle_parameter/common/public/miracle_parameter.h @@ -12,34 +12,6 @@ namespace miracle_parameter { -namespace { - -template -Enum GetFieldTrialParamByFeatureAsEnum( - const base::Feature& feature, - const std::string& param_name, - const Enum default_value, - const base::span::Option>& - options) { - std::string string_value = - base::GetFieldTrialParamValueByFeature(feature, param_name); - if (string_value.empty()) { - return default_value; - } - - for (const auto& option : options) { - if (string_value == option.name) { - return option.value; - } - } - - base::LogInvalidEnumValue(feature, param_name, string_value, - static_cast(default_value)); - return default_value; -} - -} // namespace - constexpr int kMiracleParameterMemory512MB = 512; constexpr int kMiracleParameterMemory1GB = 1024; constexpr int kMiracleParameterMemory2GB = 2 * 1024; diff --git a/naiveproxy/src/crypto/openssl_util.h b/naiveproxy/src/crypto/openssl_util.h index 4b76ae36ad..f1a95e64fc 100644 --- a/naiveproxy/src/crypto/openssl_util.h +++ b/naiveproxy/src/crypto/openssl_util.h @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #ifndef CRYPTO_OPENSSL_UTIL_H_ #define CRYPTO_OPENSSL_UTIL_H_ diff --git a/naiveproxy/src/crypto/scoped_capi_types.h b/naiveproxy/src/crypto/scoped_capi_types.h index 6ce36e9eeb..d736f69ebb 100644 --- a/naiveproxy/src/crypto/scoped_capi_types.h +++ b/naiveproxy/src/crypto/scoped_capi_types.h @@ -5,13 +5,12 @@ #ifndef CRYPTO_SCOPED_CAPI_TYPES_H_ #define CRYPTO_SCOPED_CAPI_TYPES_H_ -#include - #include #include "base/check.h" #include "base/scoped_generic.h" #include "base/win/wincrypt_shim.h" +#include "base/win/windows_types.h" namespace crypto { diff --git a/naiveproxy/src/crypto/secure_hash.cc b/naiveproxy/src/crypto/secure_hash.cc index 38f91fc205..dd58ccdee5 100644 --- a/naiveproxy/src/crypto/secure_hash.cc +++ b/naiveproxy/src/crypto/secure_hash.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "crypto/secure_hash.h" #include diff --git a/naiveproxy/src/crypto/subtle_passkey.h b/naiveproxy/src/crypto/subtle_passkey.h index ab28bd2074..51439351d4 100644 --- a/naiveproxy/src/crypto/subtle_passkey.h +++ b/naiveproxy/src/crypto/subtle_passkey.h @@ -23,6 +23,10 @@ namespace chromeos::onc { crypto::SubtlePassKey MakeCryptoPassKey(); } +namespace os_crypt_async { +class FreedesktopSecretKeyProvider; +} + class OSCryptImpl; namespace crypto { @@ -57,9 +61,10 @@ class CRYPTO_EXPORT SubtlePassKey final { // arbitrary (possibly attacker-supplied) PBKDF2 parameters. friend SubtlePassKey chromeos::onc::MakeCryptoPassKey(); - // This class uses custom PBKDF2 parameters and has to keep doing so for + // These classes use custom PBKDF2 parameters and have to keep doing so for // compatibility with existing persisted data. friend class ::OSCryptImpl; + friend class os_crypt_async::FreedesktopSecretKeyProvider; }; } // namespace crypto diff --git a/naiveproxy/src/crypto/unexportable_key_metrics.cc b/naiveproxy/src/crypto/unexportable_key_metrics.cc index 1c80cebe26..5144c7c957 100644 --- a/naiveproxy/src/crypto/unexportable_key_metrics.cc +++ b/naiveproxy/src/crypto/unexportable_key_metrics.cc @@ -287,6 +287,8 @@ std::string OperationToString(TPMOperation operation) { return "NewKeyCreation"; case TPMOperation::kWrappedKeyCreation: return "WrappedKeyCreation"; + case TPMOperation::kWrappedKeyExport: + return "WrappedKeyExport"; } } diff --git a/naiveproxy/src/crypto/unexportable_key_metrics.h b/naiveproxy/src/crypto/unexportable_key_metrics.h index f0a7df5896..f8939d97e5 100644 --- a/naiveproxy/src/crypto/unexportable_key_metrics.h +++ b/naiveproxy/src/crypto/unexportable_key_metrics.h @@ -13,10 +13,18 @@ namespace crypto { enum class TPMOperation { + // An operation to sign data with a TPM key. kMessageSigning, + // An operation to verify a TPM signature. kMessageVerify, + // An operation to create a TPM key from a wrapped key or a similar + // representation identifying a TPM key. kWrappedKeyCreation, + // An operation to create a new TPM-protected key. kNewKeyCreation, + // An operation to export a wrapped key (or a similar representation + // identifying a TPM key) from an existing TPM key. + kWrappedKeyExport, }; // Converts the given `operation` to a string representation. diff --git a/naiveproxy/src/crypto/unexportable_key_win.cc b/naiveproxy/src/crypto/unexportable_key_win.cc index c8e9bf845f..26757d1622 100644 --- a/naiveproxy/src/crypto/unexportable_key_win.cc +++ b/naiveproxy/src/crypto/unexportable_key_win.cc @@ -54,13 +54,19 @@ const char kMetricVirtualOpenStorageError[] = void LogTPMOperationError( TPMOperation operation, SECURITY_STATUS status, - SignatureVerifier::SignatureAlgorithm selected_algorithm) { + std::optional selected_algorithm) { static constexpr char kCreateKeyErrorStatusHistogramFormat[] = "Crypto.TPMOperation.Win.%s%s.Error"; + // Only `kWrappedKeyCreation` could and should be recorded without + // `selected_algorithm`. + CHECK_EQ(!selected_algorithm.has_value(), + operation == TPMOperation::kWrappedKeyCreation); + std::string algorithm_string = + selected_algorithm ? AlgorithmToString(*selected_algorithm) : ""; base::UmaHistogramSparse( base::StringPrintf(kCreateKeyErrorStatusHistogramFormat, OperationToString(operation).c_str(), - AlgorithmToString(selected_algorithm).c_str()), + algorithm_string.c_str()), status); } @@ -456,7 +462,7 @@ class UnexportableKeyProviderWin : public UnexportableKeyProvider { /*dwLegacyKeySpec=*/0, /*dwFlags=*/0); if (FAILED(creation_status)) { LogTPMOperationError(TPMOperation::kNewKeyCreation, creation_status, - algo.value()); + algo); return nullptr; } @@ -468,8 +474,8 @@ class UnexportableKeyProviderWin : public UnexportableKeyProvider { const base::expected, SECURITY_STATUS> wrapped_key = ExportKey(key.get(), BCRYPT_OPAQUE_KEY_BLOB); if (!wrapped_key.has_value()) { - LogTPMOperationError(TPMOperation::kWrappedKeyCreation, - wrapped_key.error(), algo.value()); + LogTPMOperationError(TPMOperation::kWrappedKeyExport, wrapped_key.error(), + algo); return nullptr; } @@ -807,11 +813,14 @@ bool LoadWrappedTPMKey(base::span wrapped, return false; } - if (FAILED(NCryptImportKey( - provider.get(), /*hImportKey=*/NULL, BCRYPT_OPAQUE_KEY_BLOB, - /*pParameterList=*/nullptr, ScopedNCryptKey::Receiver(key).get(), - const_cast(wrapped.data()), wrapped.size(), - /*dwFlags=*/NCRYPT_SILENT_FLAG))) { + SECURITY_STATUS import_status = NCryptImportKey( + provider.get(), /*hImportKey=*/NULL, BCRYPT_OPAQUE_KEY_BLOB, + /*pParameterList=*/nullptr, ScopedNCryptKey::Receiver(key).get(), + const_cast(wrapped.data()), wrapped.size(), + /*dwFlags=*/NCRYPT_SILENT_FLAG); + if (FAILED(import_status)) { + LogTPMOperationError(TPMOperation::kWrappedKeyCreation, import_status, + std::nullopt); return false; } return true; diff --git a/naiveproxy/src/net/BUILD.gn b/naiveproxy/src/net/BUILD.gn index b67204ef8b..03c0f60313 100644 --- a/naiveproxy/src/net/BUILD.gn +++ b/naiveproxy/src/net/BUILD.gn @@ -429,6 +429,10 @@ component("net") { "cookies/site_for_cookies.h", "cookies/static_cookie_policy.cc", "cookies/static_cookie_policy.h", + "cookies/unique_cookie_key.cc", + "cookies/unique_cookie_key.h", + "device_bound_sessions/session_access.cc", + "device_bound_sessions/session_access.h", "device_bound_sessions/session_key.cc", "device_bound_sessions/session_key.h", "disk_cache/backend_cleanup_tracker.cc", @@ -651,6 +655,8 @@ component("net") { "http/http_stream_pool.h", "http/http_stream_pool_attempt_manager.cc", "http/http_stream_pool_attempt_manager.h", + "http/http_stream_pool_attempt_manager_quic_task.cc", + "http/http_stream_pool_attempt_manager_quic_task.h", "http/http_stream_pool_group.cc", "http/http_stream_pool_group.h", "http/http_stream_pool_handle.cc", @@ -659,8 +665,6 @@ component("net") { "http/http_stream_pool_job.h", "http/http_stream_pool_job_controller.cc", "http/http_stream_pool_job_controller.h", - "http/http_stream_pool_quic_task.cc", - "http/http_stream_pool_quic_task.h", "http/http_stream_pool_request_info.cc", "http/http_stream_pool_request_info.h", "http/http_stream_request.cc", @@ -672,6 +676,8 @@ component("net") { "http/http_vary_data.cc", "http/http_vary_data.h", "http/http_version.h", + "http/no_vary_search_cache.cc", + "http/no_vary_search_cache.h", "http/partial_data.cc", "http/partial_data.h", "http/proxy_client_socket.cc", diff --git a/naiveproxy/src/net/android/BUILD.gn b/naiveproxy/src/net/android/BUILD.gn index 7331c0abcb..34fd90b567 100644 --- a/naiveproxy/src/net/android/BUILD.gn +++ b/naiveproxy/src/net/android/BUILD.gn @@ -21,6 +21,7 @@ android_library("net_java") { "java/src/org/chromium/net/MimeTypeFilter.java", "java/src/org/chromium/net/NetStringUtil.java", "java/src/org/chromium/net/NetworkActiveNotifier.java", + "java/src/org/chromium/net/NetworkCapabilitiesWrapper.java", "java/src/org/chromium/net/NetworkChangeNotifier.java", "java/src/org/chromium/net/NetworkChangeNotifierAutoDetect.java", "java/src/org/chromium/net/NetworkTrafficAnnotationTag.java", @@ -33,11 +34,14 @@ android_library("net_java") { deps = [ ":net_thread_stats_uid_java", "//base:base_java", + "//base:flagged_apis_java", + "//base:service_loader_java", "//build/android:build_java", "//third_party/android_deps:com_google_code_findbugs_jsr305_java", "//third_party/androidx:androidx_annotation_annotation_java", "//third_party/jni_zero:jni_zero_java", ] + srcjar_deps = [ ":net_android_java_enums_srcjar", ":net_errors_java", diff --git a/naiveproxy/src/net/android/network_change_notifier_delegate_android.cc b/naiveproxy/src/net/android/network_change_notifier_delegate_android.cc index 16141d6b34..75a9dcc4e9 100644 --- a/naiveproxy/src/net/android/network_change_notifier_delegate_android.cc +++ b/naiveproxy/src/net/android/network_change_notifier_delegate_android.cc @@ -86,6 +86,11 @@ void NetworkChangeNotifierDelegateAndroid::JavaLongArrayToNetworkMap( } NetworkChangeNotifierDelegateAndroid::NetworkChangeNotifierDelegateAndroid() + : NetworkChangeNotifierDelegateAndroid(ForceUpdateNetworkState::kEnabled) {} + +NetworkChangeNotifierDelegateAndroid::NetworkChangeNotifierDelegateAndroid( + net::NetworkChangeNotifierDelegateAndroid::ForceUpdateNetworkState + force_update_network_state) : java_network_change_notifier_(Java_NetworkChangeNotifier_init( base::android::AttachCurrentThread())), register_network_callback_failed_( @@ -103,7 +108,8 @@ NetworkChangeNotifierDelegateAndroid::NetworkChangeNotifierDelegateAndroid() env, java_network_change_notifier_))); auto connection_subtype = ConvertConnectionSubtype( Java_NetworkChangeNotifier_getCurrentConnectionSubtype( - env, java_network_change_notifier_)); + env, java_network_change_notifier_, + force_update_network_state == ForceUpdateNetworkState::kEnabled)); SetCurrentConnectionSubtype(connection_subtype); SetCurrentMaxBandwidth( NetworkChangeNotifierAndroid::GetMaxBandwidthMbpsForConnectionSubtype( @@ -146,14 +152,8 @@ NetworkChangeNotifierDelegateAndroid::GetCurrentConnectionCost() { NetworkChangeNotifier::ConnectionSubtype NetworkChangeNotifierDelegateAndroid::GetCurrentConnectionSubtype() const { - if (base::FeatureList::IsEnabled(net::features::kStoreConnectionSubtype)) { base::AutoLock auto_lock(connection_lock_); return connection_subtype_; - } - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - return ConvertConnectionSubtype( - Java_NetworkChangeNotifier_getCurrentConnectionSubtype( - base::android::AttachCurrentThread(), java_network_change_notifier_)); } void NetworkChangeNotifierDelegateAndroid:: diff --git a/naiveproxy/src/net/android/network_change_notifier_delegate_android.h b/naiveproxy/src/net/android/network_change_notifier_delegate_android.h index 12b972e4de..cb100075df 100644 --- a/naiveproxy/src/net/android/network_change_notifier_delegate_android.h +++ b/naiveproxy/src/net/android/network_change_notifier_delegate_android.h @@ -31,6 +31,10 @@ class NET_EXPORT_PRIVATE NetworkChangeNotifierDelegateAndroid { typedef NetworkChangeNotifier::ConnectionSubtype ConnectionSubtype; typedef NetworkChangeNotifier::NetworkList NetworkList; + enum class ForceUpdateNetworkState { + kEnabled, + kDisabled, + }; // Observer interface implemented by NetworkChangeNotifierAndroid which // subscribes to network change notifications fired by the delegate (and // initiated by the Java side). @@ -61,6 +65,9 @@ class NET_EXPORT_PRIVATE NetworkChangeNotifierDelegateAndroid { // // Creates Java NetworkChangeNotifierAutoDetect class instance. // NetworkChangeNotifier.registerToReceiveNotificationsAlways(); NetworkChangeNotifierDelegateAndroid(); + explicit NetworkChangeNotifierDelegateAndroid( + net::NetworkChangeNotifierDelegateAndroid::ForceUpdateNetworkState + force_update_network_state); NetworkChangeNotifierDelegateAndroid( const NetworkChangeNotifierDelegateAndroid&) = delete; NetworkChangeNotifierDelegateAndroid& operator=( diff --git a/naiveproxy/src/net/android/network_change_notifier_factory_android.cc b/naiveproxy/src/net/android/network_change_notifier_factory_android.cc index fe2397904a..df6d6feb9b 100644 --- a/naiveproxy/src/net/android/network_change_notifier_factory_android.cc +++ b/naiveproxy/src/net/android/network_change_notifier_factory_android.cc @@ -6,11 +6,19 @@ #include "base/memory/ptr_util.h" #include "net/android/network_change_notifier_android.h" +#include "net/android/network_change_notifier_delegate_android.h" namespace net { -NetworkChangeNotifierFactoryAndroid::NetworkChangeNotifierFactoryAndroid() = - default; +NetworkChangeNotifierFactoryAndroid::NetworkChangeNotifierFactoryAndroid() + : NetworkChangeNotifierFactoryAndroid( + NetworkChangeNotifierDelegateAndroid::ForceUpdateNetworkState:: + kEnabled) {} + +NetworkChangeNotifierFactoryAndroid::NetworkChangeNotifierFactoryAndroid( + NetworkChangeNotifierDelegateAndroid::ForceUpdateNetworkState + force_update_network_state) + : delegate_(force_update_network_state) {} NetworkChangeNotifierFactoryAndroid::~NetworkChangeNotifierFactoryAndroid() = default; diff --git a/naiveproxy/src/net/android/network_change_notifier_factory_android.h b/naiveproxy/src/net/android/network_change_notifier_factory_android.h index c0ebaa7052..415c19d2e2 100644 --- a/naiveproxy/src/net/android/network_change_notifier_factory_android.h +++ b/naiveproxy/src/net/android/network_change_notifier_factory_android.h @@ -26,6 +26,11 @@ class NET_EXPORT NetworkChangeNotifierFactoryAndroid : // Must be called on the JNI thread. NetworkChangeNotifierFactoryAndroid(); + // Must be called on the JNI thread. + explicit NetworkChangeNotifierFactoryAndroid( + NetworkChangeNotifierDelegateAndroid::ForceUpdateNetworkState + force_update_network_state); + NetworkChangeNotifierFactoryAndroid( const NetworkChangeNotifierFactoryAndroid&) = delete; NetworkChangeNotifierFactoryAndroid& operator=( diff --git a/naiveproxy/src/net/android/network_library.cc b/naiveproxy/src/net/android/network_library.cc index b87bdc52b5..cea7a5c3ff 100644 --- a/naiveproxy/src/net/android/network_library.cc +++ b/naiveproxy/src/net/android/network_library.cc @@ -20,6 +20,7 @@ #include "base/strings/string_split.h" #include "base/strings/utf_string_conversions.h" #include "base/threading/scoped_blocking_call.h" +#include "net/base/features.h" #include "net/base/net_errors.h" #include "net/dns/public/dns_protocol.h" @@ -50,6 +51,8 @@ std::vector GetUserAddedRoots() { void VerifyX509CertChain(const std::vector& cert_chain, std::string_view auth_type, std::string_view host, + std::string_view ocsp_response, + std::string_view sct_list, CertVerifyStatusAndroid* status, bool* is_issued_by_known_root, std::vector* verified_chain) { @@ -67,9 +70,25 @@ void VerifyX509CertChain(const std::vector& cert_chain, ConvertUTF8ToJavaString(env, host); DCHECK(!host_string.is_null()); + ScopedJavaLocalRef ocsp_response_byte; + ScopedJavaLocalRef sct_list_byte; + if (base::FeatureList::IsEnabled( + features::kUseCertTransparencyAwareApiForOsCertVerify)) { + // We also don't want to pass down an empty OCSP response or SCT list array + // because the platform cert verifier expects null when there's no OCSP + // response or SCT list. + if (!ocsp_response.empty()) { + ocsp_response_byte = ToJavaByteArray(env, ocsp_response); + } + if (!sct_list.empty()) { + sct_list_byte = ToJavaByteArray(env, sct_list); + } + } + ScopedJavaLocalRef result = Java_AndroidNetworkLibrary_verifyServerCertificates( - env, chain_byte_array, auth_string, host_string); + env, chain_byte_array, auth_string, host_string, ocsp_response_byte, + sct_list_byte); ExtractCertVerifyResult(result, status, is_issued_by_known_root, verified_chain); diff --git a/naiveproxy/src/net/android/network_library.h b/naiveproxy/src/net/android/network_library.h index 37e42eeca8..6bd8e745e5 100644 --- a/naiveproxy/src/net/android/network_library.h +++ b/naiveproxy/src/net/android/network_library.h @@ -37,6 +37,8 @@ std::vector GetUserAddedRoots(); void VerifyX509CertChain(const std::vector& cert_chain, std::string_view auth_type, std::string_view host, + std::string_view ocsp_response, + std::string_view sct_list, CertVerifyStatusAndroid* status, bool* is_issued_by_known_root, std::vector* verified_chain); diff --git a/naiveproxy/src/net/base/SECURITY_OWNERS b/naiveproxy/src/net/base/SECURITY_OWNERS index 0d55df8190..7199aedf35 100644 --- a/naiveproxy/src/net/base/SECURITY_OWNERS +++ b/naiveproxy/src/net/base/SECURITY_OWNERS @@ -1,2 +1,2 @@ -rsleevi@chromium.org +bashi@chromium.org mmenke@chromium.org diff --git a/naiveproxy/src/net/base/address_tracker_linux.cc b/naiveproxy/src/net/base/address_tracker_linux.cc index 67e8894467..ad0391f2d9 100644 --- a/naiveproxy/src/net/base/address_tracker_linux.cc +++ b/naiveproxy/src/net/base/address_tracker_linux.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "net/base/address_tracker_linux.h" #include diff --git a/naiveproxy/src/net/base/data_url.cc b/naiveproxy/src/net/base/data_url.cc index d1e9cd68bd..df1e85c9c2 100644 --- a/naiveproxy/src/net/base/data_url.cc +++ b/naiveproxy/src/net/base/data_url.cc @@ -6,12 +6,12 @@ #include "net/base/data_url.h" +#include #include #include #include "base/base64.h" #include "base/command_line.h" -#include "base/ranges/algorithm.h" #include "base/strings/escape.h" #include "base/strings/string_split.h" #include "base/strings/string_util.h" @@ -50,7 +50,7 @@ bool IsBase64Whitespace(char c) { // - Does not have any escaped characters. // - Does not have any whitespace. bool IsDataURLReadyForDecode(std::string_view body) { - return (body.length() % 4) == 0 && base::ranges::none_of(body, [](char c) { + return (body.length() % 4) == 0 && std::ranges::none_of(body, [](char c) { return c == '%' || IsBase64Whitespace(c); }); } @@ -77,7 +77,7 @@ bool DataURL::Parse(const GURL& url, // Avoid copying the URL content which can be expensive for large URLs. std::string_view content = url.GetContentPiece(); - std::string_view::const_iterator comma = base::ranges::find(content, ','); + std::string_view::const_iterator comma = std::ranges::find(content, ','); if (comma == content.end()) return false; diff --git a/naiveproxy/src/net/base/datagram_buffer.cc b/naiveproxy/src/net/base/datagram_buffer.cc index 4b0446bdf2..a7e9ca771f 100644 --- a/naiveproxy/src/net/base/datagram_buffer.cc +++ b/naiveproxy/src/net/base/datagram_buffer.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "net/base/datagram_buffer.h" #include "base/memory/ptr_util.h" diff --git a/naiveproxy/src/net/base/features.cc b/naiveproxy/src/net/base/features.cc index 6ada9cc97b..fb4f185994 100644 --- a/naiveproxy/src/net/base/features.cc +++ b/naiveproxy/src/net/base/features.cc @@ -230,6 +230,10 @@ BASE_FEATURE(kRequestStorageAccessNoCorsRequired, "RequestStorageAccessNoCorsRequired", base::FEATURE_DISABLED_BY_DEFAULT); +BASE_FEATURE(kStorageAccessApiFollowsSameOriginPolicy, + "StorageAccessApiFollowsSameOriginPolicy", + base::FEATURE_DISABLED_BY_DEFAULT); + BASE_FEATURE(kStaticKeyPinningEnforcement, "StaticKeyPinningEnforcement", base::FEATURE_ENABLED_BY_DEFAULT); @@ -342,11 +346,20 @@ const base::FeatureParam kIpPrivacyTokenServer{ &kEnableIpProtectionProxy, /*name=*/"IpPrivacyTokenServer", /*default_value=*/"https://prod.ipprotectionauth.goog"}; +const base::FeatureParam kIpPrivacyIssuerTokenServer{ + &kEnableIpProtectionProxy, /*name=*/"IpPrivacyIssuerTokenServer", + /*default_value=*/"https://prod.issuertoken.goog"}; + const base::FeatureParam kIpPrivacyTokenServerGetInitialDataPath{ &kEnableIpProtectionProxy, /*name=*/"IpPrivacyTokenServerGetInitialDataPath", /*default_value=*/"/v1/ipblinding/getInitialData"}; +const base::FeatureParam kIpPrivacyIssuerTokenServerPath{ + &kEnableIpProtectionProxy, + /*name=*/"IpPrivacyIssuerTokenServerPath", + /*default_value=*/"/v1/ipblinding/getIssuerToken"}; + const base::FeatureParam kIpPrivacyTokenServerGetTokensPath{ &kEnableIpProtectionProxy, /*name=*/"IpPrivacyTokenServerGetTokensPath", /*default_value=*/"/v1/ipblinding/auth"}; @@ -502,6 +515,12 @@ BASE_FEATURE(kEnableSchemeBoundCookies, "EnableSchemeBoundCookies", base::FEATURE_DISABLED_BY_DEFAULT); +// Disallows cookies to have non ascii values in their name or value. +NET_EXPORT BASE_DECLARE_FEATURE(kDisallowNonAsciiCookies); +BASE_FEATURE(kDisallowNonAsciiCookies, + "kDisallowNonAsciiCookies", + base::FEATURE_DISABLED_BY_DEFAULT); + BASE_FEATURE(kTimeLimitedInsecureCookies, "TimeLimitedInsecureCookies", base::FEATURE_DISABLED_BY_DEFAULT); @@ -561,10 +580,6 @@ BASE_FEATURE(kPersistDeviceBoundSessions, "PersistDeviceBoundSessions", base::FEATURE_DISABLED_BY_DEFAULT); -BASE_FEATURE(kStoreConnectionSubtype, - "StoreConnectionSubtype", - base::FEATURE_ENABLED_BY_DEFAULT); - BASE_FEATURE(kPartitionProxyChains, "PartitionProxyChains", base::FEATURE_ENABLED_BY_DEFAULT); @@ -666,4 +681,24 @@ BASE_FEATURE(kHstsTopLevelNavigationsOnly, "HstsTopLevelNavigationsOnly", base::FEATURE_DISABLED_BY_DEFAULT); +BASE_FEATURE(kHttpCacheNoVarySearch, + "HttpCacheNoVarySearch", + base::FEATURE_DISABLED_BY_DEFAULT); + +BASE_FEATURE_PARAM(size_t, + kHttpCacheNoVarySearchCacheMaxEntries, + &kHttpCacheNoVarySearch, + "max_entries", + 1000); + +BASE_FEATURE(kReportingApiCorsOriginHeader, + "ReportingApiCorsOriginHeader", + base::FEATURE_ENABLED_BY_DEFAULT); + +#if BUILDFLAG(IS_ANDROID) +BASE_FEATURE(kUseCertTransparencyAwareApiForOsCertVerify, + "UseCertTransparencyAwareApiForOsCertVerify", + base::FEATURE_ENABLED_BY_DEFAULT); +#endif // BUILDFLAG(IS_ANDROID) + } // namespace net::features diff --git a/naiveproxy/src/net/base/features.h b/naiveproxy/src/net/base/features.h index cca2fa45a6..b6f3b42242 100644 --- a/naiveproxy/src/net/base/features.h +++ b/naiveproxy/src/net/base/features.h @@ -5,6 +5,8 @@ #ifndef NET_BASE_FEATURES_H_ #define NET_BASE_FEATURES_H_ +#include + #include #include @@ -298,6 +300,13 @@ NET_EXPORT BASE_DECLARE_FEATURE(kAncestorChainBitEnabledInPartitionedCookies); // requests allowed because of requestStorageAccessFor instead of cors. NET_EXPORT BASE_DECLARE_FEATURE(kRequestStorageAccessNoCorsRequired); +// When enabled, the Storage Access API follows the Same Origin Policy when +// including cookies on network requests. (I.e., a cross-site cookie is only +// included via the Storage Access API if the request's URL's origin [not site] +// has opted into receiving cross-site cookies.) +NET_EXPORT +BASE_DECLARE_FEATURE(kStorageAccessApiFollowsSameOriginPolicy); + // Controls whether static key pinning is enforced. NET_EXPORT BASE_DECLARE_FEATURE(kStaticKeyPinningEnforcement); @@ -375,11 +384,17 @@ NET_EXPORT BASE_DECLARE_FEATURE(kEnableIpProtectionProxy); // Sets the name of the IP protection auth token server. NET_EXPORT extern const base::FeatureParam kIpPrivacyTokenServer; +NET_EXPORT extern const base::FeatureParam + kIpPrivacyIssuerTokenServer; + // Sets the path component of the IP protection auth token server URL used for // getting initial token signing data. NET_EXPORT extern const base::FeatureParam kIpPrivacyTokenServerGetInitialDataPath; +NET_EXPORT extern const base::FeatureParam + kIpPrivacyIssuerTokenServerPath; + // Sets the path component of the IP protection auth token server URL used for // getting blind-signed tokens. NET_EXPORT extern const base::FeatureParam @@ -509,9 +524,11 @@ NET_EXPORT extern const base::FeatureParam kIpPrivacyCacheTokensByGeo; // protection. NET_EXPORT extern const base::FeatureParam kIpPrivacyAlwaysCreateCore; -// Enables IP protection incognito mode. The default value of this feature is -// false which maintains existing behavior by default. When set to true, the -// main profile Network Context won't proxy traffic using IP Protection. +// Enables IP protection in incognito mode only. The default value of this +// feature is false, which maintains the existing behavior when +// `kEnableIpProtectionProxy` is enabled, IPP is enabled in both regular and +// incognito browsing sessions. When set to true, the main profile Network +// Context won't proxy traffic using IP Protection. NET_EXPORT extern const base::FeatureParam kIpPrivacyOnlyInIncognito; // Whether QuicParams::migrate_sessions_on_network_change_v2 defaults to true or @@ -537,6 +554,9 @@ NET_EXPORT BASE_DECLARE_FEATURE(kEnablePortBoundCookies); // enables domain cookie shadowing protection. NET_EXPORT BASE_DECLARE_FEATURE(kEnableSchemeBoundCookies); +// Disallows cookies to have non ascii values in their name or value. +NET_EXPORT BASE_DECLARE_FEATURE(kDisallowNonAsciiCookies); + // Enables expiration duration limit (3 hours) for cookies on insecure websites. // This feature is a no-op unless kEnableSchemeBoundCookies is enabled. NET_EXPORT BASE_DECLARE_FEATURE(kTimeLimitedInsecureCookies); @@ -590,10 +610,6 @@ NET_EXPORT BASE_DECLARE_FEATURE(kDeviceBoundSessions); // enabled. NET_EXPORT BASE_DECLARE_FEATURE(kPersistDeviceBoundSessions); -// Enables storing connection subtype in NetworkChangeNotifierDelegateAndroid to -// save the cost of the JNI call for future access. -NET_EXPORT BASE_DECLARE_FEATURE(kStoreConnectionSubtype); - // When enabled, all proxies in a proxy chain are partitioned by the NAK for the // endpoint of the connection. When disabled, proxies carrying tunnels to other // proxies (i.e., all proxies but the last one in the ProxyChain) are not @@ -687,6 +703,22 @@ NET_EXPORT BASE_DECLARE_FEATURE(kNewClientCertPathBuilding); // When enabled HSTS upgrades will only apply to top-level navigations. NET_EXPORT BASE_DECLARE_FEATURE(kHstsTopLevelNavigationsOnly); +// Whether or not to apply No-Vary-Search processing in the HTTP disk cache. +NET_EXPORT BASE_DECLARE_FEATURE(kHttpCacheNoVarySearch); + +NET_EXPORT BASE_DECLARE_FEATURE_PARAM(size_t, + kHttpCacheNoVarySearchCacheMaxEntries); + +// Enables sending the CORS Origin header on the POST request for Reporting API +// report uploads. +NET_EXPORT BASE_DECLARE_FEATURE(kReportingApiCorsOriginHeader); + +#if BUILDFLAG(IS_ANDROID) +// If enabled, Android OS's certificate verification (CertVerifyProcAndroid) is +// done using the certificate transparency aware API. +NET_EXPORT BASE_DECLARE_FEATURE(kUseCertTransparencyAwareApiForOsCertVerify); +#endif // BUILDFLAG(IS_ANDROID) + } // namespace net::features #endif // NET_BASE_FEATURES_H_ diff --git a/naiveproxy/src/net/base/filename_util.cc b/naiveproxy/src/net/base/filename_util.cc index f16d5dc2f1..55d812f4c3 100644 --- a/naiveproxy/src/net/base/filename_util.cc +++ b/naiveproxy/src/net/base/filename_util.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "net/base/filename_util.h" #include diff --git a/naiveproxy/src/net/base/hash_value.cc b/naiveproxy/src/net/base/hash_value.cc index 5656d6b453..11d3e5f94f 100644 --- a/naiveproxy/src/net/base/hash_value.cc +++ b/naiveproxy/src/net/base/hash_value.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "net/base/hash_value.h" #include diff --git a/naiveproxy/src/net/base/hash_value.h b/naiveproxy/src/net/base/hash_value.h index 371a675d2c..f02ac3f8da 100644 --- a/naiveproxy/src/net/base/hash_value.h +++ b/naiveproxy/src/net/base/hash_value.h @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #ifndef NET_BASE_HASH_VALUE_H_ #define NET_BASE_HASH_VALUE_H_ diff --git a/naiveproxy/src/net/base/ip_address.cc b/naiveproxy/src/net/base/ip_address.cc index d2528450d1..a892a1fc39 100644 --- a/naiveproxy/src/net/base/ip_address.cc +++ b/naiveproxy/src/net/base/ip_address.cc @@ -17,7 +17,6 @@ #include "base/debug/crash_logging.h" #include "base/logging.h" #include "base/notreached.h" -#include "base/ranges/algorithm.h" #include "base/strings/strcat.h" #include "base/strings/string_split.h" #include "base/strings/stringprintf.h" @@ -195,7 +194,7 @@ bool IPAddressBytes::operator<(const IPAddressBytes& other) const { } bool IPAddressBytes::operator==(const IPAddressBytes& other) const { - return base::ranges::equal(*this, other); + return std::ranges::equal(*this, other); } bool IPAddressBytes::operator!=(const IPAddressBytes& other) const { @@ -536,37 +535,37 @@ Dns64PrefixLength ExtractPref64FromIpv4onlyArpaAAAA(const IPAddress& address) { IPAddress ipv4onlyarpa1(192, 0, 0, 171); auto span = base::span(address.bytes()); - if (base::ranges::equal(ipv4onlyarpa0.bytes(), span.subspan(12u)) || - base::ranges::equal(ipv4onlyarpa1.bytes(), span.subspan(12u))) { + if (std::ranges::equal(ipv4onlyarpa0.bytes(), span.subspan(12u)) || + std::ranges::equal(ipv4onlyarpa1.bytes(), span.subspan(12u))) { return Dns64PrefixLength::k96bit; } - if (base::ranges::equal(ipv4onlyarpa0.bytes(), span.subspan(9u, 4u)) || - base::ranges::equal(ipv4onlyarpa1.bytes(), span.subspan(9u, 4u))) { + if (std::ranges::equal(ipv4onlyarpa0.bytes(), span.subspan(9u, 4u)) || + std::ranges::equal(ipv4onlyarpa1.bytes(), span.subspan(9u, 4u))) { return Dns64PrefixLength::k64bit; } IPAddressBytes ipv4; ipv4.Append(span.subspan(7u, 1u)); ipv4.Append(span.subspan(9u, 3u)); - if (base::ranges::equal(ipv4onlyarpa0.bytes(), ipv4) || - base::ranges::equal(ipv4onlyarpa1.bytes(), ipv4)) { + if (std::ranges::equal(ipv4onlyarpa0.bytes(), ipv4) || + std::ranges::equal(ipv4onlyarpa1.bytes(), ipv4)) { return Dns64PrefixLength::k56bit; } ipv4 = IPAddressBytes(); ipv4.Append(span.subspan(6u, 2u)); ipv4.Append(span.subspan(9u, 2u)); - if (base::ranges::equal(ipv4onlyarpa0.bytes(), ipv4) || - base::ranges::equal(ipv4onlyarpa1.bytes(), ipv4)) { + if (std::ranges::equal(ipv4onlyarpa0.bytes(), ipv4) || + std::ranges::equal(ipv4onlyarpa1.bytes(), ipv4)) { return Dns64PrefixLength::k48bit; } ipv4 = IPAddressBytes(); ipv4.Append(span.subspan(5u, 3u)); ipv4.Append(span.subspan(9u, 1u)); - if (base::ranges::equal(ipv4onlyarpa0.bytes(), ipv4) || - base::ranges::equal(ipv4onlyarpa1.bytes(), ipv4)) { + if (std::ranges::equal(ipv4onlyarpa0.bytes(), ipv4) || + std::ranges::equal(ipv4onlyarpa1.bytes(), ipv4)) { return Dns64PrefixLength::k40bit; } - if (base::ranges::equal(ipv4onlyarpa0.bytes(), span.subspan(4u, 4u)) || - base::ranges::equal(ipv4onlyarpa1.bytes(), span.subspan(4u, 4u))) { + if (std::ranges::equal(ipv4onlyarpa0.bytes(), span.subspan(4u, 4u)) || + std::ranges::equal(ipv4onlyarpa1.bytes(), span.subspan(4u, 4u))) { return Dns64PrefixLength::k32bit; } // if ipv4onlyarpa address is not found return 0 diff --git a/naiveproxy/src/net/base/ip_endpoint.cc b/naiveproxy/src/net/base/ip_endpoint.cc index b840a1883f..2ae43a2377 100644 --- a/naiveproxy/src/net/base/ip_endpoint.cc +++ b/naiveproxy/src/net/base/ip_endpoint.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "net/base/ip_endpoint.h" #include diff --git a/naiveproxy/src/net/base/isolation_info.cc b/naiveproxy/src/net/base/isolation_info.cc index f24182324f..d744e1cce8 100644 --- a/naiveproxy/src/net/base/isolation_info.cc +++ b/naiveproxy/src/net/base/isolation_info.cc @@ -110,17 +110,11 @@ IsolationInfo IsolationInfo::CreateForInternalRequest( /*nonce=*/std::nullopt); } -IsolationInfo IsolationInfo::CreateTransient() { +IsolationInfo IsolationInfo::CreateTransient( + const std::optional& nonce) { url::Origin opaque_origin; return IsolationInfo(RequestType::kOther, opaque_origin, opaque_origin, - SiteForCookies(), /*nonce=*/std::nullopt); -} - -IsolationInfo IsolationInfo::CreateTransientWithNonce( - const base::UnguessableToken& nonce) { - url::Origin opaque_origin; - return IsolationInfo(RequestType::kOther, opaque_origin, opaque_origin, - SiteForCookies(), nonce); + SiteForCookies(), /*nonce=*/nonce); } std::optional IsolationInfo::Deserialize( diff --git a/naiveproxy/src/net/base/isolation_info.h b/naiveproxy/src/net/base/isolation_info.h index f5c62fee1a..f4374c1aa6 100644 --- a/naiveproxy/src/net/base/isolation_info.h +++ b/naiveproxy/src/net/base/isolation_info.h @@ -41,13 +41,29 @@ namespace net { // unused, but will eventually replace the logic in URLRequest/RedirectInfo for // tracking and updating that value. // -// In addition to sharding, `IsolationInfo::nonce()` is also used to -// check if a given network request should be disallowed because the +// IsolationInfo has a `nonce_` member, which can be used to force a particular +// "shard" based upon that nonce. An IsolationInfo with an opaque origin will +// also have its own shard, but the nonce enables this behavior even for non- +// opaque origins. If multiple documents share the same nonce, they can +// therefore share the same shard, so it is possible to leak information between +// them via partitioned cookies, etc. This nonce is provided to many of the +// constructor/factory methods of this class; if an IsolationInfo is created in +// the context of a document with a partition nonce, then that partition nonce +// should be provided, to ensure information is only visible within the same +// partition. Currently, only fenced frames and credentailless iframes use a +// partition nonce. +// +// Even if full third-party cookie access is enabled, the `nonce` will force a +// cookie partition keyed using that nonce. Keep this in mind when using a +// nonced IsolationInfo for credentialed requests. +// +// In addition to the sharding described above, `IsolationInfo::nonce()` is also +// used to check if a given network request should be disallowed because the // initiating fenced frame has revoked network access. More context on // network revocation is in network_context.mojom in the comment for // `NetworkContext::RevokeNetworkForNonces()`. Not providing the correct // `nonce` will therefore lead to sending network requests that should -// have been blocked. See `RenderFrameHostImpl::ComputeNonce()` which +// have been blocked. See `RenderFrameHostImpl::ComputeNonce()` which // computes the correct nonce for a given frame. class NET_EXPORT IsolationInfo { public: @@ -95,16 +111,18 @@ class NET_EXPORT IsolationInfo { const url::Origin& top_frame_origin); // Creates a transient IsolationInfo. A transient IsolationInfo will not save - // data to disk and not send SameSite cookies. Equivalent to calling - // CreateForInternalRequest with a fresh opaque origin. - static IsolationInfo CreateTransient(); + // data to disk and not send SameSite cookies. When `nonce` is std::nullopt, + // this is equivalent to calling CreateForInternalRequest with a fresh opaque + // origin. - // Same as CreateTransient, with a `nonce` used to identify requests tagged - // with this IsolationInfo in the network service. The `nonce` provides no - // additional resource isolation, because the opaque origin in the resulting - // IsolationInfo already represents a unique partition. - static IsolationInfo CreateTransientWithNonce( - const base::UnguessableToken& nonce); + // Because the origin of the returned IsolationInfo is opaque, all network + // state partitioning outside of cookies will be unique (see the class + // meta-comment for how cookies are affected). + + // Note: error pages resulting from a failed navigation should always use a + // transient IsolationInfo with no nonce. + static IsolationInfo CreateTransient( + const std::optional& nonce); // Creates an IsolationInfo from the serialized contents. Returns a nullopt // if deserialization fails or if data is inconsistent. diff --git a/naiveproxy/src/net/base/mime_sniffer.h b/naiveproxy/src/net/base/mime_sniffer.h index 1a8ed882c5..9cba2ab80e 100644 --- a/naiveproxy/src/net/base/mime_sniffer.h +++ b/naiveproxy/src/net/base/mime_sniffer.h @@ -14,6 +14,19 @@ class GURL; +// ----------------------------------------------------------------------------- +// When the MIME type of a resource is sniffed, it will potentially be used in +// a manner other than that the server-provided Content-Type indicated it should +// be used in. This may have security implications. As such, MIME sniffing +// should generally not be expanded to cover more types of files, to sniff more +// files, or to more aggressively sniff already supported MIME types. +// +// Please do not increased the capabilities of the MIME sniffer. MIME sniffing +// only continues to be supported because of the many sites that depend on the +// existing behavior, not because it's a good idea. Most sites are working with +// the MIME sniffer as-is, so there's no need to expand upon it. +// ----------------------------------------------------------------------------- + namespace net { // The maximum number of bytes used by any internal mime sniffing routine. May diff --git a/naiveproxy/src/net/base/net_error_list.h b/naiveproxy/src/net/base/net_error_list.h index 049d187a25..7bfe72dc5b 100644 --- a/naiveproxy/src/net/base/net_error_list.h +++ b/naiveproxy/src/net/base/net_error_list.h @@ -131,6 +131,9 @@ NET_ERROR(BLOCKED_BY_ORB, -32) // network access. NET_ERROR(NETWORK_ACCESS_REVOKED, -33) +// The request was blocked by fingerprinting protections. +NET_ERROR(BLOCKED_BY_FINGERPRINTING_PROTECTION, -34) + // A connection was closed (corresponding to a TCP FIN). NET_ERROR(CONNECTION_CLOSED, -100) diff --git a/naiveproxy/src/net/base/net_resources.grd b/naiveproxy/src/net/base/net_resources.grd index 2937014ce8..fef4e69d2f 100644 --- a/naiveproxy/src/net/base/net_resources.grd +++ b/naiveproxy/src/net/base/net_resources.grd @@ -1,5 +1,5 @@ - + diff --git a/naiveproxy/src/net/base/network_delegate.cc b/naiveproxy/src/net/base/network_delegate.cc index bf0efe634a..48480f4224 100644 --- a/naiveproxy/src/net/base/network_delegate.cc +++ b/naiveproxy/src/net/base/network_delegate.cc @@ -4,10 +4,10 @@ #include "net/base/network_delegate.h" +#include #include #include "base/logging.h" -#include "base/ranges/algorithm.h" #include "base/threading/thread_checker.h" #include "net/base/load_flags.h" #include "net/base/net_errors.h" @@ -214,14 +214,14 @@ void NetworkDelegate::ExcludeAllCookiesExceptPartitioned( net::CookieAccessResultList& excluded_cookies) { // If cookies are not universally disabled, we will preserve partitioned // cookies - const auto to_be_moved = base::ranges::stable_partition( + const auto to_be_moved = std::ranges::stable_partition( maybe_included_cookies, [](const net::CookieWithAccessResult& cookie) { return cookie.cookie.IsPartitioned(); }); - excluded_cookies.insert( - excluded_cookies.end(), std::make_move_iterator(to_be_moved), - std::make_move_iterator(maybe_included_cookies.end())); - maybe_included_cookies.erase(to_be_moved, maybe_included_cookies.end()); + excluded_cookies.insert(excluded_cookies.end(), + std::make_move_iterator(to_be_moved.begin()), + std::make_move_iterator(to_be_moved.end())); + maybe_included_cookies.erase(to_be_moved.begin(), to_be_moved.end()); // Add the ExclusionReason for all excluded cookies. for (net::CookieWithAccessResult& cookie : excluded_cookies) { @@ -233,13 +233,13 @@ void NetworkDelegate::ExcludeAllCookiesExceptPartitioned( void NetworkDelegate::MoveExcludedCookies( net::CookieAccessResultList& maybe_included_cookies, net::CookieAccessResultList& excluded_cookies) { - const auto to_be_moved = base::ranges::stable_partition( + const auto to_be_moved = std::ranges::stable_partition( maybe_included_cookies, [](const CookieWithAccessResult& cookie) { return cookie.access_result.status.IsInclude(); }); - excluded_cookies.insert( - excluded_cookies.end(), std::make_move_iterator(to_be_moved), - std::make_move_iterator(maybe_included_cookies.end())); - maybe_included_cookies.erase(to_be_moved, maybe_included_cookies.end()); + excluded_cookies.insert(excluded_cookies.end(), + std::make_move_iterator(to_be_moved.begin()), + std::make_move_iterator(to_be_moved.end())); + maybe_included_cookies.erase(to_be_moved.begin(), to_be_moved.end()); } } // namespace net diff --git a/naiveproxy/src/net/base/network_interfaces_linux.cc b/naiveproxy/src/net/base/network_interfaces_linux.cc index 7585181b8e..f043226484 100644 --- a/naiveproxy/src/net/base/network_interfaces_linux.cc +++ b/naiveproxy/src/net/base/network_interfaces_linux.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "net/base/network_interfaces_linux.h" #include diff --git a/naiveproxy/src/net/base/proxy_chain.cc b/naiveproxy/src/net/base/proxy_chain.cc index 7a31274726..57ebea8ba7 100644 --- a/naiveproxy/src/net/base/proxy_chain.cc +++ b/naiveproxy/src/net/base/proxy_chain.cc @@ -4,13 +4,13 @@ #include "net/base/proxy_chain.h" +#include #include #include #include "base/check.h" #include "base/no_destructor.h" #include "base/pickle.h" -#include "base/ranges/algorithm.h" #include "base/strings/stringprintf.h" #include "build/buildflag.h" #include "net/base/proxy_server.h" diff --git a/naiveproxy/src/net/base/registry_controlled_domains/effective_tld_names.dat b/naiveproxy/src/net/base/registry_controlled_domains/effective_tld_names.dat index a78ce52add..99da09771e 100644 --- a/naiveproxy/src/net/base/registry_controlled_domains/effective_tld_names.dat +++ b/naiveproxy/src/net/base/registry_controlled_domains/effective_tld_names.dat @@ -18,23 +18,23 @@ ac com.ac edu.ac gov.ac -net.ac mil.ac +net.ac org.ac // ad : https://www.iana.org/domains/root/db/ad.html +// Confirmed by Amadeu Abril i Abril (CORE) 2024-11-17 ad -nom.ad -// ae : https://tdra.gov.ae/en/aeda/ae-policies +// ae : https://www.iana.org/domains/root/db/ae.html ae +ac.ae co.ae +gov.ae +mil.ae net.ae org.ae sch.ae -ac.ae -gov.ae -mil.ae // aero : https://information.aero/registration/policies/dmp aero @@ -136,27 +136,27 @@ union.aero workinggroup.aero works.aero -// af : http://www.nic.af/help.jsp +// af : https://www.nic.af/domain-price af -gov.af com.af -org.af -net.af edu.af +gov.af +net.af +org.af // ag : http://www.nic.ag/prices.htm ag -com.ag -org.ag -net.ag co.ag +com.ag +net.ag nom.ag +org.ag // ai : http://nic.com.ai/ ai -off.ai com.ai net.ai +off.ai org.ai // al : http://www.ert.gov.al/ert_alb/faq_det.html?Id=31 @@ -169,6 +169,7 @@ net.al org.al // am : https://www.amnic.net/policy/en/Policy_EN.pdf +// Confirmed by ISOC AM 2024-11-18 am co.am com.am @@ -177,14 +178,17 @@ net.am org.am // ao : https://www.iana.org/domains/root/db/ao.html -// http://www.dns.ao/REGISTR.DOC +// https://www.dns.ao/ao/ ao -ed.ao -gv.ao -og.ao co.ao -pb.ao +ed.ao +edu.ao +gov.ao +gv.ao it.ao +og.ao +org.ao +pb.ao // aq : https://www.iana.org/domains/root/db/aq.html aq @@ -210,6 +214,7 @@ tur.ar // Confirmed by registry 2008-06-18 arpa e164.arpa +home.arpa in-addr.arpa ip6.arpa iris.arpa @@ -227,27 +232,27 @@ asia // Confirmed by registry 2008-06-17 at ac.at +sth.ac.at co.at gv.at or.at -sth.ac.at // au : https://www.iana.org/domains/root/db/au.html -// http://www.auda.org.au/ +// https://www.auda.org.au/ +// Confirmed by registry 2024-11-17 au // 2LDs +asn.au com.au -net.au -org.au edu.au gov.au -asn.au id.au +net.au +org.au // Historic 2LDs (closed to new registration, but sites still exist) -info.au conf.au oz.au -// CGDNs - http://www.cgdn.org.au/ +// CGDNs : https://www.auda.org.au/au-domain-names/the-different-au-domain-names/state-and-territory-domain-names/ act.au nsw.au nt.au @@ -267,9 +272,9 @@ sa.edu.au tas.edu.au vic.edu.au wa.edu.au -// act.gov.au Bug 984824 - Removed at request of Greg Tankard -// nsw.gov.au Bug 547985 - Removed at request of -// nt.gov.au Bug 940478 - Removed at request of Greg Connors +// act.gov.au - Bug 984824 - Removed at request of Greg Tankard +// nsw.gov.au - Bug 547985 - Removed at request of +// nt.gov.au - Bug 940478 - Removed at request of Greg Connors qld.gov.au sa.gov.au tas.gov.au @@ -287,21 +292,25 @@ com.aw ax // az : https://www.iana.org/domains/root/db/az.html +// Confirmed via https://whois.az/?page_id=10 2024-12-11 az +biz.az +co.az com.az -net.az -int.az -gov.az -org.az edu.az +gov.az info.az -pp.az +int.az mil.az name.az +net.az +org.az +pp.az +// No longer available for registration, however domains exist as of 2024-12-11 +// see https://whois.az/?page_id=783 pro.az -biz.az -// ba : http://nic.ba/users_data/files/pravilnik_o_registraciji.pdf +// ba : https://www.iana.org/domains/root/db/ba.html ba com.ba edu.ba @@ -338,6 +347,16 @@ gov.bf // bg : https://www.iana.org/domains/root/db/bg.html // https://www.register.bg/user/static/rules/en/index.html bg +0.bg +1.bg +2.bg +3.bg +4.bg +5.bg +6.bg +7.bg +8.bg +9.bg a.bg b.bg c.bg @@ -364,24 +383,14 @@ w.bg x.bg y.bg z.bg -0.bg -1.bg -2.bg -3.bg -4.bg -5.bg -6.bg -7.bg -8.bg -9.bg // bh : https://www.iana.org/domains/root/db/bh.html bh com.bh edu.bh +gov.bh net.bh org.bh -gov.bh // bi : https://www.iana.org/domains/root/db/bi.html // http://whois.nic.bi/ @@ -396,7 +405,7 @@ org.bi biz // bj : https://nic.bj/bj-suffixes.txt -// submitted by registry +// Submitted by registry bj africa.bj agro.bj @@ -414,12 +423,12 @@ money.bj net.bj org.bj ote.bj -resto.bj restaurant.bj +resto.bj tourism.bj univ.bj -// bm : http://www.bermudanic.bm/dnr-text.txt +// bm : https://www.bermudanic.bm/domain-registration/index.php bm com.bm edu.bm @@ -435,15 +444,16 @@ gov.bn net.bn org.bn -// bo : https://nic.bo/delegacion2015.php#h-1.10 +// bo : https://nic.bo +// Confirmed by registry 2024-11-19 bo com.bo edu.bo gob.bo int.bo -org.bo -net.bo mil.bo +net.bo +org.bo tv.bo web.bo // Social Domains @@ -469,9 +479,9 @@ natural.bo nombre.bo noticias.bo patria.bo +plurinacional.bo politica.bo profesional.bo -plurinacional.bo pueblo.bo revista.bo salud.bo @@ -499,6 +509,7 @@ ato.br b.br barueri.br belem.br +bet.br bhz.br bib.br bio.br @@ -586,6 +597,7 @@ joinville.br jor.br jus.br leg.br +leilao.br lel.br log.br londrina.br @@ -656,10 +668,10 @@ zlg.br // bs : http://www.nic.bs/rules.html bs com.bs -net.bs -org.bs edu.bs gov.bs +net.bs +org.bs // bt : https://www.iana.org/domains/root/db/bt.html bt @@ -674,10 +686,12 @@ org.bt bv // bw : https://www.iana.org/domains/root/db/bw.html -// http://www.gobin.info/domainname/bw.doc -// list of other 2nd level tlds ? +// https://nic.net.bw/bw-name-structure bw +ac.bw co.bw +gov.bw +net.bw org.bw // by : https://www.iana.org/domains/root/db/by.html @@ -696,11 +710,12 @@ of.by // bz : https://www.iana.org/domains/root/db/bz.html // http://www.belizenic.bz/ bz +co.bz com.bz -net.bz -org.bz edu.bz gov.bz +net.bz +org.bz // ca : https://www.iana.org/domains/root/db/ca.html ca @@ -730,7 +745,7 @@ cat cc // cd : https://www.iana.org/domains/root/db/cd.html -// see also: https://www.nic.cd/domain/insertDomain_2.jsp?act=1 +// https://www.nic.cd cd gov.cd @@ -744,23 +759,20 @@ cg ch // ci : https://www.iana.org/domains/root/db/ci.html -// http://www.nic.ci/index.php?page=charte ci -org.ci -or.ci -com.ci -co.ci -edu.ci -ed.ci ac.ci -net.ci -go.ci -asso.ci aéroport.ci -int.ci -presse.ci -md.ci +asso.ci +co.ci +com.ci +ed.ci +edu.ci +go.ci gouv.ci +int.ci +net.ci +or.ci +org.ci // ck : https://www.iana.org/domains/root/db/ck.html *.ck @@ -788,12 +800,12 @@ ac.cn com.cn edu.cn gov.cn +mil.cn net.cn org.cn -mil.cn 公司.cn -网络.cn 網絡.cn +网络.cn // cn geographic names ah.cn bj.cn @@ -801,18 +813,20 @@ cq.cn fj.cn gd.cn gs.cn -gz.cn gx.cn +gz.cn ha.cn hb.cn he.cn hi.cn +hk.cn hl.cn hn.cn jl.cn js.cn jx.cn ln.cn +mo.cn nm.cn nx.cn qh.cn @@ -822,30 +836,23 @@ sh.cn sn.cn sx.cn tj.cn +tw.cn xj.cn xz.cn yn.cn zj.cn -hk.cn -mo.cn -tw.cn // co : https://www.iana.org/domains/root/db/co.html -// Submitted by registry +// https://www.cointernet.com.co/como-funciona-un-dominio-restringido +// Confirmed by registry 2024-11-18 co -arts.co com.co edu.co -firm.co gov.co -info.co -int.co mil.co net.co nom.co org.co -rec.co -web.co // com : https://www.iana.org/domains/root/db/com.html com @@ -853,7 +860,7 @@ com // coop : https://www.iana.org/domains/root/db/coop.html coop -// cr : http://www.nic.cr/niccr_publico/showRegistroDominiosScreen.do +// cr : https://nic.cr/capitulo-1-registro-de-un-nombre-de-dominio/ cr ac.cr co.cr @@ -868,23 +875,26 @@ cu com.cu edu.cu gob.cu -gov.cu inf.cu nat.cu net.cu org.cu // cv : https://www.iana.org/domains/root/db/cv.html -// cv : http://www.dns.cv/tldcv_portal/do?com=DS;5446457100;111;+PAGE(4000018)+K-CAT-CODIGO(RDOM)+RCNT(100); <- registration rules +// https://ola.cv/domain-extensions-under-cv/ +// Confirmed by registry 2024-11-26 cv com.cv edu.cv +id.cv int.cv +net.cv nome.cv org.cv +publ.cv -// cw : http://www.una.cw/cw_registry/ -// Confirmed by registry 2013-03-26 +// cw : https://www.uoc.cw/cw-registry +// Confirmed by registry 2024-11-19 cw com.cw edu.cw @@ -897,8 +907,8 @@ cx gov.cx // cy : http://www.nic.cy/ -// Submitted by registry Panayiotou Fotia -// namespace policies URL https://www.nic.cy/portal//sites/default/files/symfonia_gia_eggrafi.pdf +// Submitted by Panayiotou Fotia +// https://nic.cy/wp-content/uploads/2024/01/Create-Request-for-domain-name-registration-1.pdf cy ac.cy biz.cy @@ -929,12 +939,15 @@ dj dk // dm : https://www.iana.org/domains/root/db/dm.html +// https://nic.dm/policies/pdf/DMRulesandGuidelines2024v1.pdf +// Confirmed by registry 2024-11-19 dm +co.dm com.dm -net.dm -org.dm edu.dm gov.dm +net.dm +org.dm // do : https://www.iana.org/domains/root/db/do.html do @@ -956,77 +969,83 @@ asso.dz com.dz edu.dz gov.dz -org.dz net.dz +org.dz pol.dz soc.dz tm.dz -// ec : http://www.nic.ec/reg/paso1.asp +// ec : https://www.nic.ec/ // Submitted by registry ec com.ec -info.ec -net.ec +edu.ec fin.ec +gob.ec +gov.ec +info.ec k12.ec med.ec -pro.ec -org.ec -edu.ec -gov.ec -gob.ec mil.ec +net.ec +org.ec +pro.ec // edu : https://www.iana.org/domains/root/db/edu.html edu -// ee : http://www.eenet.ee/EENet/dom_reeglid.html#lisa_B +// ee : https://www.internet.ee/domains/general-domains-and-procedure-for-registration-of-sub-domains-under-general-domains ee +aip.ee +com.ee edu.ee +fie.ee gov.ee -riik.ee lib.ee med.ee -com.ee -pri.ee -aip.ee org.ee -fie.ee +pri.ee +riik.ee // eg : https://www.iana.org/domains/root/db/eg.html +// https://domain.eg/en/domain-rules/subdomain-names-types/ eg +ac.eg com.eg edu.eg eun.eg gov.eg +info.eg +me.eg mil.eg name.eg net.eg org.eg sci.eg +sport.eg +tv.eg // er : https://www.iana.org/domains/root/db/er.html *.er -// es : https://www.nic.es/site_ingles/ingles/dominios/index.html +// es : https://www.dominios.es/en es com.es +edu.es +gob.es nom.es org.es -gob.es -edu.es // et : https://www.iana.org/domains/root/db/et.html et -com.et -gov.et -org.et -edu.et biz.et -name.et +com.et +edu.et +gov.et info.et +name.et net.et +org.et // eu : https://www.iana.org/domains/root/db/eu.html eu @@ -1057,11 +1076,11 @@ pro.fj *.fk // fm : https://www.iana.org/domains/root/db/fm.html +fm com.fm edu.fm net.fm org.fm -fm // fo : https://www.iana.org/domains/root/db/fo.html fo @@ -1088,24 +1107,25 @@ ga gb // gd : https://www.iana.org/domains/root/db/gd.html +gd edu.gd gov.gd -gd -// ge : http://www.nic.net.ge/policy_en.pdf +// ge : https://nic.ge/en/administrator/the-ge-domain-regulations +// Confirmed by registry 2024-11-20 ge com.ge edu.ge gov.ge -org.ge -mil.ge net.ge +org.ge pvt.ge +school.ge // gf : https://www.iana.org/domains/root/db/gf.html gf -// gg : http://www.channelisles.net/register-domains/ +// gg : https://www.channelisles.net/register-1/register-direct // Confirmed by registry 2013-11-28 gg co.gg @@ -1113,23 +1133,23 @@ net.gg org.gg // gh : https://www.iana.org/domains/root/db/gh.html -// see also: http://www.nic.gh/reg_now.php +// https://www.nic.gh/ // Although domains directly at second level are not possible at the moment, // they have been possible for some time and may come back. gh com.gh edu.gh gov.gh -org.gh mil.gh +org.gh // gi : http://www.nic.gi/rules.html gi com.gi -ltd.gi -gov.gi -mod.gi edu.gi +gov.gi +ltd.gi +mod.gi org.gi // gl : https://www.iana.org/domains/root/db/gl.html @@ -1151,32 +1171,32 @@ ac.gn com.gn edu.gn gov.gn -org.gn net.gn +org.gn // gov : https://www.iana.org/domains/root/db/gov.html gov // gp : http://www.nic.gp/index.php?lang=en gp -com.gp -net.gp -mobi.gp -edu.gp -org.gp asso.gp +com.gp +edu.gp +mobi.gp +net.gp +org.gp // gq : https://www.iana.org/domains/root/db/gq.html gq -// gr : https://grweb.ics.forth.gr/english/1617-B-2005.html +// gr : https://www.iana.org/domains/root/db/gr.html // Submitted by registry gr com.gr edu.gr +gov.gr net.gr org.gr -gov.gr // gs : https://www.iana.org/domains/root/db/gs.html gs @@ -1227,97 +1247,97 @@ gov.hk idv.hk net.hk org.hk -公司.hk -教育.hk -敎育.hk -政府.hk -個人.hk 个人.hk +個人.hk +公司.hk +政府.hk +敎育.hk +教育.hk 箇人.hk -網络.hk -网络.hk -组織.hk -網絡.hk -网絡.hk -组织.hk 組織.hk 組织.hk +網絡.hk +網络.hk +组織.hk +组织.hk +网絡.hk +网络.hk // hm : https://www.iana.org/domains/root/db/hm.html hm -// hn : http://www.nic.hn/politicas/ps02,,05.html +// hn : https://www.iana.org/domains/root/db/hn.html hn com.hn edu.hn -org.hn -net.hn -mil.hn gob.hn +mil.hn +net.hn +org.hn // hr : http://www.dns.hr/documents/pdf/HRTLD-regulations.pdf hr -iz.hr -from.hr -name.hr com.hr +from.hr +iz.hr +name.hr // ht : http://www.nic.ht/info/charte.cfm ht -com.ht -shop.ht -firm.ht -info.ht adult.ht -net.ht -pro.ht -org.ht -med.ht art.ht -coop.ht -pol.ht asso.ht +com.ht +coop.ht edu.ht -rel.ht +firm.ht gouv.ht +info.ht +med.ht +net.ht +org.ht perso.ht +pol.ht +pro.ht +rel.ht +shop.ht -// hu : http://www.domain.hu/domain/English/sld.html +// hu : https://www.iana.org/domains/root/db/hu.html // Confirmed by registry 2008-06-12 hu -co.hu -info.hu -org.hu -priv.hu -sport.hu -tm.hu 2000.hu agrar.hu bolt.hu casino.hu city.hu +co.hu erotica.hu erotika.hu film.hu forum.hu games.hu hotel.hu +info.hu ingatlan.hu jogasz.hu konyvelo.hu lakas.hu media.hu news.hu +org.hu +priv.hu reklam.hu sex.hu shop.hu +sport.hu suli.hu szex.hu +tm.hu tozsde.hu utazas.hu video.hu -// id : https://pandi.id/en/domain/registration-requirements/ +// id : https://www.iana.org/domains/root/db/id.html id ac.id biz.id @@ -1336,9 +1356,9 @@ web.id ie gov.ie -// il : http://www.isoc.org.il/domains/ -// see also: https://en.isoc.org.il/il-cctld/registration-rules -// ISOC-IL (operated by .il Registry) +// il : http://www.isoc.org.il/domains/ +// see also: https://en.isoc.org.il/il-cctld/registration-rules +// ISOC-IL (operated by .il Registry) il ac.il co.il @@ -1364,11 +1384,11 @@ org.il im ac.im co.im -com.im ltd.co.im +plc.co.im +com.im net.im org.im -plc.co.im tt.im tv.im @@ -1428,18 +1448,24 @@ int eu.int // io : http://www.nic.io/rules.htm -// list of other 2nd level tlds ? io +co.io com.io +edu.io +gov.io +mil.io +net.io +nom.io +org.io // iq : http://www.cmc.iq/english/iq/iqregister1.htm iq -gov.iq -edu.iq -mil.iq com.iq -org.iq +edu.iq +gov.iq +mil.iq net.iq +org.iq // ir : http://www.nic.ir/Terms_and_Conditions_ir,_Appendix_1_Domain_Rules // Also see http://www.nic.ir/Internationalized_Domain_Names @@ -1458,22 +1484,16 @@ sch.ir ايران.ir // is : http://www.isnic.is/domain/rules.php -// Confirmed by registry 2008-12-06 +// Confirmed by registry 2024-11-17 is -net.is -com.is -edu.is -gov.is -org.is -int.is // it : https://www.iana.org/domains/root/db/it.html +// https://www.nic.it/ it -gov.it edu.it -// Reserved geo-names (regions and provinces): -// https://www.nic.it/sites/default/files/archivio/docs/Regulation_assignation_v7.1.pdf -// Regions +gov.it +// Regions (3.3.1) +// https://www.nic.it/en/manage-your-it/forms-and-docs -> "Assignment and Management of domain names" abr.it abruzzo.it aosta-valley.it @@ -1532,6 +1552,7 @@ trentin-sudtirol.it trentin-südtirol.it trentin-sued-tirol.it trentin-suedtirol.it +trentino.it trentino-a-adige.it trentino-aadige.it trentino-alto-adige.it @@ -1544,7 +1565,6 @@ trentino-sudtirol.it trentino-südtirol.it trentino-sued-tirol.it trentino-suedtirol.it -trentino.it trentinoa-adige.it trentinoaadige.it trentinoalto-adige.it @@ -1588,7 +1608,7 @@ vao.it vda.it ven.it veneto.it -// Provinces +// Provinces (3.3.2) ag.it agrigento.it al.it @@ -1616,10 +1636,10 @@ at.it av.it avellino.it ba.it +balsan.it balsan-sudtirol.it balsan-südtirol.it balsan-suedtirol.it -balsan.it bari.it barletta-trani-andria.it barlettatraniandria.it @@ -1633,21 +1653,21 @@ bl.it bn.it bo.it bologna.it -bolzano-altoadige.it bolzano.it +bolzano-altoadige.it +bozen.it bozen-sudtirol.it bozen-südtirol.it bozen-suedtirol.it -bozen.it br.it brescia.it brindisi.it bs.it bt.it +bulsan.it bulsan-sudtirol.it bulsan-südtirol.it bulsan-suedtirol.it -bulsan.it bz.it ca.it cagliari.it @@ -1749,9 +1769,9 @@ milano.it mn.it mo.it modena.it +monza.it monza-brianza.it monza-e-della-brianza.it -monza.it monzabrianza.it monzaebrianza.it monzaedellabrianza.it @@ -1830,8 +1850,8 @@ sondrio.it sp.it sr.it ss.it -suedtirol.it südtirol.it +suedtirol.it sv.it ta.it taranto.it @@ -1880,7 +1900,7 @@ vs.it vt.it vv.it -// je : http://www.channelisles.net/register-domains/ +// je : https://www.iana.org/domains/root/db/je.html // Confirmed by registry 2013-11-28 je co.je @@ -1890,23 +1910,30 @@ org.je // jm : http://www.com.jm/register.html *.jm -// jo : http://www.dns.jo/Registration_policy.aspx +// jo : https://www.dns.jo/JoFamily.aspx +// Confirmed by registry 2024-11-17 jo +agri.jo +ai.jo com.jo -org.jo -net.jo edu.jo -sch.jo +eng.jo +fm.jo gov.jo mil.jo -name.jo +net.jo +org.jo +per.jo +phd.jo +sch.jo +tv.jo // jobs : https://www.iana.org/domains/root/db/jobs.html jobs // jp : https://www.iana.org/domains/root/db/jp.html // http://jprs.co.jp/en/jpdomain.html -// Submitted by registry +// Confirmed by registry 2024-11-22 jp // jp organizational type names ac.jp @@ -1919,6 +1946,9 @@ lg.jp ne.jp or.jp // jp prefecture type names +// 2024-11-22: JPRS confirmed that regional .jp suffixes no longer accept new registrations. +// Once all existing registrations expire (marking full discontinuation), these suffixes +// will be removed from the PSL. aichi.jp akita.jp aomori.jp @@ -1966,26 +1996,14 @@ wakayama.jp yamagata.jp yamaguchi.jp yamanashi.jp -栃木.jp -愛知.jp -愛媛.jp -兵庫.jp -熊本.jp -茨城.jp -北海道.jp -千葉.jp -和歌山.jp -長崎.jp -長野.jp -新潟.jp -青森.jp -静岡.jp -東京.jp -石川.jp -埼玉.jp 三重.jp 京都.jp 佐賀.jp +兵庫.jp +北海道.jp +千葉.jp +和歌山.jp +埼玉.jp 大分.jp 大阪.jp 奈良.jp @@ -1995,20 +2013,32 @@ yamanashi.jp 山口.jp 山形.jp 山梨.jp -岩手.jp 岐阜.jp 岡山.jp +岩手.jp 島根.jp 広島.jp 徳島.jp +愛媛.jp +愛知.jp +新潟.jp +東京.jp +栃木.jp 沖縄.jp 滋賀.jp +熊本.jp +石川.jp 神奈川.jp 福井.jp 福岡.jp 福島.jp 秋田.jp 群馬.jp +茨城.jp +長崎.jp +長野.jp +青森.jp +静岡.jp 香川.jp 高知.jp 鳥取.jp @@ -3718,56 +3748,56 @@ sc.ke // kg : http://www.domain.kg/dmn_n.html kg -org.kg -net.kg com.kg edu.kg gov.kg mil.kg +net.kg +org.kg // kh : http://www.mptc.gov.kh/dns_registration.htm *.kh -// ki : http://www.ki/dns/index.html +// ki : https://www.iana.org/domains/root/db/ki.html ki -edu.ki biz.ki -net.ki -org.ki +com.ki +edu.ki gov.ki info.ki -com.ki +net.ki +org.ki // km : https://www.iana.org/domains/root/db/km.html // http://www.domaine.km/documents/charte.doc km -org.km -nom.km -gov.km -prd.km -tm.km -edu.km -mil.km ass.km com.km +edu.km +gov.km +mil.km +nom.km +org.km +prd.km +tm.km // These are only mentioned as proposed suggestions at domaine.km, but // https://www.iana.org/domains/root/db/km.html says they're available for registration: -coop.km asso.km -presse.km +coop.km +gouv.km medecin.km notaires.km pharmaciens.km +presse.km veterinaire.km -gouv.km // kn : https://www.iana.org/domains/root/db/kn.html // http://www.dot.kn/domainRules.html kn -net.kn -org.kn edu.kn gov.kn +net.kn +org.kn // kp : http://www.kcce.kp/en_index.php kp @@ -3834,24 +3864,24 @@ org.ky // kz : https://www.iana.org/domains/root/db/kz.html // see also: http://www.nic.kz/rules/index.jsp kz -org.kz +com.kz edu.kz -net.kz gov.kz mil.kz -com.kz +net.kz +org.kz // la : https://www.iana.org/domains/root/db/la.html // Submitted by registry la -int.la -net.la -info.la +com.la edu.la gov.la -per.la -com.la +info.la +int.la +net.la org.la +per.la // lb : https://www.iana.org/domains/root/db/lb.html // Submitted by registry @@ -3865,33 +3895,33 @@ org.lb // lc : https://www.iana.org/domains/root/db/lc.html // see also: http://www.nic.lc/rules.htm lc -com.lc -net.lc co.lc -org.lc +com.lc edu.lc gov.lc +net.lc +org.lc // li : https://www.iana.org/domains/root/db/li.html li -// lk : https://www.nic.lk/index.php/domain-registration/lk-domain-naming-structure +// lk : https://www.iana.org/domains/root/db/lk.html lk -gov.lk -sch.lk -net.lk -int.lk -com.lk -org.lk -edu.lk -ngo.lk -soc.lk -web.lk -ltd.lk +ac.lk assn.lk +com.lk +edu.lk +gov.lk grp.lk hotel.lk -ac.lk +int.lk +ltd.lk +net.lk +ngo.lk +org.lk +sch.lk +soc.lk +web.lk // lr : http://psg.com/dns/lr/lr.txt // Submitted by registry @@ -3899,8 +3929,8 @@ lr com.lr edu.lr gov.lr -org.lr net.lr +org.lr // ls : http://www.nic.ls/ // Confirmed by registry @@ -3923,70 +3953,69 @@ gov.lt // lu : http://www.dns.lu/en/ lu -// lv : http://www.nic.lv/DNS/En/generic.php +// lv : https://www.iana.org/domains/root/db/lv.html lv +asn.lv com.lv +conf.lv edu.lv gov.lv -org.lv -mil.lv id.lv +mil.lv net.lv -asn.lv -conf.lv +org.lv // ly : http://www.nic.ly/regulations.php ly com.ly -net.ly -gov.ly -plc.ly edu.ly -sch.ly -med.ly -org.ly +gov.ly id.ly +med.ly +net.ly +org.ly +plc.ly +sch.ly // ma : https://www.iana.org/domains/root/db/ma.html // http://www.anrt.ma/fr/admin/download/upload/file_fr782.pdf ma -co.ma -net.ma -gov.ma -org.ma ac.ma +co.ma +gov.ma +net.ma +org.ma press.ma // mc : http://www.nic.mc/ mc -tm.mc asso.mc +tm.mc // md : https://www.iana.org/domains/root/db/md.html md // me : https://www.iana.org/domains/root/db/me.html me -co.me -net.me -org.me -edu.me ac.me +co.me +edu.me gov.me its.me +net.me +org.me priv.me -// mg : http://nic.mg/nicmg/?page_id=39 +// mg : https://nic.mg mg -org.mg -nom.mg -gov.mg -prd.mg -tm.mg -edu.mg -mil.mg -com.mg co.mg +com.mg +edu.mg +gov.mg +mil.mg +nom.mg +org.mg +prd.mg // mh : https://www.iana.org/domains/root/db/mh.html mh @@ -3998,22 +4027,28 @@ mil // see also: http://dns.marnet.net.mk/postapka.php mk com.mk -org.mk -net.mk edu.mk gov.mk inf.mk name.mk +net.mk +org.mk -// ml : http://www.gobin.info/domainname/ml-template.doc -// see also: https://www.iana.org/domains/root/db/ml.html +// ml : https://www.iana.org/domains/root/db/ml.html +// Confirmed by Boubacar NDIAYE 2024-12-31 ml +ac.ml +art.ml +asso.ml com.ml edu.ml gouv.ml gov.ml +info.ml +inst.ml net.ml org.ml +pr.ml presse.ml // mm : https://www.iana.org/domains/root/db/mm.html @@ -4021,17 +4056,17 @@ presse.ml // mn : https://www.iana.org/domains/root/db/mn.html mn -gov.mn edu.mn +gov.mn org.mn // mo : http://www.monic.net.mo/ mo com.mo -net.mo -org.mo edu.mo gov.mo +net.mo +org.mo // mobi : https://www.iana.org/domains/root/db/mobi.html mobi @@ -4047,7 +4082,7 @@ mq mr gov.mr -// ms : http://www.nic.ms/pdf/MS_Domain_Name_Rules.pdf +// ms : https://www.iana.org/domains/root/db/ms.html ms com.ms edu.ms @@ -4065,13 +4100,13 @@ org.mt // mu : https://www.iana.org/domains/root/db/mu.html mu -com.mu -net.mu -org.mu -gov.mu ac.mu co.mu +com.mu +gov.mu +net.mu or.mu +org.mu // museum : https://welcome.museum/wp-content/uploads/2018/05/20180525-Registration-Policy-MUSEUM-EN_VF-2.pdf https://welcome.museum/buy-your-dot-museum-2/ museum @@ -4104,7 +4139,6 @@ coop.mw edu.mw gov.mw int.mw -museum.mw net.mw org.mw @@ -4112,10 +4146,10 @@ org.mw // Submitted by registry mx com.mx -org.mx -gob.mx edu.mx +gob.mx net.mx +org.mx // my : http://www.mynic.my/ // Available strings: https://mynic.my/resources/domains/buying-a-domain/ @@ -4142,27 +4176,16 @@ net.mz org.mz // na : http://www.na-nic.com.na/ -// http://www.info.na/domain/ na -info.na -pro.na -name.na -school.na -or.na -dr.na -us.na -mx.na -ca.na -in.na -cc.na -tv.na -ws.na -mobi.na +alt.na co.na com.na +gov.na +net.na org.na -// name : has 2nd-level tlds, but there's no list of them +// name : http://www.nic.name/ +// Regarding 2LDs: https://github.com/publicsuffix/list/issues/2306 name // nc : http://www.cctld.nc/ @@ -4178,16 +4201,16 @@ net // nf : https://www.iana.org/domains/root/db/nf.html nf -com.nf -net.nf -per.nf -rec.nf -web.nf arts.nf +com.nf firm.nf info.nf +net.nf other.nf +per.nf +rec.nf store.nf +web.nf // ng : http://www.nira.org.ng/index.php/join-us/register-ng-domain/189-nira-slds ng @@ -4220,8 +4243,7 @@ org.ni web.ni // nl : https://www.iana.org/domains/root/db/nl.html -// https://www.sidn.nl/ -// ccTLD for the Netherlands +// https://www.sidn.nl/ nl // no : https://www.norid.no/en/om-domenenavn/regelverk-for-no/ @@ -4232,18 +4254,18 @@ nl no // Norid category second level domains : https://www.norid.no/en/om-domenenavn/regelverk-for-no/vedlegg-c/ fhs.no -vgs.no -fylkesbibl.no folkebibl.no -museum.no +fylkesbibl.no idrett.no +museum.no priv.no +vgs.no // Norid category second-level domains managed by parties other than Norid : https://www.norid.no/en/om-domenenavn/regelverk-for-no/vedlegg-d/ +dep.no +herad.no +kommune.no mil.no stat.no -dep.no -kommune.no -herad.no // Norid geographical second level domains : https://www.norid.no/en/om-domenenavn/regelverk-for-no/vedlegg-b/ // counties aa.no @@ -4295,10 +4317,10 @@ akrehamn.no algard.no ålgård.no arna.no -brumunddal.no -bryne.no bronnoysund.no brønnøysund.no +brumunddal.no +bryne.no drobak.no drøbak.no egersund.no @@ -4342,27 +4364,32 @@ tananger.no tranby.no vossevangen.no // communities +aarborte.no +aejrie.no afjord.no åfjord.no agdenes.no +nes.akershus.no +aknoluokta.no +ákŋoluokta.no al.no ål.no +alaheadju.no +álaheadju.no alesund.no ålesund.no alstahaug.no alta.no áltá.no -alaheadju.no -álaheadju.no alvdal.no amli.no åmli.no amot.no åmot.no +andasuolo.no andebu.no andoy.no andøy.no -andasuolo.no ardal.no årdal.no aremark.no @@ -4372,9 +4399,9 @@ aseral.no åseral.no asker.no askim.no -askvoll.no askoy.no askøy.no +askvoll.no asnes.no åsnes.no audnedaln.no @@ -4387,27 +4414,37 @@ austevoll.no austrheim.no averoy.no averøy.no -balestrand.no -ballangen.no -balat.no -bálát.no -balsfjord.no +badaddja.no +bådåddjå.no +bærum.no +bahcavuotna.no +báhcavuotna.no bahccavuotna.no báhccavuotna.no -bamble.no -bardu.no -beardu.no -beiarn.no -bajddar.no -bájddar.no baidar.no báidár.no +bajddar.no +bájddar.no +balat.no +bálát.no +balestrand.no +ballangen.no +balsfjord.no +bamble.no +bardu.no +barum.no +batsfjord.no +båtsfjord.no +bearalvahki.no +bearalváhki.no +beardu.no +beiarn.no berg.no bergen.no berlevag.no berlevåg.no -bearalvahki.no -bearalváhki.no +bievat.no +bievát.no bindal.no birkenes.no bjarkoy.no @@ -4416,36 +4453,32 @@ bjerkreim.no bjugn.no bodo.no bodø.no -badaddja.no -bådåddjå.no -budejju.no bokn.no +bomlo.no +bømlo.no bremanger.no bronnoy.no brønnøy.no +budejju.no +nes.buskerud.no bygland.no bykle.no -barum.no -bærum.no -bo.telemark.no -bø.telemark.no -bo.nordland.no -bø.nordland.no -bievat.no -bievát.no -bomlo.no -bømlo.no -batsfjord.no -båtsfjord.no -bahcavuotna.no -báhcavuotna.no +cahcesuolo.no +čáhcesuolo.no +davvenjarga.no +davvenjárga.no +davvesiida.no +deatnu.no +dielddanuorri.no +divtasvuodna.no +divttasvuotna.no +donna.no +dønna.no dovre.no drammen.no drangedal.no dyroy.no dyrøy.no -donna.no -dønna.no eid.no eidfjord.no eidsberg.no @@ -4457,14 +4490,12 @@ enebakk.no engerdal.no etne.no etnedal.no -evenes.no evenassi.no evenášši.no +evenes.no evje-og-hornnes.no farsund.no fauske.no -fuossko.no -fuoisku.no fedje.no fet.no finnoy.no @@ -4472,33 +4503,40 @@ finnøy.no fitjar.no fjaler.no fjell.no +fla.no +flå.no flakstad.no flatanger.no flekkefjord.no flesberg.no flora.no -fla.no -flå.no folldal.no +forde.no +førde.no forsand.no fosnes.no +fræna.no +frana.no frei.no frogn.no froland.no frosta.no -frana.no -fræna.no froya.no frøya.no +fuoisku.no +fuossko.no fusa.no fyresdal.no -forde.no -førde.no +gaivuotna.no +gáivuotna.no +galsa.no +gálsá.no gamvik.no gangaviika.no gáŋgaviika.no gaular.no gausdal.no +giehtavuoatna.no gildeskal.no gildeskål.no giske.no @@ -4516,38 +4554,37 @@ granvin.no gratangen.no grimstad.no grong.no -kraanghke.no -kråanghke.no grue.no gulen.no +guovdageaidnu.no +ha.no +hå.no +habmer.no +hábmer.no hadsel.no +hægebostad.no +hagebostad.no halden.no halsa.no hamar.no hamaroy.no -habmer.no -hábmer.no -hapmir.no -hápmir.no -hammerfest.no hammarfeasta.no hámmárfeasta.no +hammerfest.no +hapmir.no +hápmir.no haram.no hareid.no harstad.no hasvik.no -aknoluokta.no -ákŋoluokta.no hattfjelldal.no -aarborte.no haugesund.no +os.hedmark.no +valer.hedmark.no +våler.hedmark.no hemne.no hemnes.no hemsedal.no -heroy.more-og-romsdal.no -herøy.møre-og-romsdal.no -heroy.nordland.no -herøy.nordland.no hitra.no hjartdal.no hjelmeland.no @@ -4559,96 +4596,95 @@ hole.no holmestrand.no holtalen.no holtålen.no +os.hordaland.no hornindal.no horten.no -hurdal.no -hurum.no -hvaler.no -hyllestad.no -hagebostad.no -hægebostad.no hoyanger.no høyanger.no hoylandet.no høylandet.no -ha.no -hå.no +hurdal.no +hurum.no +hvaler.no +hyllestad.no ibestad.no inderoy.no inderøy.no iveland.no +ivgu.no jevnaker.no -jondal.no jolster.no jølster.no -karasjok.no +jondal.no +kafjord.no +kåfjord.no karasjohka.no kárášjohka.no +karasjok.no karlsoy.no -galsa.no -gálsá.no karmoy.no karmøy.no kautokeino.no -guovdageaidnu.no -klepp.no klabu.no klæbu.no +klepp.no kongsberg.no kongsvinger.no +kraanghke.no +kråanghke.no kragero.no kragerø.no kristiansand.no kristiansund.no krodsherad.no krødsherad.no +kvæfjord.no +kvænangen.no +kvafjord.no kvalsund.no -rahkkeravju.no -ráhkkerávju.no kvam.no +kvanangen.no kvinesdal.no kvinnherad.no kviteseid.no kvitsoy.no kvitsøy.no -kvafjord.no -kvæfjord.no -giehtavuoatna.no -kvanangen.no -kvænangen.no -navuotna.no -návuotna.no -kafjord.no -kåfjord.no -gaivuotna.no -gáivuotna.no +laakesvuemie.no +lærdal.no +lahppi.no +láhppi.no +lardal.no larvik.no -lavangen.no lavagis.no -loabat.no -loabát.no +lavangen.no +leangaviika.no +leaŋgaviika.no lebesby.no -davvesiida.no leikanger.no leirfjord.no leka.no leksvik.no lenvik.no -leangaviika.no -leaŋgaviika.no +lerdal.no lesja.no levanger.no lier.no lierne.no lillehammer.no lillesand.no -lindesnes.no lindas.no lindås.no +lindesnes.no +loabat.no +loabát.no +lodingen.no +lødingen.no lom.no loppa.no -lahppi.no -láhppi.no +lorenskog.no +lørenskog.no +loten.no +løten.no lund.no lunner.no luroy.no @@ -4656,25 +4692,19 @@ lurøy.no luster.no lyngdal.no lyngen.no -ivgu.no -lardal.no -lerdal.no -lærdal.no -lodingen.no -lødingen.no -lorenskog.no -lørenskog.no -loten.no -løten.no +malatvuopmi.no +málatvuopmi.no +malselv.no +målselv.no malvik.no -masoy.no -måsøy.no -muosat.no -muosát.no mandal.no marker.no marnardal.no masfjorden.no +masoy.no +måsøy.no +matta-varjjat.no +mátta-várjjat.no meland.no meldal.no melhus.no @@ -4682,39 +4712,39 @@ meloy.no meløy.no meraker.no meråker.no -moareke.no -moåreke.no midsund.no midtre-gauldal.no +moareke.no +moåreke.no modalen.no modum.no molde.no +heroy.more-og-romsdal.no +sande.more-og-romsdal.no +herøy.møre-og-romsdal.no +sande.møre-og-romsdal.no moskenes.no moss.no mosvik.no -malselv.no -målselv.no -malatvuopmi.no -málatvuopmi.no -namdalseid.no -aejrie.no -namsos.no -namsskogan.no +muosat.no +muosát.no naamesjevuemie.no nååmesjevuemie.no -laakesvuemie.no +nærøy.no +namdalseid.no +namsos.no +namsskogan.no nannestad.no -narvik.no +naroy.no narviika.no +narvik.no naustdal.no +navuotna.no +návuotna.no nedre-eiker.no -nes.akershus.no -nes.buskerud.no nesna.no nesodden.no nesseby.no -unjarga.no -unjárga.no nesset.no nissedal.no nittedal.no @@ -4723,21 +4753,20 @@ nord-fron.no nord-odal.no norddal.no nordkapp.no -davvenjarga.no -davvenjárga.no +bo.nordland.no +bø.nordland.no +heroy.nordland.no +herøy.nordland.no nordre-land.no nordreisa.no -raisa.no -ráisa.no nore-og-uvdal.no notodden.no -naroy.no -nærøy.no notteroy.no nøtterøy.no odda.no oksnes.no øksnes.no +omasvuotna.no oppdal.no oppegard.no oppegård.no @@ -4748,11 +4777,11 @@ orskog.no ørskog.no orsta.no ørsta.no -os.hedmark.no -os.hordaland.no osen.no osteroy.no osterøy.no +valer.ostfold.no +våler.østfold.no ostre-toten.no østre-toten.no overhalla.no @@ -4768,11 +4797,18 @@ porsanger.no porsangu.no porsáŋgu.no porsgrunn.no +rade.no +råde.no radoy.no radøy.no +rælingen.no +rahkkeravju.no +ráhkkerávju.no +raisa.no +ráisa.no rakkestad.no +ralingen.no rana.no -ruovat.no randaberg.no rauma.no rendalen.no @@ -4783,16 +4819,14 @@ rindal.no ringebu.no ringerike.no ringsaker.no -rissa.no risor.no risør.no +rissa.no roan.no -rollag.no -rygge.no -ralingen.no -rælingen.no rodoy.no rødøy.no +rollag.no +romsa.no romskog.no rømskog.no roros.no @@ -4803,18 +4837,14 @@ royken.no røyken.no royrvik.no røyrvik.no -rade.no -råde.no +ruovat.no +rygge.no salangen.no -siellak.no -saltdal.no salat.no -sálát.no sálat.no +sálát.no +saltdal.no samnanger.no -sande.more-og-romsdal.no -sande.møre-og-romsdal.no -sande.vestfold.no sandefjord.no sandnes.no sandoy.no @@ -4826,39 +4856,60 @@ sel.no selbu.no selje.no seljord.no +siellak.no sigdal.no siljan.no sirdal.no +skanit.no +skánit.no +skanland.no +skånland.no skaun.no skedsmo.no ski.no skien.no -skiptvet.no -skjervoy.no -skjervøy.no skierva.no skiervá.no +skiptvet.no skjak.no skjåk.no +skjervoy.no +skjervøy.no skodje.no -skanland.no -skånland.no -skanit.no -skánit.no smola.no smøla.no -snillfjord.no -snasa.no -snåsa.no -snoasa.no snaase.no snåase.no +snasa.no +snåsa.no +snillfjord.no +snoasa.no sogndal.no +sogne.no +søgne.no sokndal.no sola.no solund.no +somna.no +sømna.no +sondre-land.no +søndre-land.no songdalen.no +sor-aurdal.no +sør-aurdal.no +sor-fron.no +sør-fron.no +sor-odal.no +sør-odal.no +sor-varanger.no +sør-varanger.no +sorfold.no +sørfold.no +sorreisa.no +sørreisa.no sortland.no +sorum.no +sørum.no spydeberg.no stange.no stavanger.no @@ -4871,7 +4922,6 @@ stor-elvdal.no stord.no stordal.no storfjord.no -omasvuotna.no strand.no stranda.no stryn.no @@ -4883,72 +4933,55 @@ surnadal.no sveio.no svelvik.no sykkylven.no -sogne.no -søgne.no -somna.no -sømna.no -sondre-land.no -søndre-land.no -sor-aurdal.no -sør-aurdal.no -sor-fron.no -sør-fron.no -sor-odal.no -sør-odal.no -sor-varanger.no -sør-varanger.no -matta-varjjat.no -mátta-várjjat.no -sorfold.no -sørfold.no -sorreisa.no -sørreisa.no -sorum.no -sørum.no tana.no -deatnu.no +bo.telemark.no +bø.telemark.no time.no tingvoll.no tinn.no tjeldsund.no -dielddanuorri.no tjome.no tjøme.no tokke.no tolga.no +tonsberg.no +tønsberg.no torsken.no +træna.no +trana.no tranoy.no tranøy.no -tromso.no -tromsø.no -tromsa.no -romsa.no -trondheim.no troandin.no -trysil.no -trana.no -træna.no trogstad.no trøgstad.no +tromsa.no +tromso.no +tromsø.no +trondheim.no +trysil.no tvedestrand.no tydal.no tynset.no tysfjord.no -divtasvuodna.no -divttasvuotna.no tysnes.no -tysvar.no tysvær.no -tonsberg.no -tønsberg.no +tysvar.no ullensaker.no ullensvang.no ulvik.no +unjarga.no +unjárga.no utsira.no +vaapste.no vadso.no vadsø.no -cahcesuolo.no -čáhcesuolo.no +værøy.no +vaga.no +vågå.no +vagan.no +vågan.no +vagsoy.no +vågsøy.no vaksdal.no valle.no vang.no @@ -4957,8 +4990,8 @@ vardo.no vardø.no varggat.no várggát.no +varoy.no vefsn.no -vaapste.no vega.no vegarshei.no vegårshei.no @@ -4966,6 +4999,7 @@ vennesla.no verdal.no verran.no vestby.no +sande.vestfold.no vestnes.no vestre-slidre.no vestre-toten.no @@ -4975,21 +5009,9 @@ vevelstad.no vik.no vikna.no vindafjord.no +voagat.no volda.no voss.no -varoy.no -værøy.no -vagan.no -vågan.no -voagat.no -vagsoy.no -vågsøy.no -vaga.no -vågå.no -valer.ostfold.no -våler.østfold.no -valer.hedmark.no -våler.hedmark.no // np : http://www.mos.com.np/register.html *.np @@ -4998,12 +5020,12 @@ våler.hedmark.no // Submitted by registry nr biz.nr -info.nr -gov.nr -edu.nr -org.nr -net.nr com.nr +edu.nr +gov.nr +info.nr +net.nr +org.nr // nu : https://www.iana.org/domains/root/db/nu.html nu @@ -5021,8 +5043,8 @@ health.nz iwi.nz kiwi.nz maori.nz -mil.nz māori.nz +mil.nz net.nz org.nz parliament.nz @@ -5050,53 +5072,51 @@ org // Some additional second level "domains" resolve directly as hostnames, such as // pannet.pa, so we add a rule for "pa". pa +abo.pa ac.pa -gob.pa com.pa +edu.pa +gob.pa +ing.pa +med.pa +net.pa +nom.pa org.pa sld.pa -edu.pa -net.pa -ing.pa -abo.pa -med.pa -nom.pa // pe : https://www.nic.pe/InformeFinalComision.pdf pe +com.pe edu.pe gob.pe -nom.pe mil.pe -org.pe -com.pe net.pe +nom.pe +org.pe // pf : http://www.gobin.info/domainname/formulaire-pf.pdf pf com.pf -org.pf edu.pf +org.pf // pg : https://www.iana.org/domains/root/db/pg.html *.pg -// ph : http://www.domains.ph/FAQ2.asp +// ph : https://www.iana.org/domains/root/db/ph.html // Submitted by registry ph com.ph -net.ph -org.ph -gov.ph edu.ph -ngo.ph -mil.ph +gov.ph i.ph +mil.ph +net.ph +ngo.ph +org.ph -// pk : https://pknic.net.pk -// pk : http://pk5.pknic.net.pk/pk5/msgNamepk.PK + grandfathered old gon.pk -// Contact Email: staff@pknic.net.pk PKNIC .PK Registry - +// pk : https://pk5.pknic.net.pk/pk5/msgNamepk.PK +// Contact Email: staff@pknic.net.pk pk ac.pk biz.pk @@ -5107,7 +5127,6 @@ gkp.pk gob.pk gog.pk gok.pk -gon.pk gop.pk gos.pk gov.pk @@ -5115,15 +5134,15 @@ net.pk org.pk web.pk -// pl http://www.dns.pl/english/index.html -// Submitted by registry +// pl : https://www.dns.pl/en/ +// Confirmed by registry 2024-11-18 pl com.pl net.pl org.pl -// pl functional domains (http://www.dns.pl/english/index.html) -aid.pl +// pl functional domains : https://www.dns.pl/en/list_of_functional_domain_names agro.pl +aid.pl atm.pl auto.pl biz.pl @@ -5132,8 +5151,8 @@ gmina.pl gsm.pl info.pl mail.pl -miasta.pl media.pl +miasta.pl mil.pl nieruchomosci.pl nom.pl @@ -5152,7 +5171,8 @@ tm.pl tourism.pl travel.pl turystyka.pl -// Government domains +// Government domains : https://www.dns.pl/informacje_o_rejestracji_domen_gov_pl +// In accordance with the .gov.pl Domain Name Regulations : https://www.dns.pl/regulamin_gov_pl gov.pl ap.gov.pl griw.gov.pl @@ -5209,7 +5229,7 @@ wuoz.gov.pl wzmiuw.gov.pl zp.gov.pl zpisdn.gov.pl -// pl regional domains (http://www.dns.pl/english/index.html) +// pl regional domains : https://www.dns.pl/en/list_of_regional_domain_names augustow.pl babia-gora.pl bedzin.pl @@ -5236,11 +5256,11 @@ jaworzno.pl jelenia-gora.pl jgora.pl kalisz.pl -kazimierz-dolny.pl karpacz.pl kartuzy.pl kaszuby.pl katowice.pl +kazimierz-dolny.pl kepno.pl ketrzyn.pl klodzko.pl @@ -5283,8 +5303,8 @@ pisz.pl podhale.pl podlasie.pl polkowice.pl -pomorze.pl pomorskie.pl +pomorze.pl prochowice.pl pruszkow.pl przeworsk.pl @@ -5295,11 +5315,11 @@ rybnik.pl rzeszow.pl sanok.pl sejny.pl +skoczow.pl slask.pl slupsk.pl sosnowiec.pl stalowa-wola.pl -skoczow.pl starachowice.pl stargard.pl suwalki.pl @@ -5333,33 +5353,33 @@ zgorzelec.pl // pm : https://www.afnic.fr/wp-media/uploads/2022/12/afnic-naming-policy-2023-01-01.pdf pm -// pn : http://www.government.pn/PnRegistry/policies.htm +// pn : https://www.iana.org/domains/root/db/pn.html pn -gov.pn co.pn -org.pn edu.pn +gov.pn net.pn +org.pn // post : https://www.iana.org/domains/root/db/post.html post // pr : http://www.nic.pr/index.asp?f=1 pr +biz.pr com.pr +edu.pr +gov.pr +info.pr +isla.pr +name.pr net.pr org.pr -gov.pr -edu.pr -isla.pr pro.pr -biz.pr -info.pr -name.pr // these aren't mentioned on nic.pr, but on https://www.iana.org/domains/root/db/pr.html +ac.pr est.pr prof.pr -ac.pr // pro : http://registry.pro/get-pro pro @@ -5378,35 +5398,31 @@ recht.pro // ps : https://www.iana.org/domains/root/db/ps.html // http://www.nic.ps/registration/policy.html#reg ps +com.ps edu.ps gov.ps -sec.ps -plo.ps -com.ps -org.ps net.ps +org.ps +plo.ps +sec.ps // pt : https://www.dns.pt/en/domain/pt-terms-and-conditions-registration-rules/ pt -net.pt -gov.pt -org.pt -edu.pt -int.pt -publ.pt com.pt +edu.pt +gov.pt +int.pt +net.pt nome.pt +org.pt +publ.pt // pw : https://www.iana.org/domains/root/db/pw.html +// Confirmed by registry in private correspondence with @dnsguru 2024-12-09 pw -co.pw -ne.pw -or.pw -ed.pw -go.pw -belau.pw +gov.pw -// py : http://www.nic.py/pautas.html#seccion_9 +// py : https://www.iana.org/domains/root/db/py.html // Submitted by registry py com.py @@ -5429,10 +5445,11 @@ org.qa sch.qa // re : https://www.afnic.fr/wp-media/uploads/2022/12/afnic-naming-policy-2023-01-01.pdf +// Confirmed by registry 2024-11-18 re +// Closed for registration on 2013-03-15 but domains are still maintained asso.re com.re -nom.re // ro : http://www.rotld.ro/ ro @@ -5461,7 +5478,7 @@ org.rs // Submitted by George Georgievsky ru -// rw : https://www.ricta.org.rw/sites/default/files/resources/registry_registrar_contract_0.pdf +// rw : https://www.iana.org/domains/root/db/rw.html rw ac.rw co.rw @@ -5474,12 +5491,12 @@ org.rw // sa : http://www.nic.net.sa/ sa com.sa -net.sa -org.sa +edu.sa gov.sa med.sa +net.sa +org.sa pub.sa -edu.sa sch.sa // sb : http://www.sbnic.net.sb/ @@ -5494,25 +5511,26 @@ org.sb // sc : http://www.nic.sc/ sc com.sc +edu.sc gov.sc net.sc org.sc -edu.sc -// sd : http://www.isoc.sd/sudanic.isoc.sd/billing_pricing.htm +// sd : https://www.iana.org/domains/root/db/sd.html // Submitted by registry sd com.sd -net.sd -org.sd edu.sd -med.sd -tv.sd gov.sd info.sd +med.sd +net.sd +org.sd +tv.sd // se : https://www.iana.org/domains/root/db/se.html -// Submitted by registry +// https://data.internetstiftelsen.se/barred_domains_list.txt -> Second level domains & Sub-domains +// Confirmed by Registry Services 2024-11-20 se a.se ac.se @@ -5554,22 +5572,22 @@ x.se y.se z.se -// sg : http://www.nic.net.sg/page/registration-policies-procedures-and-guidelines +// sg : https://www.sgnic.sg/domain-registration/sg-categories-rules +// Confirmed by registry 2024-11-19 sg com.sg +edu.sg +gov.sg net.sg org.sg -gov.sg -edu.sg -per.sg // sh : http://nic.sh/rules.htm sh com.sh -net.sh gov.sh -org.sh mil.sh +net.sh +org.sh // si : https://www.iana.org/domains/root/db/si.html si @@ -5579,16 +5597,15 @@ si sj // sk : https://www.iana.org/domains/root/db/sk.html -// list of 2nd level domains ? sk // sl : http://www.nic.sl // Submitted by registry sl com.sl -net.sl edu.sl gov.sl +net.sl org.sl // sm : https://www.iana.org/domains/root/db/sm.html @@ -5620,6 +5637,7 @@ sr // Submitted by registry ss biz.ss +co.ss com.ss edu.ss gov.ss @@ -5645,7 +5663,7 @@ store.st // su : https://www.iana.org/domains/root/db/su.html su -// sv : http://www.svnet.org.sv/niveldos.pdf +// sv : https://www.iana.org/domains/root/db/sv.html sv com.sv edu.sv @@ -5659,20 +5677,19 @@ sx gov.sx // sy : https://www.iana.org/domains/root/db/sy.html -// see also: http://www.gobin.info/domainname/sy.doc sy +com.sy edu.sy gov.sy -net.sy mil.sy -com.sy +net.sy org.sy // sz : https://www.iana.org/domains/root/db/sz.html // http://www.sispa.org.sz/ sz -co.sz ac.sz +co.sz org.sz // tc : https://www.iana.org/domains/root/db/tc.html @@ -5681,7 +5698,7 @@ tc // td : https://www.iana.org/domains/root/db/td.html td -// tel: https://www.iana.org/domains/root/db/tel.html +// tel : https://www.iana.org/domains/root/db/tel.html // http://www.telnic.org/ tel @@ -5728,16 +5745,17 @@ tk tl gov.tl -// tm : http://www.nic.tm/local.html +// tm : https://www.nic.tm/local.html +// Confirmed by registry 2024-11-19 tm -com.tm co.tm -org.tm -net.tm -nom.tm +com.tm +edu.tm gov.tm mil.tm -edu.tm +net.tm +nom.tm +org.tm // tn : http://www.registre.tn/fr/ // https://whois.ati.tn/ @@ -5760,11 +5778,11 @@ tourism.tn // Submitted by registry to com.to +edu.to gov.to +mil.to net.to org.to -edu.to -mil.to // tr : https://nic.tr/ // https://nic.tr/forms/eng/policies.pdf @@ -5780,9 +5798,9 @@ edu.tr gen.tr gov.tr info.tr -mil.tr k12.tr kep.tr +mil.tr name.tr net.tr org.tr @@ -5796,25 +5814,20 @@ nc.tr // Used by government agencies of Northern Cyprus gov.nc.tr -// tt : http://www.nic.tt/ +// tt : https://www.nic.tt/ +// Confirmed by registry 2024-11-19 tt +biz.tt co.tt com.tt -org.tt -net.tt -biz.tt -info.tt -pro.tt -int.tt -coop.tt -jobs.tt -mobi.tt -travel.tt -museum.tt -aero.tt -name.tt -gov.tt edu.tt +gov.tt +info.tt +mil.tt +name.tt +net.tt +org.tt +pro.tt // tv : https://www.iana.org/domains/root/db/tv.html // Not listing any 2LDs as reserved since none seem to exist in practice, @@ -5822,20 +5835,19 @@ edu.tt tv // tw : https://www.iana.org/domains/root/db/tw.html +// https://twnic.tw/dnservice_catag.php +// Confirmed by registry 2024-11-26 tw -edu.tw -gov.tw -mil.tw +club.tw com.tw +ebiz.tw +edu.tw +game.tw +gov.tw +idv.tw +mil.tw net.tw org.tw -idv.tw -game.tw -ebiz.tw -club.tw -網路.tw -組織.tw -商業.tw // tz : http://www.tznic.or.tz/index.php/domains // Submitted by registry @@ -5941,14 +5953,14 @@ zt.ua // ug : https://www.registry.co.ug/ ug -co.ug -or.ug ac.ug -sc.ug +co.ug +com.ug go.ug ne.ug -com.ug +or.ug org.ug +sc.ug // uk : https://www.iana.org/domains/root/db/uk.html // Submitted by registry @@ -5966,13 +5978,12 @@ police.uk *.sch.uk // us : https://www.iana.org/domains/root/db/us.html +// Confirmed via the .us zone file by William Harrison 2024-12-10 us dni.us -fed.us isa.us -kids.us nsn.us -// us geographic names +// Geographic Names ak.us al.us ar.us @@ -6021,9 +6032,9 @@ sd.us tn.us tx.us ut.us +va.us vi.us vt.us -va.us wa.us wi.us wv.us @@ -6046,7 +6057,7 @@ k12.dc.us k12.fl.us k12.ga.us k12.gu.us -// k12.hi.us Bug 614565 - Hawaii has a state-wide DOE login +// k12.hi.us - Bug 614565 - Hawaii has a state-wide DOE login k12.ia.us k12.id.us k12.il.us @@ -6063,7 +6074,7 @@ k12.mo.us k12.ms.us k12.mt.us k12.nc.us -// k12.nd.us Bug 1028347 - Removed at request of Travis Rosso +// k12.nd.us - Bug 1028347 - Removed at request of Travis Rosso k12.ne.us k12.nh.us k12.nj.us @@ -6075,28 +6086,36 @@ k12.ok.us k12.or.us k12.pa.us k12.pr.us -// k12.ri.us Removed at request of Kim Cournoyer +// k12.ri.us - Removed at request of Kim Cournoyer k12.sc.us -// k12.sd.us Bug 934131 - Removed at request of James Booze +// k12.sd.us - Bug 934131 - Removed at request of James Booze k12.tn.us k12.tx.us k12.ut.us +k12.va.us k12.vi.us k12.vt.us -k12.va.us k12.wa.us k12.wi.us -// k12.wv.us Bug 947705 - Removed at request of Verne Britton -k12.wy.us +// k12.wv.us - Bug 947705 - Removed at request of Verne Britton cc.ak.us +lib.ak.us cc.al.us +lib.al.us cc.ar.us +lib.ar.us cc.as.us +lib.as.us cc.az.us +lib.az.us cc.ca.us +lib.ca.us cc.co.us +lib.co.us cc.ct.us +lib.ct.us cc.dc.us +lib.dc.us cc.de.us cc.fl.us cc.ga.us @@ -6136,23 +6155,15 @@ cc.sd.us cc.tn.us cc.tx.us cc.ut.us +cc.va.us cc.vi.us cc.vt.us -cc.va.us cc.wa.us cc.wi.us cc.wv.us cc.wy.us -lib.ak.us -lib.al.us -lib.ar.us -lib.as.us -lib.az.us -lib.ca.us -lib.co.us -lib.ct.us -lib.dc.us -// lib.de.us Issue #243 - Moved to Private section at request of Ed Moore +k12.wy.us +// lib.de.us - Issue #243 - Moved to Private section at request of Ed Moore lib.fl.us lib.ga.us lib.gu.us @@ -6191,23 +6202,23 @@ lib.sd.us lib.tn.us lib.tx.us lib.ut.us +lib.va.us lib.vi.us lib.vt.us -lib.va.us lib.wa.us lib.wi.us -// lib.wv.us Bug 941670 - Removed at request of Larry W Arnold +// lib.wv.us - Bug 941670 - Removed at request of Larry W Arnold lib.wy.us // k12.ma.us contains school districts in Massachusetts. The 4LDs are -// managed independently except for private (PVT), charter (CHTR) and -// parochial (PAROCH) schools. Those are delegated directly to the -// 5LD operators. -pvt.k12.ma.us +// managed independently except for private (PVT), charter (CHTR) and +// parochial (PAROCH) schools. Those are delegated directly to the +// 5LD operators. chtr.k12.ma.us paroch.k12.ma.us +pvt.k12.ma.us // Merit Network, Inc. maintains the registry for =~ /(k12|cc|lib).mi.us/ and the following -// see also: http://domreg.merit.edu -// see also: whois -h whois.domreg.merit.edu help +// see also: https://domreg.merit.edu : domreg@merit.edu +// see also: whois -h whois.domreg.merit.edu help ann-arbor.mi.us cog.mi.us dst.mi.us @@ -6240,11 +6251,11 @@ va // Submitted by registry vc com.vc -net.vc -org.vc +edu.vc gov.vc mil.vc -edu.vc +net.vc +org.vc // ve : https://registro.nic.ve/ // Submitted by registry nic@nic.ve and nicve@conatel.gob.ve @@ -6271,12 +6282,11 @@ tec.ve web.ve // vg : https://www.iana.org/domains/root/db/vg.html +// Confirmed by registry 2025-01-10 vg +edu.vg -// vi : http://www.nic.vi/newdomainform.htm -// http://www.nic.vi/Domain_Rules/body_domain_rules.html indicates some other -// TLDs are "reserved", such as edu.vi and gov.vi, but doesn't actually say they -// are available for registration (which they do not seem to be). +// vi : https://www.iana.org/domains/root/db/vi.html vi co.vi com.vi @@ -6383,10 +6393,10 @@ wf // http://samoanic.ws/index.dhtml ws com.ws +edu.ws +gov.ws net.ws org.ws -gov.ws -edu.ws // yt : https://www.afnic.fr/wp-media/uploads/2022/12/afnic-naming-policy-2023-01-01.pdf yt @@ -6421,12 +6431,12 @@ yt // xn--fiqs8s ("Zhongguo/China", Chinese, Simplified) : CN // CNNIC -// http://cnnic.cn/html/Dir/2005/10/11/3218.htm +// https://www.cnnic.cn/11/192/index.html 中国 // xn--fiqz9s ("Zhongguo/China", Chinese, Traditional) : CN // CNNIC -// http://cnnic.cn/html/Dir/2005/10/11/3218.htm +// https://www.cnnic.com.cn/AU/MediaC/Announcement/201609/t20160905_54470.htm 中國 // xn--lgbbat1ad8j ("Algeria/Al Jazair", Arabic) : DZ @@ -6459,12 +6469,12 @@ yt // Submitted by registry // https://www.hkirc.hk/content.jsp?id=30#!/34 香港 -公司.香港 -教育.香港 -政府.香港 個人.香港 -網絡.香港 +公司.香港 +政府.香港 +教育.香港 組織.香港 +網絡.香港 // xn--2scrj9c ("Bharat", Kannada) : IN // India @@ -6595,12 +6605,12 @@ yt // xn--90a3ac ("srb", Cyrillic) : RS // https://www.rnids.rs/en/domains/national-domains срб -пр.срб -орг.срб +ак.срб обр.срб од.срб +орг.срб +пр.срб упр.срб -ак.срб // xn--p1ai ("rf", Russian-Cyrillic) : RU // https://cctld.ru/files/pdf/docs/en/rules_ru-rf.pdf @@ -6615,7 +6625,7 @@ yt // http://www.nic.net.sa/ السعودية -// xn--mgberp4a5d4a87g ("AlSaudiah", Arabic, variant) : SA +// xn--mgberp4a5d4a87g ("AlSaudiah", Arabic, variant): SA السعودیة // xn--mgbqly7c0a67fbc ("AlSaudiah", Arabic, variant) : SA @@ -6643,11 +6653,11 @@ yt // xn--o3cw4h ("Thai", Thai) : TH // http://www.thnic.co.th ไทย -ศึกษา.ไทย -ธุรกิจ.ไทย -รัฐบาล.ไทย ทหาร.ไทย +ธุรกิจ.ไทย เน็ต.ไทย +รัฐบาล.ไทย +ศึกษา.ไทย องค์กร.ไทย // xn--pgbs0dh ("Tunisia", Arabic) : TN @@ -6655,7 +6665,7 @@ yt تونس // xn--kpry57d ("Taiwan", Chinese, Traditional) : TW -// http://www.twnic.net/english/dn/dn_07a.htm +// https://twnic.tw/dnservice_catag.php 台灣 // xn--kprw13d ("Taiwan", Chinese, Simplified) : TW @@ -6679,11 +6689,11 @@ ye com.ye edu.ye gov.ye -net.ye mil.ye +net.ye org.ye -// za : https://www.zadna.org.za/content/page/domain-information/ +// za : https://www.iana.org/domains/root/db/za.html ac.za agric.za alt.za @@ -6729,7 +6739,7 @@ org.zw // newGTLDs -// List of new gTLDs imported from https://www.icann.org/resources/registries/gtlds/v2/gtlds.json on 2024-08-25T15:14:38Z +// List of new gTLDs imported from https://www.icann.org/resources/registries/gtlds/v2/gtlds.json on 2024-12-23T15:16:32Z // This list is auto-generated, don't edit it manually. // aaa : American Automobile Association, Inc. // https://www.iana.org/domains/root/db/aaa.html @@ -6959,7 +6969,7 @@ art // https://www.iana.org/domains/root/db/arte.html arte -// asda : Wal-Mart Stores, Inc. +// asda : Asda Stores Limited // https://www.iana.org/domains/root/db/asda.html asda @@ -7675,10 +7685,6 @@ cymru // https://www.iana.org/domains/root/db/cyou.html cyou -// dabur : Dabur India Limited -// https://www.iana.org/domains/root/db/dabur.html -dabur - // dad : Charleston Road Registry Inc. // https://www.iana.org/domains/root/db/dad.html dad @@ -8411,11 +8417,11 @@ haus // https://www.iana.org/domains/root/db/hbo.html hbo -// hdfc : HOUSING DEVELOPMENT FINANCE CORPORATION LIMITED +// hdfc : HDFC BANK LIMITED // https://www.iana.org/domains/root/db/hdfc.html hdfc -// hdfcbank : HDFC Bank Limited +// hdfcbank : HDFC BANK LIMITED // https://www.iana.org/domains/root/db/hdfcbank.html hdfcbank @@ -9123,6 +9129,10 @@ men // https://www.iana.org/domains/root/db/menu.html menu +// merck : Merck Registry Holdings, Inc. +// https://www.iana.org/domains/root/db/merck.html +merck + // merckmsd : MSD Registry Holdings, Inc. // https://www.iana.org/domains/root/db/merckmsd.html merckmsd @@ -9335,7 +9345,7 @@ nissay // https://www.iana.org/domains/root/db/nokia.html nokia -// norton : NortonLifeLock Inc. +// norton : Gen Digital Inc. // https://www.iana.org/domains/root/db/norton.html norton @@ -9343,7 +9353,7 @@ norton // https://www.iana.org/domains/root/db/now.html now -// nowruz : Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti. +// nowruz // https://www.iana.org/domains/root/db/nowruz.html nowruz @@ -9467,7 +9477,7 @@ panasonic // https://www.iana.org/domains/root/db/paris.html paris -// pars : Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti. +// pars // https://www.iana.org/domains/root/db/pars.html pars @@ -10023,7 +10033,7 @@ sharp // https://www.iana.org/domains/root/db/shell.html shell -// shia : Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti. +// shia // https://www.iana.org/domains/root/db/shia.html shia @@ -10075,7 +10085,7 @@ ski // https://www.iana.org/domains/root/db/skin.html skin -// sky : Sky International AG +// sky : Sky UK Limited // https://www.iana.org/domains/root/db/sky.html sky @@ -10299,7 +10309,7 @@ tax // https://www.iana.org/domains/root/db/taxi.html taxi -// tci : Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti. +// tci // https://www.iana.org/domains/root/db/tci.html tci @@ -10783,7 +10793,7 @@ xin // https://www.iana.org/domains/root/db/xn--3bst00m.html 集团 -// xn--3ds443g : TLD REGISTRY LIMITED OY +// xn--3ds443g : Beijing TLD Registry Technology Limited // https://www.iana.org/domains/root/db/xn--3ds443g.html 在线 @@ -11007,7 +11017,7 @@ xin // https://www.iana.org/domains/root/db/xn--mgbi4ecexp.html كاثوليك -// xn--mgbt3dhd : Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti. +// xn--mgbt3dhd // https://www.iana.org/domains/root/db/xn--mgbt3dhd.html همراه @@ -11139,7 +11149,7 @@ yahoo // https://www.iana.org/domains/root/db/yamaxun.html yamaxun -// yandex : Yandex Europe B.V. +// yandex : ADC Tech Netherlands B.V. // https://www.iana.org/domains/root/db/yandex.html yandex @@ -11197,7 +11207,7 @@ zuerich // (Note: these are in alphabetical order by company name) -// .KRD : http://nic.krd/data/krd/Registration%20Policy.pdf +// .KRD : https://nic.krd co.krd edu.krd @@ -11213,7 +11223,7 @@ zakopane.pl // Submitted by Ed Moore lib.de.us -// 12CHARS: https://12chars.com +// 12CHARS : https://12chars.com // Submitted by Kenny Niehage 12chars.dev 12chars.it @@ -11233,15 +11243,11 @@ ltd.ua a2hosted.com cpserver.com -// AAA workspace : https://aaa.vodka -// Submitted by Kirill Rezraf -aaa.vodka - // Acorn Labs : https://acorn.io // Submitted by Craig Jellick *.on-acorn.io -// ActiveTrail: https://www.activetrail.biz/ +// ActiveTrail : https://www.activetrail.biz/ // Submitted by Ofer Kalaora activetrail.biz @@ -11249,6 +11255,13 @@ activetrail.biz // Submitted by Mark Terrel adaptable.app +// addr.tools : https://addr.tools/ +// Submitted by Brian Shea +myaddr.dev +myaddr.io +dyn.addr.tools +myaddr.tools + // Adobe : https://www.adobe.com/ // Submitted by Ian Boston and Lars Trieloff adobeaemcloud.com @@ -11279,8 +11292,9 @@ airkitapps.com airkitapps-au.com airkitapps.eu -// Aiven: https://aiven.io/ -// Submitted by Etienne Stalmans +// Aiven : https://aiven.io/ +// Submitted by Aiven Security Team +aiven.app aivencloud.com // Akamai : https://www.akamai.com/ @@ -11314,7 +11328,7 @@ barsy.ca // Submitted by Werner Kaltofen kasserver.com -// Altervista: https://www.altervista.org +// Altervista : https://www.altervista.org // Submitted by Carlo Cannas altervista.org @@ -11332,7 +11346,7 @@ myamaze.net // Amazon API Gateway // Submitted by AWS Security -// Reference: 9e37648f-a66c-4655-9ab1-5981f8737197 +// Reference: 6a4f5a95-8c7d-4077-a7af-9cf1abec0a53 execute-api.cn-north-1.amazonaws.com.cn execute-api.cn-northwest-1.amazonaws.com.cn execute-api.af-south-1.amazonaws.com @@ -11346,6 +11360,7 @@ execute-api.ap-southeast-1.amazonaws.com execute-api.ap-southeast-2.amazonaws.com execute-api.ap-southeast-3.amazonaws.com execute-api.ap-southeast-4.amazonaws.com +execute-api.ap-southeast-5.amazonaws.com execute-api.ca-central-1.amazonaws.com execute-api.ca-west-1.amazonaws.com execute-api.eu-central-1.amazonaws.com @@ -11558,7 +11573,7 @@ emrstudio-prod.us-west-2.amazonaws.com // Amazon S3 // Submitted by AWS Security -// Reference: cd5c8b3a-67b7-4b40-9236-c87ce81a3d10 +// Reference: ada5c9df-55e1-4195-a1ce-732d6c81e357 s3.dualstack.cn-north-1.amazonaws.com.cn s3-accesspoint.dualstack.cn-north-1.amazonaws.com.cn s3-website.dualstack.cn-north-1.amazonaws.com.cn @@ -11616,6 +11631,7 @@ s3-object-lambda.ap-south-1.amazonaws.com s3-website.ap-south-1.amazonaws.com s3.dualstack.ap-south-2.amazonaws.com s3-accesspoint.dualstack.ap-south-2.amazonaws.com +s3-website.dualstack.ap-south-2.amazonaws.com s3.ap-south-2.amazonaws.com s3-accesspoint.ap-south-2.amazonaws.com s3-object-lambda.ap-south-2.amazonaws.com @@ -11636,16 +11652,26 @@ s3-object-lambda.ap-southeast-2.amazonaws.com s3-website.ap-southeast-2.amazonaws.com s3.dualstack.ap-southeast-3.amazonaws.com s3-accesspoint.dualstack.ap-southeast-3.amazonaws.com +s3-website.dualstack.ap-southeast-3.amazonaws.com s3.ap-southeast-3.amazonaws.com s3-accesspoint.ap-southeast-3.amazonaws.com s3-object-lambda.ap-southeast-3.amazonaws.com s3-website.ap-southeast-3.amazonaws.com s3.dualstack.ap-southeast-4.amazonaws.com s3-accesspoint.dualstack.ap-southeast-4.amazonaws.com +s3-website.dualstack.ap-southeast-4.amazonaws.com s3.ap-southeast-4.amazonaws.com s3-accesspoint.ap-southeast-4.amazonaws.com s3-object-lambda.ap-southeast-4.amazonaws.com s3-website.ap-southeast-4.amazonaws.com +s3.dualstack.ap-southeast-5.amazonaws.com +s3-accesspoint.dualstack.ap-southeast-5.amazonaws.com +s3-website.dualstack.ap-southeast-5.amazonaws.com +s3.ap-southeast-5.amazonaws.com +s3-accesspoint.ap-southeast-5.amazonaws.com +s3-deprecated.ap-southeast-5.amazonaws.com +s3-object-lambda.ap-southeast-5.amazonaws.com +s3-website.ap-southeast-5.amazonaws.com s3.dualstack.ca-central-1.amazonaws.com s3-accesspoint.dualstack.ca-central-1.amazonaws.com s3-accesspoint-fips.dualstack.ca-central-1.amazonaws.com @@ -11666,6 +11692,7 @@ s3.ca-west-1.amazonaws.com s3-accesspoint.ca-west-1.amazonaws.com s3-accesspoint-fips.ca-west-1.amazonaws.com s3-fips.ca-west-1.amazonaws.com +s3-object-lambda.ca-west-1.amazonaws.com s3-website.ca-west-1.amazonaws.com s3.dualstack.eu-central-1.amazonaws.com s3-accesspoint.dualstack.eu-central-1.amazonaws.com @@ -11676,6 +11703,7 @@ s3-object-lambda.eu-central-1.amazonaws.com s3-website.eu-central-1.amazonaws.com s3.dualstack.eu-central-2.amazonaws.com s3-accesspoint.dualstack.eu-central-2.amazonaws.com +s3-website.dualstack.eu-central-2.amazonaws.com s3.eu-central-2.amazonaws.com s3-accesspoint.eu-central-2.amazonaws.com s3-object-lambda.eu-central-2.amazonaws.com @@ -11695,6 +11723,7 @@ s3-object-lambda.eu-south-1.amazonaws.com s3-website.eu-south-1.amazonaws.com s3.dualstack.eu-south-2.amazonaws.com s3-accesspoint.dualstack.eu-south-2.amazonaws.com +s3-website.dualstack.eu-south-2.amazonaws.com s3.eu-south-2.amazonaws.com s3-accesspoint.eu-south-2.amazonaws.com s3-object-lambda.eu-south-2.amazonaws.com @@ -11722,12 +11751,14 @@ s3-object-lambda.eu-west-3.amazonaws.com s3-website.eu-west-3.amazonaws.com s3.dualstack.il-central-1.amazonaws.com s3-accesspoint.dualstack.il-central-1.amazonaws.com +s3-website.dualstack.il-central-1.amazonaws.com s3.il-central-1.amazonaws.com s3-accesspoint.il-central-1.amazonaws.com s3-object-lambda.il-central-1.amazonaws.com s3-website.il-central-1.amazonaws.com s3.dualstack.me-central-1.amazonaws.com s3-accesspoint.dualstack.me-central-1.amazonaws.com +s3-website.dualstack.me-central-1.amazonaws.com s3.me-central-1.amazonaws.com s3-accesspoint.me-central-1.amazonaws.com s3-object-lambda.me-central-1.amazonaws.com @@ -11796,6 +11827,7 @@ s3.dualstack.us-east-2.amazonaws.com s3-accesspoint.dualstack.us-east-2.amazonaws.com s3-accesspoint-fips.dualstack.us-east-2.amazonaws.com s3-fips.dualstack.us-east-2.amazonaws.com +s3-website.dualstack.us-east-2.amazonaws.com s3.us-east-2.amazonaws.com s3-accesspoint.us-east-2.amazonaws.com s3-accesspoint-fips.us-east-2.amazonaws.com @@ -11910,7 +11942,7 @@ notebook.cn-northwest-1.sagemaker.com.cn // Amazon SageMaker Studio // Submitted by AWS Security -// Reference: 69c723d9-6e1a-4bff-a203-48eecd203183 +// Reference: 475f237e-ab88-4041-9f41-7cfccdf66aeb studio.af-south-1.sagemaker.aws studio.ap-east-1.sagemaker.aws studio.ap-northeast-1.sagemaker.aws @@ -11922,6 +11954,7 @@ studio.ap-southeast-2.sagemaker.aws studio.ap-southeast-3.sagemaker.aws studio.ca-central-1.sagemaker.aws studio.eu-central-1.sagemaker.aws +studio.eu-central-2.sagemaker.aws studio.eu-north-1.sagemaker.aws studio.eu-south-1.sagemaker.aws studio.eu-south-2.sagemaker.aws @@ -12094,6 +12127,19 @@ awsglobalaccelerator.com // Reference: 83385945-225f-416e-9aa0-ad0632bfdcee *.private.repost.aws +// AWS Transfer Family web apps +// Submitted by AWS Security +// Reference: 67e9cfe6-ac57-49c7-b197-6652711c8e8d +transfer-webapp.ap-northeast-1.on.aws +transfer-webapp.ap-southeast-1.on.aws +transfer-webapp.ap-southeast-2.on.aws +transfer-webapp.eu-central-1.on.aws +transfer-webapp.eu-north-1.on.aws +transfer-webapp.eu-west-1.on.aws +transfer-webapp.us-east-1.on.aws +transfer-webapp.us-east-2.on.aws +transfer-webapp.us-west-2.on.aws + // eero // Submitted by Yue Kang // Reference: 264afe70-f62c-4c02-8ab9-b5281ed24461 @@ -12131,6 +12177,10 @@ on-aptible.com // Submitted by Aki Ueno f5.si +// ArvanCloud EdgeCompute +// Submitted by ArvanCloud CDN +arvanedge.ir + // ASEINet : https://www.aseinet.com/ // Submitted by Asei SEKIGUCHI user.aseinet.ne.jp @@ -12186,12 +12236,6 @@ b-data.io // Submitted by Petros Angelatos balena-devices.com -// Banzai Cloud -// Submitted by Janos Matyas -*.banzai.cloud -app.banzaicloud.io -*.backyards.banzaicloud.io - // BASE, Inc. : https://binc.jp // Submitted by Yuya NAGASAWA base.ec @@ -12217,10 +12261,6 @@ beagleboard.io // Submitted by Hazel Cora pages.gay -// BetaInABox -// Submitted by Adrian -betainabox.com - // BinaryLane : http://www.binarylane.com // Submitted by Nathan O'Sullivan bnr.la @@ -12290,10 +12330,6 @@ vm.bytemark.co.uk // Submitted by Antonio Lain cafjs.com -// callidomus : https://www.callidomus.com/ -// Submitted by Marcus Popp -mycd.eu - // Canva Pty Ltd : https://canva.com/ // Submitted by Joel Aquilina canva-apps.cn @@ -12323,7 +12359,7 @@ c.cdn77.org rsc.cdn77.org ssl.origin.cdn77-secure.org -// CentralNic : http://www.centralnic.com/names/domains +// CentralNic : https://teaminternet.com/ // Submitted by registry za.bz br.com @@ -12346,11 +12382,7 @@ uk.net ae.org com.se -// certmgr.org : https://certmgr.org -// Submitted by B. Blechschmidt -certmgr.org - -// Cityhost LLC : https://cityhost.ua +// Cityhost LLC : https://cityhost.ua // Submitted by Maksym Rivtin cx.ua @@ -12383,20 +12415,24 @@ clickrising.net // Submitted by Aleksander Hristov & Boyan Peychev cloudns.asia cloudns.be +cloud-ip.biz cloudns.biz cloudns.cc cloudns.ch cloudns.cl cloudns.club dnsabr.com +ip-ddns.com cloudns.cx cloudns.eu cloudns.in cloudns.info +ddns-ip.net dns-cloud.net dns-dynamic.net cloudns.nz cloudns.org +ip-dynamic.org cloudns.ph cloudns.pro cloudns.pw @@ -12416,6 +12452,10 @@ cloudaccess.host freesite.host cloudaccess.net +// Cloudbees, Inc. : https://www.cloudbees.com/ +// Submitted by Mohideen Shajith +cloudbeesusercontent.io + // Cloudera, Inc. : https://www.cloudera.com/ // Submitted by Kedarnath Waikar *.cloudera.site @@ -12492,7 +12532,6 @@ edu.ru gov.ru int.ru mil.ru -test.ru // COSIMO GmbH : http://www.cosimo.de // Submitted by Rene Marticke @@ -12522,10 +12561,6 @@ on.crisp.email // Submitted by Andrew Cady *.cryptonomic.net -// Curv UG : https://curv-labs.de/ -// Submitted by Marvin Wiesner -curv.dev - // cyber_Folks S.A. : https://cyberfolks.pl // Submitted by Bartlomiej Kida cfolks.pl @@ -12535,12 +12570,6 @@ cfolks.pl cyon.link cyon.site -// Danger Science Group: https://dangerscience.com/ -// Submitted by Skylar MacDonald -platform0.app -fnwk.site -folionetwork.site - // Dansk.net : http://www.dansk.net/ // Submitted by Anani Voule biz.dk @@ -12549,11 +12578,6 @@ firm.dk reg.dk store.dk -// Daplie, Inc : https://daplie.com -// Submitted by AJ ONeal -daplie.me -localhost.daplie.me - // dappnode.io : https://dappnode.io/ // Submitted by Abel Boldu / DAppNode Team dyndns.dappnode.io @@ -12581,10 +12605,6 @@ mydatto.com dattolocal.net mydatto.net -// DDNS5 : https://ddns5.com -// Submitted by Cameron Elliott -ddns5.com - // ddnss.de : https://www.ddnss.de/ // Submitted by Robert Niedziela ddnss.de @@ -12615,12 +12635,12 @@ deno-staging.dev // Submitted by Peter Thomassen dedyn.io -// Deta: https://www.deta.sh/ +// Deta : https://www.deta.sh/ // Submitted by Aavash Shrestha deta.app deta.dev -// dhosting.pl Sp. z o.o.: https://dhosting.pl/ +// dhosting.pl Sp. z o.o. : https://dhosting.pl/ // Submitted by Michal Kokoszkiewicz dfirma.pl dkonto.pl @@ -12638,17 +12658,12 @@ ondigitalocean.app // Submitted by Edward Hsing us.kg -// Diher Solutions : https://diher.solutions -// Submitted by Didi Hermawan -rss.my.id -diher.solutions - // Discord Inc : https://discord.com // Submitted by Sahn Lam discordsays.com discordsez.com -// DNS Africa Ltd https://dns.business +// DNS Africa Ltd : https://dns.business // Submitted by Calvin Browne jozi.biz @@ -12656,10 +12671,6 @@ jozi.biz // Submitted by Norbert Auler dnshome.de -// dnstrace.pro : https://dnstrace.pro/ -// Submitted by Chris Partridge -bci.dnstrace.pro - // DotArai : https://www.dotarai.com/ // Submitted by Atsadawat Netcharadsang online.th @@ -12685,11 +12696,6 @@ durumis.com // Submitted by Ricardo Padilha mydrobo.com -// Drud Holdings, LLC. : https://www.drud.com/ -// Submitted by Kevin Bridges -drud.io -drud.us - // DuckDNS : http://www.duckdns.org/ // Submitted by Richard Harper duckdns.org @@ -13016,11 +13022,6 @@ easypanel.host // Submitted by *.ewp.live -// ECG Robotics, Inc : https://ecgrobotics.org -// Submitted by -onred.one -staging.onred.one - // eDirect Corp. : https://hosting.url.com.tw/ // Submitted by C.S. chang twmail.cc @@ -13046,12 +13047,12 @@ elementor.cool // Submitted by Emmanuel Raviart en-root.fr -// Enalean SAS: https://www.enalean.com +// Enalean SAS : https://www.enalean.com // Submitted by Enalean Security Team mytuleap.com tuleap-partners.com -// Encoretivity AB: https://encore.dev +// Encoretivity AB : https://encore.dev // Submitted by André Eriksson encr.app encoreapi.com @@ -13060,7 +13061,7 @@ encoreapi.com // Submitted by Marcel Daus eu.encoway.cloud -// EU.org https://eu.org/ +// EU.org : https://eu.org/ // Submitted by Pierre Beyssac eu.org al.eu.org @@ -13105,10 +13106,8 @@ ng.eu.org nl.eu.org no.eu.org nz.eu.org -paris.eu.org pl.eu.org pt.eu.org -q-a.eu.org ro.eu.org ru.eu.org se.eu.org @@ -13256,13 +13255,13 @@ fastvps.site myfast.space // FearWorks Media Ltd. : https://fearworksmedia.co.uk -// submitted by Keith Fairley +// Submitted by Keith Fairley conn.uk copro.uk hosp.uk // Fedora : https://fedoraproject.org/ -// submitted by Patrick Uiterwijk +// Submitted by Patrick Uiterwijk fedorainfracloud.org fedorapeople.org cloud.fedoraproject.org @@ -13270,7 +13269,7 @@ app.os.fedoraproject.org app.os.stg.fedoraproject.org // Fermax : https://fermax.com/ -// submitted by Koen Van Isterdael +// Submitted by Koen Van Isterdael mydobiss.com // FH Muenster : https://www.fh-muenster.de @@ -13289,11 +13288,15 @@ firebaseapp.com // Submitted by Eric Chan fldrv.com +// Fleek Labs Inc : https://fleek.xyz +// Submitted by Parsa Ghadimi +on-fleek.app + // FlutterFlow : https://flutterflow.io // Submitted by Anton Emelyanov flutterflow.app -// fly.io: https://fly.io +// fly.io : https://fly.io // Submitted by Kurt Mackey fly.dev shw.io @@ -13316,7 +13319,7 @@ framer.wiki // Frederik Braun : https://frederik-braun.com // Submitted by Frederik Braun -0e.vc +*.0e.vc // Freebox : http://www.freebox.fr // Submitted by Romain Fliedel @@ -13397,16 +13400,9 @@ usercontent.jp // Submitted by Tom Klein gentapps.com gentlentapis.com -lab.ms cdn-edges.net -// Getlocalcert: https://www.getlocalcert.net -// Submitted by Robert Alexander -localcert.net -localhostcert.net -corpnet.work - -// GignoSystemJapan: http://gsj.bz +// GignoSystemJapan : http://gsj.bz // Submitted by GignoSystemJapan gsj.bz @@ -13416,11 +13412,11 @@ githubusercontent.com githubpreview.dev github.io -// GitLab, Inc. +// GitLab, Inc. : https://about.gitlab.com/ // Submitted by Alex Hanselka gitlab.io -// Gitplac.si - https://gitplac.si +// Gitplac.si : https://gitplac.si // Submitted by Aljaž Starc gitapp.si gitpage.si @@ -13558,26 +13554,9 @@ goip.de // Google, Inc. // Submitted by Shannon McCabe -blogspot.ae -blogspot.al -blogspot.am *.hosted.app *.run.app web.app -blogspot.com.ar -blogspot.co.at -blogspot.com.au -blogspot.ba -blogspot.be -blogspot.bg -blogspot.bj -blogspot.com.br -blogspot.com.by -blogspot.ca -blogspot.cf -blogspot.ch -blogspot.cl -blogspot.com.co *.0emm.com appspot.com *.r.appspot.com @@ -13588,67 +13567,11 @@ googlecode.com pagespeedmobilizer.com withgoogle.com withyoutube.com -blogspot.cv -blogspot.com.cy -blogspot.cz -blogspot.de *.gateway.dev -blogspot.dk -blogspot.com.ee -blogspot.com.eg -blogspot.com.es -blogspot.fi -blogspot.fr cloud.goog translate.goog *.usercontent.goog -blogspot.gr -blogspot.hk -blogspot.hr -blogspot.hu -blogspot.co.id -blogspot.ie -blogspot.co.il -blogspot.in -blogspot.is -blogspot.it -blogspot.jp -blogspot.co.ke -blogspot.kr -blogspot.li -blogspot.lt -blogspot.lu -blogspot.md -blogspot.mk -blogspot.mr -blogspot.com.mt -blogspot.mx -blogspot.my cloudfunctions.net -blogspot.com.ng -blogspot.nl -blogspot.no -blogspot.co.nz -blogspot.pe -blogspot.pt -blogspot.qa -blogspot.re -blogspot.ro -blogspot.rs -blogspot.ru -blogspot.se -blogspot.sg -blogspot.si -blogspot.sk -blogspot.sn -blogspot.td -blogspot.com.tr -blogspot.tw -blogspot.ug -blogspot.co.uk -blogspot.com.uy -blogspot.vn -blogspot.co.za // Goupile : https://goupile.fr // Submitted by Niels Martignene @@ -13663,10 +13586,14 @@ pymnt.uk cloudapps.digital london.cloudapps.digital -// Government of the Netherlands: https://www.government.nl +// Government of the Netherlands : https://www.government.nl // Submitted by gov.nl +// Grafana Labs : https://grafana.com/ +// Submitted by Platform Engineering +grafana-dev.net + // GrayJay Web Solutions Inc. : https://grayjaysports.ca // Submitted by Matt Yamkowy grayjayleagues.com @@ -13676,22 +13603,13 @@ grayjayleagues.com günstigbestellen.de günstigliefern.de -// Hakaran group: http://hakaran.cz -// Submitted by Arseniy Sokolov -fin.ci -free.hr -caa.li -ua.rs -conf.se - -// Häkkinen.fi +// Häkkinen.fi : https://www.häkkinen.fi/ // Submitted by Eero Häkkinen häkkinen.fi -// Handshake : https://handshake.org -// Submitted by Mike Damm -hs.run -hs.zone +// Harrison Network : https://hrsn.net +// Submitted by William Harrison +hrsn.dev // Hashbang : https://hashbang.sh hashbang.sh @@ -13710,11 +13628,12 @@ hatenablog.jp hatenadiary.jp hatenadiary.org -// Heilbronn University of Applied Sciences - Faculty Informatics (GitLab Pages): https://www.hs-heilbronn.de -// Submitted by Richard Zowalla +// Heilbronn University of Applied Sciences - Faculty Informatics (GitLab Pages) : https://www.hs-heilbronn.de +// Submitted by Richard Zowalla pages.it.hs-heilbronn.de +pages-research.it.hs-heilbronn.de -// HeiyuSpace: https://lazycat.cloud +// HeiyuSpace : https://lazycat.cloud // Submitted by Xia Bin heiyu.space @@ -13728,9 +13647,13 @@ heliohost.us hepforge.org // Heroku : https://www.heroku.com/ -// Submitted by Tom Maher +// Submitted by Shumon Huque herokuapp.com -herokussl.com + +// Heyflow : https://www.heyflow.com +// Submitted by Mirko Nitschke +heyflow.page +heyflow.site // Hibernating Rhinos // Submitted by Oren Eini @@ -13739,7 +13662,7 @@ ravendb.community development.run ravendb.run -// home.pl S.A.: https://home.pl +// home.pl S.A. : https://home.pl // Submitted by Krzysztof Wolski homesklep.pl @@ -13749,10 +13672,6 @@ homesklep.pl *.id.pub *.kin.pub -// Hong Kong Productivity Council: https://www.hkpc.org/ -// Submitted by SECaaS Team -secaas.hk - // Hoplix : https://www.hoplix.com // Submitted by Danilo De Franco hoplix.shop @@ -13762,18 +13681,17 @@ hoplix.shop orx.biz biz.gl biz.ng +co.biz.ng +dl.biz.ng +go.biz.ng +lg.biz.ng +on.biz.ng col.ng firm.ng gen.ng ltd.ng ngo.ng plc.ng -// Reserved Third Level Subdomains for BIZ.NG -co.biz.ng -dl.biz.ng -go.biz.ng -lg.biz.ng -on.biz.ng // HostFly : https://www.ie.ua // Submitted by Bohdan Dub @@ -13782,6 +13700,11 @@ ie.ua // HostyHosting : https://hostyhosting.com hostyhosting.io +// Hugging Face : https://huggingface.co +// Submitted by Eliott Coyac +hf.space +static.hf.space + // Hypernode B.V. : https://www.hypernode.com/ // Submitted by Cipriano Groenendal hypernode.io @@ -13879,9 +13802,18 @@ pixolino.com // Submitted by Vasiliy Sheredeko na4u.ru -// IONOS SE : https://www.ionos.com/, -// IONOS Group SE: https://www.ionos-group.com/ -// submitted by Henrik Willert +// Inventor Services : https://inventor.gg/ +// Submitted by Inventor Team +botdash.app +botdash.dev +botdash.gg +botdash.net +botda.sh +botdash.xyz + +// IONOS SE : https://www.ionos.com/ +// IONOS Group SE : https://www.ionos-group.com/ +// Submitted by Henrik Willert apps-1and1.com live-website.com apps-1and1.net @@ -13892,6 +13824,10 @@ app-ionos.space // Submitted by Roman Azarenko iopsys.se +// IPFS Project : https://ipfs.tech/ +// Submitted by Interplanetary Shipyard +*.dweb.link + // IPiFony Systems, Inc. : https://www.ipifony.com/ // Submitted by Matthew Hardeman ipifony.net @@ -13904,8 +13840,8 @@ ir.md // Submitted by William Harrison is-a-good.dev -// is-a.dev : https://www.is-a.dev -// Submitted by William Harrison +// is-a.dev : https://is-a.dev +// Submitted by William Harrison is-a.dev // IServ GmbH : https://iserv.de @@ -14021,15 +13957,11 @@ js.org kaas.gg khplay.nl -// Kakao : https://www.kakaocorp.com/ -// Submitted by JaeYoong Lee -ktistory.com - // Kapsi : https://kapsi.fi // Submitted by Tomi Juntunen kapsi.fi -// Katholieke Universiteit Leuven: https://www.kuleuven.be +// Katholieke Universiteit Leuven : https://www.kuleuven.be // Submitted by Abuse KU Leuven ezproxy.kuleuven.be kuleuven.cloud @@ -14047,7 +13979,7 @@ uni5.net // Submitted by Roy Keene knightpoint.systems -// KoobinEvent, SL: https://www.koobin.com +// KoobinEvent, SL : https://www.koobin.com // Submitted by Iván Oliva koobin.events @@ -14072,12 +14004,13 @@ leadpages.co lpages.co lpusercontent.com -// Lelux.fi : https://lelux.fi/ -// Submitted by Lelux Admin -lelux.site +// Liara : https://liara.ir +// Submitted by Amirhossein Badinloo +liara.run +iran.liara.run // libp2p project : https://libp2p.io -// Submitted by Interplanetary Shipyard +// Submitted by Interplanetary Shipyard libp2p.direct // Libre IT Ltd : https://libre.nz @@ -14094,7 +14027,7 @@ co.network co.place co.technology -// linkyard ldt: https://www.linkyard.ch/ +// linkyard ldt : https://www.linkyard.ch/ // Submitted by Mario Siegenthaler linkyard-cloud.ch linkyard.cloud @@ -14119,6 +14052,20 @@ ggff.net // Submitted by Lann Martin *.user.localcert.dev +// LocalCert : https://localcert.net +// Submitted by William Harrison +localcert.net +localhostcert.net + +// Lodz University of Technology LODMAN regional domains : https://www.man.lodz.pl/dns +// Submitted by Piotr Wilk +lodz.pl +pabianice.pl +plock.pl +sieradz.pl +skierniewice.pl +zgierz.pl + // Log'in Line : https://www.loginline.com/ // Submitted by Rémi Mach loginline.app @@ -14127,8 +14074,8 @@ loginline.io loginline.services loginline.site -// Lõhmus Family, The -// Submitted by Heiki Lõhmus +// Lõhmus Family, The : https://lohmus.me/ +// Submitted by Heiki Lõhmus lohmus.me // Lokalized : https://lokalized.nl @@ -14203,7 +14150,7 @@ polyspace.com mayfirst.info mayfirst.org -// Maze Play: https://www.mazeplay.com +// Maze Play : https://www.mazeplay.com // Submitted by Adam Humpherys mazeplay.com @@ -14214,10 +14161,6 @@ mcdir.ru vps.mcdir.ru mcpre.ru -// mcpe.me : https://mcpe.me -// Submitted by Noa Heyl -mcpe.me - // Mediatech : https://mediatech.by // Submitted by Evgeniy Kozhuhovskiy mediatech.by @@ -14227,6 +14170,10 @@ mediatech.dev // Submitted by Michael Olson hra.health +// MedusaJS, Inc : https://medusajs.com/ +// Submitted by Stevche Radevski +medusajs.app + // Memset hosting : https://www.memset.com // Submitted by Tom Whitwell miniserver.com @@ -14242,12 +14189,9 @@ atmeta.com apps.fbsbx.com // MetaCentrum, CESNET z.s.p.o. : https://www.metacentrum.cz/en/ -// Submitted by Zdeněk Šustr +// Submitted by Zdeněk Šustr and Radim Janča *.cloud.metacentrum.cz custom.metacentrum.cz - -// MetaCentrum, CESNET z.s.p.o. : https://www.metacentrum.cz/en/ -// Submitted by Radim Janča flt.cloud.muni.cz usr.cloud.muni.cz @@ -14287,7 +14231,7 @@ trafficmanager.net blob.core.windows.net servicebus.windows.net -// MikroTik: https://mikrotik.com +// MikroTik : https://mikrotik.com // Submitted by MikroTik SysAdmin Team routingthecloud.com sn.mynetname.net @@ -14298,9 +14242,14 @@ routingthecloud.org // Submitted by Robert Böttinger csx.cc -// MobileEducation, LLC : https://joinforte.com -// Submitted by Grayson Martin -forte.id +// Mittwald CM Service GmbH & Co. KG : https://mittwald.de +// Submitted by Marco Rieger +mydbserver.com +webspaceconfig.de +mittwald.info +mittwaldserver.info +typo3server.info +project.space // MODX Systems LLC : https://modx.com // Submitted by Elizabeth Southwell @@ -14339,6 +14288,11 @@ ui.nabu.casa // Net at Work Gmbh : https://www.netatwork.de // Submitted by Jan Jaeschke cloud.nospamproxy.com +o365.cloud.nospamproxy.com + +// Net libre : https://www.netlib.re +// Submitted by Philippe PITTOLI +netlib.re // Netfy Domains : https://netfy.domains // Submitted by Suranga Ranasinghe @@ -14381,7 +14335,7 @@ us.ngrok.io ngrok.pizza ngrok.pro -// Nicolaus Copernicus University in Torun - MSK TORMAN (https://www.man.torun.pl) +// Nicolaus Copernicus University in Torun - MSK TORMAN : https://www.man.torun.pl torun.pl // Nimbus Hosting Ltd. : https://www.nimbushosting.co.uk/ @@ -14506,8 +14460,6 @@ notion.site // Submitted by Steve Russell dnsking.ch mypi.co -n4t.co -001www.com myiphost.com forumz.info soundcast.me @@ -14520,7 +14472,6 @@ vpndns.net dynserv.org now-dns.org x443.pw -now-dns.top ntdll.top freeddns.us @@ -14534,10 +14485,10 @@ nerdpol.ovh nyc.mn // O3O.Foundation : https://o3o.foundation/ -// Submitted by the prvcy.page Registry Team +// Submitted by the prvcy.page Registry Team prvcy.page -// Obl.ong : +// Obl.ong : https://obl.ong // Submitted by Reese Armstrong obl.ong @@ -14554,11 +14505,11 @@ omg.lol // Submitted by Cole Estep cloudycluster.net -// OmniWe Limited: https://omniwe.com +// OmniWe Limited : https://omniwe.com // Submitted by Vicary Archangel omniwe.site -// One.com: https://www.one.com/ +// One.com : https://www.one.com/ // Submitted by Jacob Bunk Nielsen 123webseite.at 123website.be @@ -14602,7 +14553,7 @@ opencraft.hosting 32-b.it 64-b.it -// OpenResearch GmbH: https://openresearch.com/ +// OpenResearch GmbH : https://openresearch.com/ // Submitted by Philipp Schmid orsites.com @@ -14626,12 +14577,12 @@ operaunite.com tech.orange // OsSav Technology Ltd. : https://ossav.com/ -// TLD Nic: http://nic.can.re - TLD Whois Server: whois.can.re // Submitted by OsSav Technology Ltd. +// https://nic.can.re can.re -// Oursky Limited : https://authgear.com/, https://skygear.io/ -// Submitted by Authgear Team , Skygear Developer +// Oursky Limited : https://authgear.com/ +// Submitted by Authgear Team & Skygear Developer authgear-staging.com authgearapps.com skygearapp.com @@ -14640,12 +14591,12 @@ skygearapp.com // Submitted by Duarte Santos outsystemscloud.com -// OVHcloud: https://ovhcloud.com +// OVHcloud : https://ovhcloud.com // Submitted by Vincent Cassé *.hosting.ovh.net *.webpaas.ovh.net -// OwnProvider GmbH: http://www.ownprovider.com +// OwnProvider GmbH : http://www.ownprovider.com // Submitted by Jan Moennich ownprovider.com own.pm @@ -14679,7 +14630,7 @@ pantheonsite.io // Submitted by Daniel Netzer *.paywhirl.com -// pcarrier.ca Software Inc: https://pcarrier.ca/ +// pcarrier.ca Software Inc : https://pcarrier.ca/ // Submitted by Pierre Carrier *.xmit.co xmit.dev @@ -14714,9 +14665,8 @@ us.platform.sh *.platformsh.site *.tst.site -// Platter: https://platter.dev +// Platter : https://platter.dev // Submitted by Patrick Flor -platter-app.com platter-app.dev platterp.us @@ -14724,10 +14674,6 @@ platterp.us // Submitted by Henning Pohl pley.games -// Port53 : https://port53.io/ -// Submitted by Maximilian Schieder -dyn53.io - // Porter : https://porter.run/ // Submitted by Rudraksh MK onporter.run @@ -14755,30 +14701,34 @@ xen.prgmr.com // Submitted by registry priv.at -// Protocol Labs : https://protocol.ai/ -// Submitted by Michael Burns -*.dweb.link - // Protonet GmbH : http://protonet.io // Submitted by Martin Meier protonet.io +// PSL Sandbox : https://psl.hrsn.dev +// Submitted by William Harrison +sub.psl.hrsn.dev +*.wc.psl.hrsn.dev +!ignored.wc.psl.hrsn.dev +*.sub.wc.psl.hrsn.dev +!ignored.sub.wc.psl.hrsn.dev + // Publication Presse Communication SARL : https://ppcom.fr // Submitted by Yaacov Akiba Slama chirurgiens-dentistes-en-france.fr byen.site -// pubtls.org: https://www.pubtls.org +// pubtls.org : https://www.pubtls.org // Submitted by Kor Nielsen pubtls.org -// PythonAnywhere LLP: https://www.pythonanywhere.com +// PythonAnywhere LLP : https://www.pythonanywhere.com // Submitted by Giles Thomas pythonanywhere.com eu.pythonanywhere.com // QA2 -// Submitted by Daniel Dent (https://www.danieldent.com/) +// Submitted by Daniel Dent : https://www.danieldent.com/ qa2.com // QCX @@ -14807,7 +14757,7 @@ qualifioapp.com // Submitted by Vasyl Tsalko ladesk.com -// QuickBackend: https://www.quickbackend.com +// QuickBackend : https://www.quickbackend.com // Submitted by Dani Biro qbuser.com @@ -14825,7 +14775,7 @@ vaporcloud.io rackmaze.com rackmaze.net -// Rad Web Hosting: https://radwebhosting.com +// Rad Web Hosting : https://radwebhosting.com // Submitted by Scott Claeys cloudsite.builders myradweb.net @@ -14860,7 +14810,7 @@ readthedocs.io // Submitted by Tim Kramer rhcloud.com -// Redgate Software: https://red-gate.com +// Redgate Software : https://red-gate.com // Submitted by Andrew Farries instances.spawn.cc @@ -14928,6 +14878,11 @@ itcouldbewor.se aus.basketball nz.basketball +// ROBOT PAYMENT INC. : https://www.robotpayment.co.jp/ +// Submitted by Kentaro Takamori +subsc-pay.com +subsc-pay.net + // Rochester Institute of Technology : http://www.rit.edu/ // Submitted by Jennifer Herting git-pages.rit.edu @@ -14936,7 +14891,13 @@ git-pages.rit.edu // Submitted by Neil Hanlon rocky.page -// Rusnames Limited: http://rusnames.ru/ +// Ruhr University Bochum : https://www.ruhr-uni-bochum.de/ +// Submitted by Andreas Jobs +rub.de +ruhr-uni-bochum.de +io.noc.ruhr-uni-bochum.de + +// Rusnames Limited : http://rusnames.ru/ // Submitted by Sergey Zotov биз.рус ком.рус @@ -15007,7 +14968,7 @@ x0.to from.tv sakura.tv -// Salesforce.com, Inc. https://salesforce.com/ +// Salesforce.com, Inc. : https://salesforce.com/ // Submitted by Salesforce Public Suffix List Team *.builder.code.com *.dev-builder.code.com @@ -15066,7 +15027,7 @@ dedibox.fr // Submitted by Hanno Böck schokokeks.net -// Scottish Government: https://www.gov.scot +// Scottish Government : https://www.gov.scot // Submitted by Martin Ellis gov.scot service.gov.scot @@ -15100,7 +15061,7 @@ seidat.net // Submitted by Yuriy Romadin sellfy.store -// Sendmsg: https://www.sendmsg.co.il +// Sendmsg : https://www.sendmsg.co.il // Submitted by Assaf Stern minisite.ms @@ -15108,7 +15069,7 @@ minisite.ms // Submitted by Felix Mönckemeyer senseering.net -// Servebolt AS: https://servebolt.com +// Servebolt AS : https://servebolt.com // Submitted by Daniel Kjeserud servebolt.cloud @@ -15126,10 +15087,6 @@ as.sh.cn // Submitted by Nyoom sheezy.games -// ShiftEdit : https://shiftedit.net/ -// Submitted by Adam Jimenez -shiftedit.io - // Shopblocks : http://www.shopblocks.com/ // Submitted by Alex Bowers myshopblocks.com @@ -15144,6 +15101,7 @@ shopitsite.com // shopware AG : https://shopware.com // Submitted by Jens Küper +shopware.shop shopware.store // Siemens Mobility GmbH @@ -15162,17 +15120,11 @@ vipsinaapp.com // Submitted by Skylar Challand siteleaf.net -// Skyhat : http://www.skyhat.io -// Submitted by Shante Adam -bounty-full.com -alpha.bounty-full.com -beta.bounty-full.com - // Small Technology Foundation : https://small-tech.org // Submitted by Aral Balkan small-web.org -// Smallregistry by Promopixel SARL: https://www.smallregistry.net +// Smallregistry by Promopixel SARL : https://www.smallregistry.net // Former AFNIC's SLDs // Submitted by Jérôme Lipowicz aeroport.fr @@ -15218,15 +15170,11 @@ srht.site apps.lair.io *.stolos.io -// SpaceKit : https://www.spacekit.io/ -// Submitted by Reza Akhavan -spacekit.io - // SparrowHost : https://sparrowhost.in/ // Submitted by Anant Pandey ind.mom -// SpeedPartner GmbH: https://www.speedpartner.de/ +// SpeedPartner GmbH : https://www.speedpartner.de/ // Submitted by Stefan Neufeind customer.speedpartner.de @@ -15262,8 +15210,8 @@ w-staticblitz.com // Submitted by Adrien Gillon stackhero-network.com -// STACKIT : https://www.stackit.de/en/ -// Submitted by STACKIT-DNS Team (Simon Stier) +// STACKIT GmbH & Co. KG : https://www.stackit.de/en/ +// Submitted by STACKIT-DNS Team (Simon Stier) runs.onstackit.cloud stackit.gg stackit.rocks @@ -15310,7 +15258,7 @@ storj.farm strapiapp.com media.strapiapp.com -// Strategic System Consulting (eApps Hosting): https://www.eapps.com/ +// Strategic System Consulting (eApps Hosting) : https://www.eapps.com/ // Submitted by Alex Oancea vps-host.net atl.jelastic.vps-host.net @@ -15332,7 +15280,7 @@ user.srcf.net // Submitted by Silke Hofstra utwente.io -// Sub 6 Limited: http://www.sub6.com +// Sub 6 Limited : http://www.sub6.com // Submitted by Dan Miller temp-dns.com @@ -15342,11 +15290,6 @@ supabase.co supabase.in supabase.net -// Symfony, SAS : https://symfony.com/ -// Submitted by Fabien Potencier -*.sensiosite.cloud -*.s5y.io - // Syncloud : https://syncloud.org // Submitted by Boris Rybalkin syncloud.it @@ -15381,24 +15324,27 @@ tabitorder.co.il taifun-dns.de // Tailscale Inc. : https://www.tailscale.com -// Submitted by David Anderson -beta.tailscale.net +// Submitted by David Anderson ts.net *.c.ts.net -// TASK geographical domains (https://www.task.gda.pl/uslugi/dns) +// TASK geographical domains : https://task.gda.pl/en/services/for-entrepreneurs/ gda.pl gdansk.pl gdynia.pl med.pl sopot.pl +// Tave Creative Corp : https://tave.com/ +// Submitted by Adrian Ziemkowski +taveusercontent.com + // tawk.to, Inc : https://www.tawk.to // Submitted by tawk.to developer team p.tawk.email p.tawkto.email -// team.blue https://team.blue +// team.blue : https://team.blue // Submitted by Cedric Dubois site.tb-hosting.com @@ -15444,7 +15390,6 @@ pages.torproject.net // TownNews.com : http://www.townnews.com // Submitted by Dustin Ward -bloxcms.com townnews-staging.com // TrafficPlex GmbH : https://www.trafficplex.de/ @@ -15470,14 +15415,11 @@ webspace.rocks lima.zone // TransIP : https://www.transip.nl -// Submitted by Rory Breuk +// Submitted by Rory Breuk and Cedric Dubois *.transurl.be *.transurl.eu -*.transurl.nl - -// TransIP: https://www.transip.nl -// Submitted by Cedric Dubois site.transip.me +*.transurl.nl // TuxFamily : http://tuxfamily.org // Submitted by TuxFamily administrators @@ -15546,14 +15488,10 @@ org.yt // Submitted by Marko Ivanovic rs.ba -// University of Bielsko-Biala regional domain: http://dns.bielsko.pl/ +// University of Bielsko-Biala regional domain : http://dns.bielsko.pl/ // Submitted by Marcin bielsko.pl -// Upli : https://upli.io -// Submitted by Lenny Bakkalian -upli.io - // urown.net : https://urown.net // Submitted by Hostmaster urown.cloud @@ -15573,9 +15511,11 @@ express.val.run web.val.run // Vercel, Inc : https://vercel.com/ -// Submitted by Connor Davis +// Submitted by Max Leiter vercel.app +v0.build vercel.dev +vusercontent.net now.sh // VeryPositive SIA : http://very.lv @@ -15590,7 +15530,7 @@ router.management // Submitted by Adnan RIHAN v-info.info -// Voorloper.com: https://voorloper.com +// Voorloper.com : https://voorloper.com // Submitted by Nathan van Bakel voorloper.cloud @@ -15649,11 +15589,9 @@ toolforge.org wmcloud.org wmflabs.org -// William Harrison : https://wdharrison.com -// Submitted by William Harrison +// William Harrison : https://wharrison.com.au +// Submitted by William Harrison wdh.app -preview.wdh.app -t.hrsn.net // WISP : https://wisp.gg // Submitted by Stepan Fedotov @@ -15693,7 +15631,7 @@ weeklylottery.org.uk wpenginepowered.com js.wpenginepowered.com -// XenonCloud GbR: https://xenoncloud.net +// XenonCloud GbR : https://xenoncloud.net // Submitted by Julian Uphoff half.host @@ -15723,16 +15661,6 @@ official.academy // Submitted by Stefano Rivera yolasite.com -// Yombo : https://yombo.net -// Submitted by Mitch Schwenk -ybo.faith -yombo.me -homelink.one -ybo.party -ybo.review -ybo.science -ybo.trade - // Yunohost : https://yunohost.org // Submitted by Valentin Grimaud ynh.fr diff --git a/naiveproxy/src/net/base/registry_controlled_domains/effective_tld_names.gperf b/naiveproxy/src/net/base/registry_controlled_domains/effective_tld_names.gperf index 6c34289636..d9a50d03c4 100644 --- a/naiveproxy/src/net/base/registry_controlled_domains/effective_tld_names.gperf +++ b/naiveproxy/src/net/base/registry_controlled_domains/effective_tld_names.gperf @@ -13,9 +13,8 @@ struct DomainRule { %% 0.bg, 0 001.test.code-builder-stg.platform.salesforce.com, 6 -001www.com, 4 0am.jp, 4 -0e.vc, 4 +0e.vc, 6 0emm.com, 6 0g0.jp, 4 0j0.jp, 4 @@ -85,7 +84,6 @@ a2hosted.com, 4 aa.no, 0 aaa, 0 aaa.pro, 0 -aaa.vodka, 4 aarborte.no, 0 aarp, 0 ab.ca, 0 @@ -110,10 +108,12 @@ ac, 0 ac.ae, 0 ac.at, 0 ac.be, 0 +ac.bw, 0 ac.ci, 0 ac.cn, 0 ac.cr, 0 ac.cy, 0 +ac.eg, 0 ac.fj, 0 ac.gn, 0 ac.gov.br, 0 @@ -130,6 +130,7 @@ ac.lk, 0 ac.ls, 0 ac.ma, 0 ac.me, 0 +ac.ml, 0 ac.mu, 0 ac.mw, 0 ac.mz, 0 @@ -194,7 +195,6 @@ aem.live, 4 aem.page, 4 aero, 0 aero.mv, 0 -aero.tt, 0 aerobatic.aero, 0 aeroclub.aero, 0 aerodrome.aero, 0 @@ -220,6 +220,7 @@ agency, 0 agents.aero, 0 agr.br, 0 agrar.hu, 0 +agri.jo, 0 agric.za, 0 agrigento.it, 0 agro.bj, 0 @@ -230,6 +231,7 @@ ah.cn, 0 ah.no, 0 ai, 0 ai.in, 0 +ai.jo, 0 ai.vn, 0 aibetsu.hokkaido.jp, 0 aichi.jp, 0 @@ -253,6 +255,7 @@ airtel, 0 airtraffic.aero, 0 aisai.aichi.jp, 0 aisho.shiga.jp, 0 +aiven.app, 4 aivencloud.com, 4 aizubange.fukushima.jp, 0 aizumi.tokushima.jp, 0 @@ -308,10 +311,10 @@ allstate, 0 ally, 0 alp1.ae.flow.ch, 4 alpha-myqnapcloud.com, 4 -alpha.bounty-full.com, 4 alsace, 0 alstahaug.no, 0 alstom, 0 +alt.na, 0 alt.za, 0 alta.no, 0 altervista.org, 4 @@ -417,7 +420,6 @@ api.stdlib.com, 4 apigee.io, 4 app, 0 app-ionos.space, 4 -app.banzaicloud.io, 4 app.br, 0 app.os.fedoraproject.org, 4 app.os.stg.fedoraproject.org, 4 @@ -469,14 +471,15 @@ art.br, 0 art.do, 0 art.dz, 0 art.ht, 0 +art.ml, 0 art.pl, 4 art.sn, 0 arte, 0 arte.bo, 0 -arts.co, 0 arts.nf, 0 arts.ro, 0 arts.ve, 0 +arvanedge.ir, 4 arvo.network, 4 as, 0 as.sh.cn, 4 @@ -524,6 +527,7 @@ asso.gp, 0 asso.ht, 0 asso.km, 0 asso.mc, 0 +asso.ml, 0 asso.nc, 0 asso.re, 0 associates, 0 @@ -654,7 +658,6 @@ babymilk.jp, 4 bacgiang.vn, 0 backan.vn, 0 backdrop.jp, 4 -backyards.banzaicloud.io, 6 baclieu.vn, 0 bacninh.vn, 0 badaddja.no, 0 @@ -680,7 +683,6 @@ band, 0 bandai.fukushima.jp, 0 bando.ibaraki.jp, 0 bank, 0 -banzai.cloud, 6 bar, 0 bar.pro, 0 barcelona, 0 @@ -748,7 +750,6 @@ bbt, 0 bbva, 0 bc.ca, 0 bcg, 0 -bci.dnstrace.pro, 4 bcn, 0 bd, 2 bd.se, 0 @@ -765,7 +766,6 @@ beer, 0 beget.app, 6 beiarn.no, 0 bel.tr, 0 -belau.pw, 0 belem.br, 0 belluno.it, 0 benevento.it, 0 @@ -782,9 +782,7 @@ best, 0 bestbuy, 0 bet, 0 bet.ar, 0 -beta.bounty-full.com, 4 -beta.tailscale.net, 4 -betainabox.com, 4 +bet.br, 0 better-than.tv, 4 bf, 0 bg, 0 @@ -875,83 +873,9 @@ blogdns.com, 4 blogdns.net, 4 blogdns.org, 4 blogsite.org, 4 -blogspot.ae, 4 -blogspot.al, 4 -blogspot.am, 4 -blogspot.ba, 4 -blogspot.be, 4 -blogspot.bg, 4 -blogspot.bj, 4 -blogspot.ca, 4 -blogspot.cf, 4 -blogspot.ch, 4 -blogspot.cl, 4 -blogspot.co.at, 4 -blogspot.co.id, 4 -blogspot.co.il, 4 -blogspot.co.ke, 4 -blogspot.co.nz, 4 -blogspot.co.uk, 4 -blogspot.co.za, 4 blogspot.com, 4 -blogspot.com.ar, 4 -blogspot.com.au, 4 -blogspot.com.br, 4 -blogspot.com.by, 4 -blogspot.com.co, 4 -blogspot.com.cy, 4 -blogspot.com.ee, 4 -blogspot.com.eg, 4 -blogspot.com.es, 4 -blogspot.com.mt, 4 -blogspot.com.ng, 4 -blogspot.com.tr, 4 -blogspot.com.uy, 4 -blogspot.cv, 4 -blogspot.cz, 4 -blogspot.de, 4 -blogspot.dk, 4 -blogspot.fi, 4 -blogspot.fr, 4 -blogspot.gr, 4 -blogspot.hk, 4 -blogspot.hr, 4 -blogspot.hu, 4 -blogspot.ie, 4 -blogspot.in, 4 -blogspot.is, 4 -blogspot.it, 4 -blogspot.jp, 4 -blogspot.kr, 4 -blogspot.li, 4 -blogspot.lt, 4 -blogspot.lu, 4 -blogspot.md, 4 -blogspot.mk, 4 -blogspot.mr, 4 -blogspot.mx, 4 -blogspot.my, 4 -blogspot.nl, 4 -blogspot.no, 4 -blogspot.pe, 4 -blogspot.pt, 4 -blogspot.qa, 4 -blogspot.re, 4 -blogspot.ro, 4 -blogspot.rs, 4 -blogspot.ru, 4 -blogspot.se, 4 -blogspot.sg, 4 -blogspot.si, 4 -blogspot.sk, 4 -blogspot.sn, 4 -blogspot.td, 4 -blogspot.tw, 4 -blogspot.ug, 4 -blogspot.vn, 4 blogsyte.com, 4 bloomberg, 0 -bloxcms.com, 4 blue, 0 bluebite.io, 4 blush.jp, 4 @@ -996,8 +920,13 @@ bosch, 0 bostik, 0 boston, 0 bot, 0 +botda.sh, 4 +botdash.app, 4 +botdash.dev, 4 +botdash.gg, 4 +botdash.net, 4 +botdash.xyz, 4 bounceme.net, 4 -bounty-full.com, 4 boutique, 0 boutir.com, 4 box, 0 @@ -1085,11 +1014,9 @@ ca-west-1.airflow.amazonaws.com, 6 ca.eu.org, 4 ca.in, 0 ca.it, 0 -ca.na, 0 ca.reclaim.cloud, 4 ca.us, 0 caa.aero, 0 -caa.li, 4 cab, 0 cable-modem.org, 4 cafe, 0 @@ -1193,7 +1120,6 @@ cc.mn.us, 0 cc.mo.us, 0 cc.ms.us, 0 cc.mt.us, 0 -cc.na, 0 cc.nc.us, 0 cc.nd.us, 0 cc.ne.us, 0 @@ -1241,7 +1167,6 @@ centralus.azurestaticapps.net, 4 ceo, 0 cern, 0 certification.aero, 0 -certmgr.org, 4 cesena-forli.it, 0 cesenaforli.it, 0 cf, 0 @@ -1361,6 +1286,7 @@ clinic, 0 clinique, 0 clothing, 0 cloud, 0 +cloud-ip.biz, 4 cloud.fedoraproject.org, 4 cloud.goog, 4 cloud.interhostsolutions.be, 4 @@ -1372,6 +1298,7 @@ cloudaccess.host, 4 cloudaccess.net, 4 cloudapp.net, 4 cloudapps.digital, 4 +cloudbeesusercontent.io, 4 cloudera.site, 6 cloudflare-ipfs.com, 4 cloudflare.net, 4 @@ -1422,6 +1349,7 @@ co.ag, 0 co.am, 0 co.ao, 0 co.at, 0 +co.az, 0 co.bb, 0 co.bi, 0 co.biz.ng, 4 @@ -1429,6 +1357,7 @@ co.bj, 0 co.bn, 4 co.business, 4 co.bw, 0 +co.bz, 0 co.ca, 4 co.ci, 0 co.cl, 0 @@ -1437,6 +1366,7 @@ co.com, 4 co.cr, 0 co.cz, 4 co.dk, 4 +co.dm, 0 co.education, 4 co.events, 4 co.financial, 4 @@ -1448,6 +1378,7 @@ co.id, 0 co.il, 0 co.im, 0 co.in, 0 +co.io, 0 co.ir, 0 co.it, 0 co.je, 0 @@ -1473,10 +1404,10 @@ co.om, 0 co.pl, 4 co.place, 4 co.pn, 0 -co.pw, 0 co.ro, 4 co.rs, 0 co.rw, 0 +co.ss, 0 co.st, 0 co.sz, 0 co.technology, 4 @@ -1572,7 +1503,6 @@ com.im, 0 com.in, 0 com.io, 0 com.iq, 0 -com.is, 0 com.jo, 0 com.kg, 0 com.ki, 0 @@ -1669,7 +1599,6 @@ comsec, 0 condos, 0 conf.au, 0 conf.lv, 0 -conf.se, 4 conference.aero, 0 conn.uk, 4 construction, 0 @@ -1695,10 +1624,8 @@ coop.mv, 0 coop.mw, 0 coop.py, 0 coop.rw, 0 -coop.tt, 0 cooperativa.bo, 0 copro.uk, 4 -corpnet.work, 4 corsica, 0 cosenza.it, 0 couchpotatofries.org, 4 @@ -1748,7 +1675,6 @@ cuiaba.br, 0 cuisinella, 0 cuneo.it, 0 curitiba.br, 0 -curv.dev, 4 cust.cloudscale.ch, 4 cust.dev.thingdust.io, 4 cust.disrec.thingdust.io, 4 @@ -1781,7 +1707,6 @@ d.crm.dev, 6 d.gv.vc, 4 d.se, 0 daa.jp, 4 -dabur, 0 dad, 0 daegu.kr, 0 daejeon.kr, 0 @@ -1798,7 +1723,6 @@ daknong.vn, 0 damnserver.com, 4 danang.vn, 0 dance, 0 -daplie.me, 4 darklang.io, 4 data, 0 database.run, 6 @@ -1819,9 +1743,9 @@ dazaifu.fukuoka.jp, 0 dc.us, 0 dclk, 0 dd-dns.de, 4 +ddns-ip.net, 4 ddns.me, 4 ddns.net, 4 -ddns5.com, 4 ddnsfree.com, 4 ddnsgeek.com, 4 ddnsking.com, 4 @@ -1896,7 +1820,6 @@ diet, 0 digick.jp, 4 digital, 0 digitaloceanspaces.com, 6 -diher.solutions, 4 direct, 0 direct.quickconnect.cn, 4 direct.quickconnect.to, 4 @@ -1970,7 +1893,6 @@ dovre.no, 0 download, 0 dp.ua, 0 dr.in, 0 -dr.na, 0 dr.tr, 0 drammen.no, 0 drangedal.no, 0 @@ -1981,8 +1903,6 @@ dreamhosters.com, 4 drive, 0 drobak.no, 0 drr.ac, 4 -drud.io, 4 -drud.us, 4 dscloud.biz, 4 dscloud.me, 4 dscloud.mobi, 4 @@ -2007,10 +1927,10 @@ dyn-berlin.de, 4 dyn-ip24.de, 4 dyn-o-saur.com, 4 dyn-vpn.de, 4 +dyn.addr.tools, 4 dyn.cosidns.de, 4 dyn.ddnss.de, 4 dyn.home-webserver.de, 4 -dyn53.io, 4 dynalias.com, 4 dynalias.net, 4 dynalias.org, 4 @@ -2078,7 +1998,6 @@ ed.ao, 0 ed.ci, 0 ed.cr, 0 ed.jp, 0 -ed.pw, 0 edeka, 0 edgeapp.net, 4 edgecompute.app, 4 @@ -2093,6 +2012,7 @@ edu, 0 edu.ac, 0 edu.af, 0 edu.al, 0 +edu.ao, 0 edu.ar, 0 edu.au, 0 edu.az, 0 @@ -2139,8 +2059,8 @@ edu.hk, 0 edu.hn, 0 edu.ht, 0 edu.in, 0 +edu.io, 0 edu.iq, 0 -edu.is, 0 edu.it, 0 edu.jo, 0 edu.kg, 0 @@ -2213,6 +2133,7 @@ edu.ua, 0 edu.uy, 0 edu.vc, 0 edu.ve, 0 +edu.vg, 0 edu.vn, 0 edu.vu, 0 edu.ws, 0 @@ -2369,6 +2290,7 @@ enebakk.no, 0 energy, 0 enf.br, 0 eng.br, 0 +eng.jo, 0 eng.pro, 0 engerdal.no, 0 engine.aero, 0 @@ -2466,6 +2388,7 @@ execute-api.ap-southeast-1.amazonaws.com, 4 execute-api.ap-southeast-2.amazonaws.com, 4 execute-api.ap-southeast-3.amazonaws.com, 4 execute-api.ap-southeast-4.amazonaws.com, 4 +execute-api.ap-southeast-5.amazonaws.com, 4 execute-api.ca-central-1.amazonaws.com, 4 execute-api.ca-west-1.amazonaws.com, 4 execute-api.cn-north-1.amazonaws.com.cn, 4 @@ -2533,7 +2456,6 @@ fbx-os.fr, 4 fbxos.fr, 4 fc.it, 0 fe.it, 0 -fed.us, 0 federation.aero, 0 fedex, 0 fedje.no, 0 @@ -2569,7 +2491,6 @@ filegear-sg.me, 4 filegear.me, 4 film, 0 film.hu, 0 -fin.ci, 4 fin.ec, 0 fin.tn, 0 final, 0 @@ -2585,7 +2506,6 @@ firewall-gateway.com, 4 firewall-gateway.de, 4 firewall-gateway.net, 4 firewalledreplit.co, 4 -firm.co, 0 firm.dk, 4 firm.ht, 0 firm.in, 0 @@ -2632,13 +2552,12 @@ fly.dev, 4 fm, 0 fm.br, 0 fm.it, 0 +fm.jo, 0 fm.no, 0 fnc.fr-par.scw.cloud, 4 fnd.br, 0 -fnwk.site, 4 fo, 0 foggia.it, 0 -folionetwork.site, 4 folkebibl.no, 0 folldal.no, 0 foo, 0 @@ -2662,7 +2581,6 @@ forms.ac, 4 forsale, 0 forsand.no, 0 fortal.br, 0 -forte.id, 4 forum, 0 forum.hu, 0 forumz.info, 4 @@ -2688,7 +2606,6 @@ framercanvas.com, 4 frana.no, 0 fredrikstad.no, 0 free, 0 -free.hr, 4 freebox-os.com, 4 freebox-os.fr, 4 freeboxos.com, 4 @@ -2984,7 +2901,6 @@ go.jp, 0 go.ke, 0 go.kr, 0 go.leg.br, 4 -go.pw, 0 go.th, 0 go.tj, 0 go.tz, 0 @@ -3019,7 +2935,6 @@ gold, 0 goldpoint, 0 golf, 0 golffan.us, 4 -gon.pk, 0 gonna.jp, 4 gonohe.aomori.jp, 0 goo, 0 @@ -3056,6 +2971,7 @@ gov.ac, 0 gov.ae, 0 gov.af, 0 gov.al, 0 +gov.ao, 0 gov.ar, 0 gov.as, 0 gov.au, 0 @@ -3069,6 +2985,7 @@ gov.bn, 0 gov.br, 0 gov.bs, 0 gov.bt, 0 +gov.bw, 0 gov.by, 0 gov.bz, 0 gov.cd, 0 @@ -3076,7 +2993,6 @@ gov.cl, 0 gov.cm, 0 gov.cn, 0 gov.co, 0 -gov.cu, 0 gov.cx, 0 gov.cy, 0 gov.dm, 0 @@ -3099,9 +3015,9 @@ gov.hk, 0 gov.ie, 0 gov.il, 0 gov.in, 0 +gov.io, 0 gov.iq, 0 gov.ir, 0 -gov.is, 0 gov.it, 0 gov.jo, 0 gov.kg, 0 @@ -3134,6 +3050,7 @@ gov.mv, 0 gov.mw, 0 gov.my, 0 gov.mz, 0 +gov.na, 0 gov.nc.tr, 0 gov.ng, 0 gov.nl, 4 @@ -3146,6 +3063,7 @@ gov.pn, 0 gov.pr, 0 gov.ps, 0 gov.pt, 0 +gov.pw, 0 gov.py, 0 gov.qa, 0 gov.rs, 0 @@ -3190,6 +3108,7 @@ gr.com, 4 gr.eu.org, 4 gr.it, 0 gr.jp, 0 +grafana-dev.net, 4 grainger, 0 grajewo.pl, 0 gran.no, 0 @@ -3393,10 +3312,12 @@ here, 0 here-for-more.info, 4 hermes, 0 herokuapp.com, 4 -herokussl.com, 4 heroy.more-og-romsdal.no, 0 heroy.nordland.no, 0 heteml.net, 4 +heyflow.page, 4 +heyflow.site, 4 +hf.space, 4 hi.cn, 0 hi.us, 0 hicam.net, 4 @@ -3511,6 +3432,7 @@ holmestrand.no, 0 holtalen.no, 0 holy.jp, 4 home-webserver.de, 4 +home.arpa, 0 home.dyndns.org, 4 homebuilt.aero, 0 homedepot, 0 @@ -3519,7 +3441,6 @@ homeftp.net, 4 homeftp.org, 4 homegoods, 0 homeip.net, 4 -homelink.one, 4 homelinux.com, 4 homelinux.net, 4 homelinux.org, 4 @@ -3571,9 +3492,8 @@ hoylandet.no, 0 hr, 0 hr.eu.org, 4 hra.health, 4 +hrsn.dev, 4 hs.kr, 0 -hs.run, 4 -hs.zone, 4 hsbc, 0 ht, 0 httpbin.org, 4 @@ -3626,6 +3546,7 @@ icu, 0 icurus.jp, 4 id, 0 id.au, 0 +id.cv, 0 id.firewalledreplit.co, 4 id.forgerock.io, 4 id.ir, 0 @@ -3650,6 +3571,8 @@ if.ua, 0 ifm, 0 iglesias-carbonia.it, 0 iglesiascarbonia.it, 0 +ignored.sub.wc.psl.hrsn.dev, 5 +ignored.wc.psl.hrsn.dev, 5 iheya.okinawa.jp, 0 iida.nagano.jp, 0 iide.yamagata.jp, 0 @@ -3705,7 +3628,6 @@ in-vpn.net, 4 in-vpn.org, 4 in.eu.org, 4 in.futurecms.at, 6 -in.na, 0 in.net, 4 in.ngrok.io, 4 in.ni, 0 @@ -3751,14 +3673,13 @@ inf.ua, 4 infiniti, 0 info, 0 info.at, 4 -info.au, 0 info.az, 0 info.bb, 0 info.bj, 0 info.bo, 0 -info.co, 0 info.cx, 4 info.ec, 0 +info.eg, 0 info.et, 0 info.fj, 0 info.gu, 0 @@ -3769,8 +3690,8 @@ info.ke, 0 info.ki, 0 info.la, 0 info.ls, 0 +info.ml, 0 info.mv, 0 -info.na, 0 info.nf, 0 info.ni, 0 info.nr, 0 @@ -3790,6 +3711,7 @@ ing.pa, 0 ingatlan.hu, 0 ink, 0 ino.kochi.jp, 0 +inst.ml, 0 instance.datadetect.com, 4 instances.spawn.cc, 4 institute, 0 @@ -3801,11 +3723,9 @@ int.ar, 0 int.az, 0 int.bo, 0 int.ci, 0 -int.co, 0 int.cv, 0 int.eu.org, 4 int.in, 0 -int.is, 0 int.la, 0 int.lk, 0 int.mv, 0 @@ -3814,7 +3734,6 @@ int.ni, 0 int.pt, 0 int.ru, 4 int.tj, 0 -int.tt, 0 int.ve, 0 int.vn, 0 international, 0 @@ -3827,9 +3746,12 @@ investments, 0 inzai.chiba.jp, 0 io, 0 io.in, 0 +io.noc.ruhr-uni-bochum.de, 4 io.vn, 0 iobb.net, 4 iopsys.se, 4 +ip-ddns.com, 4 +ip-dynamic.org, 4 ip.linodeusercontent.com, 4 ip6.arpa, 0 ipfs.nftstorage.link, 4 @@ -3838,6 +3760,7 @@ ipiranga, 0 iq, 0 ir, 0 ir.md, 4 +iran.liara.run, 4 iris.arpa, 0 irish, 0 iruma.saitama.jp, 0 @@ -4061,7 +3984,6 @@ jnj, 0 jo, 0 joboji.iwate.jp, 0 jobs, 0 -jobs.tt, 0 joburg, 0 joetsu.niigata.jp, 0 jogasz.hu, 0 @@ -4344,7 +4266,6 @@ kibichuo.okayama.jp, 0 kicks-ass.net, 4 kicks-ass.org, 4 kids, 0 -kids.us, 0 kiengiang.vn, 0 kiev.ua, 0 kiho.mie.jp, 0 @@ -4510,7 +4431,6 @@ kropyvnytskyi.ua, 0 krym.ua, 0 ks.ua, 0 ks.us, 0 -ktistory.com, 4 kuchinotsu.nagasaki.jp, 0 kudamatsu.yamaguchi.jp, 0 kudoyama.wakayama.jp, 0 @@ -4596,7 +4516,6 @@ la, 0 la-spezia.it, 0 la.us, 0 laakesvuemie.no, 0 -lab.ms, 4 labeling.ap-northeast-1.sagemaker.aws, 4 labeling.ap-northeast-2.sagemaker.aws, 4 labeling.ap-south-1.sagemaker.aws, 4 @@ -4670,13 +4589,13 @@ legal, 0 legnica.pl, 0 lego, 0 leikanger.no, 0 +leilao.br, 0 leirfjord.no, 0 leirvik.no, 0 leitungsen.de, 4 leka.no, 0 leksvik.no, 0 lel.br, 0 -lelux.site, 4 lenug.su, 4 lenvik.no, 0 lerdal.no, 0 @@ -4690,6 +4609,7 @@ lg.ua, 0 lgbt, 0 li, 0 li.it, 0 +liara.run, 4 lib.ak.us, 0 lib.al.us, 0 lib.ar.us, 0 @@ -4793,13 +4713,13 @@ loabat.no, 0 loan, 0 loans, 0 localcert.net, 4 -localhost.daplie.me, 4 localhostcert.net, 4 localplayer.dev, 4 locker, 0 locus, 0 lodi.it, 0 lodingen.no, 0 +lodz.pl, 4 log.br, 0 loginline.app, 4 loginline.dev, 4 @@ -4991,15 +4911,14 @@ mc.it, 0 mcdir.me, 4 mcdir.ru, 4 mckinsey, 0 -mcpe.me, 4 mcpre.ru, 4 md, 0 -md.ci, 0 md.us, 0 me, 0 me-central-1.airflow.amazonaws.com, 6 me-south-1.airflow.amazonaws.com, 6 me-south-1.elasticbeanstalk.com, 4 +me.eg, 0 me.eu.org, 4 me.in, 0 me.it, 0 @@ -5033,6 +4952,7 @@ mediatech.dev, 4 medicina.bo, 0 medio-campidano.it, 0 mediocampidano.it, 0 +medusajs.app, 4 meet, 0 meguro.tokyo.jp, 0 mein-iserv.de, 4 @@ -5053,6 +4973,7 @@ memset.net, 4 men, 0 menu, 0 meraker.no, 0 +merck, 0 merckmsd, 0 merseine.nu, 4 messerli.app, 4 @@ -5112,12 +5033,12 @@ mil.do, 0 mil.ec, 0 mil.eg, 0 mil.fj, 0 -mil.ge, 0 mil.gh, 0 mil.gt, 0 mil.hn, 0 mil.id, 0 mil.in, 0 +mil.io, 0 mil.iq, 0 mil.jo, 0 mil.kg, 0 @@ -5147,6 +5068,7 @@ mil.tj, 0 mil.tm, 0 mil.to, 0 mil.tr, 0 +mil.tt, 0 mil.tw, 0 mil.tz, 0 mil.uy, 0 @@ -5224,6 +5146,8 @@ mitoyo.kagawa.jp, 0 mitsubishi, 0 mitsue.nara.jp, 0 mitsuke.niigata.jp, 0 +mittwald.info, 4 +mittwaldserver.info, 4 miura.kanagawa.jp, 0 miyada.nagano.jp, 0 miyagi.jp, 0 @@ -5272,9 +5196,7 @@ mobara.chiba.jp, 0 mobi, 0 mobi.gp, 0 mobi.ke, 0 -mobi.na, 0 mobi.ng, 0 -mobi.tt, 0 mobi.tz, 0 mobile, 0 mochizuki.nagano.jp, 0 @@ -5385,10 +5307,8 @@ musashimurayama.tokyo.jp, 0 musashino.tokyo.jp, 0 museum, 0 museum.mv, 0 -museum.mw, 0 museum.no, 0 museum.om, 0 -museum.tt, 0 music, 0 musica.ar, 0 musica.bo, 0 @@ -5401,7 +5321,6 @@ mw, 0 mw.gov.pl, 0 mwcloudnonprod.com, 4 mx, 0 -mx.na, 0 my, 0 my-firewall.org, 4 my-gateway.de, 4 @@ -5413,12 +5332,15 @@ my.canvasite.cn, 6 my.eu.org, 4 my.id, 0 myactivedirectory.com, 4 +myaddr.dev, 4 +myaddr.io, 4 +myaddr.tools, 4 myamaze.net, 4 myasustor.com, 4 -mycd.eu, 4 mycloudnas.com, 4 mydatto.com, 4 mydatto.net, 4 +mydbserver.com, 4 myddns.rocks, 4 mydissent.net, 4 mydns.bz, 4 @@ -5487,7 +5409,6 @@ mywire.org, 4 mz, 0 n.bg, 0 n.se, 0 -n4t.co, 4 na, 0 na.it, 0 na4u.ru, 4 @@ -5554,11 +5475,9 @@ name.eg, 0 name.et, 0 name.fj, 0 name.hr, 0 -name.jo, 0 name.mk, 0 name.mv, 0 name.my, 0 -name.na, 0 name.ng, 0 name.pm, 4 name.pr, 0 @@ -5623,7 +5542,6 @@ ne, 0 ne.jp, 0 ne.ke, 0 ne.kr, 0 -ne.pw, 0 ne.tz, 0 ne.ug, 0 ne.us, 0 @@ -5662,12 +5580,14 @@ net.bo, 0 net.br, 0 net.bs, 0 net.bt, 0 +net.bw, 0 net.bz, 0 net.ci, 0 net.cm, 0 net.cn, 0 net.co, 0 net.cu, 0 +net.cv, 0 net.cw, 0 net.cy, 0 net.dm, 0 @@ -5695,9 +5615,9 @@ net.id, 0 net.il, 0 net.im, 0 net.in, 0 +net.io, 0 net.iq, 0 net.ir, 0 -net.is, 0 net.je, 0 net.jo, 0 net.kg, 0 @@ -5727,6 +5647,7 @@ net.mw, 0 net.mx, 0 net.my, 0 net.mz, 0 +net.na, 0 net.nf, 0 net.ng, 0 net.ni, 0 @@ -5782,6 +5703,7 @@ netbank, 0 netflix, 0 netfy.app, 4 netgamers.jp, 4 +netlib.re, 4 netlify.app, 4 network, 0 neustar, 0 @@ -5911,12 +5833,12 @@ nohost.me, 4 noip.me, 4 noip.us, 4 nokia, 0 -nom.ad, 0 nom.ag, 0 nom.br, 2 nom.co, 0 nom.es, 0 nom.fr, 0 +nom.io, 0 nom.km, 0 nom.mg, 0 nom.nc, 0 @@ -5924,7 +5846,6 @@ nom.ni, 0 nom.pa, 0 nom.pe, 0 nom.pl, 0 -nom.re, 0 nom.ro, 0 nom.tm, 0 nom.ve, 0 @@ -6009,7 +5930,6 @@ novecore.site, 4 now, 0 now-dns.net, 4 now-dns.org, 4 -now-dns.top, 4 now.sh, 4 nowaruda.pl, 0 nowruz, 0 @@ -6056,6 +5976,7 @@ nz.eu.org, 4 o.bg, 0 o.se, 0 o0o0.jp, 4 +o365.cloud.nospamproxy.com, 4 oamishirasato.chiba.jp, 0 oarai.ibaraki.jp, 0 obama.fukui.jp, 0 @@ -6184,6 +6105,7 @@ omura.nagasaki.jp, 0 omuta.fukuoka.jp, 0 on-acorn.io, 6 on-aptible.com, 4 +on-fleek.app, 4 on-k3s.io, 6 on-rancher.cloud, 6 on-rio.io, 6 @@ -6213,7 +6135,6 @@ ono.hyogo.jp, 0 onojo.fukuoka.jp, 0 onomichi.hiroshima.jp, 0 onporter.run, 4 -onred.one, 4 onrender.com, 4 onthewifi.com, 4 onza.mythic-beasts.com, 4 @@ -6242,8 +6163,6 @@ or.jp, 0 or.ke, 0 or.kr, 0 or.mu, 0 -or.na, 0 -or.pw, 0 or.th, 0 or.tz, 0 or.ug, 0 @@ -6263,6 +6182,7 @@ org.ag, 0 org.ai, 0 org.al, 0 org.am, 0 +org.ao, 0 org.ar, 0 org.au, 0 org.az, 0 @@ -6314,9 +6234,9 @@ org.hu, 0 org.il, 0 org.im, 0 org.in, 0 +org.io, 0 org.iq, 0 org.ir, 0 -org.is, 0 org.je, 0 org.jo, 0 org.kg, 0 @@ -6510,9 +6430,11 @@ paas.beebyte.io, 4 paas.datacenter.fi, 4 paas.hosted-by-previder.com, 4 paas.massivegrid.com, 4 +pabianice.pl, 4 padova.it, 0 padua.it, 0 page, 0 +pages-research.it.hs-heilbronn.de, 4 pages.dev, 4 pages.gay, 4 pages.it.hs-heilbronn.de, 4 @@ -6531,7 +6453,6 @@ paragliding.aero, 0 parallel.jp, 4 parasite.jp, 4 paris, 0 -paris.eu.org, 4 paris.replit.dev, 4 parliament.nz, 0 parma.it, 0 @@ -6566,9 +6487,9 @@ peewee.jp, 4 penne.jp, 4 penza.su, 4 pepper.jp, 4 +per.jo, 0 per.la, 0 per.nf, 0 -per.sg, 0 perma.jp, 4 perso.ht, 0 perso.sn, 0 @@ -6592,6 +6513,7 @@ pharmacien.fr, 4 pharmaciens.km, 0 pharmacy, 0 phd, 0 +phd.jo, 0 philips, 0 phone, 0 photo, 0 @@ -6635,9 +6557,7 @@ pl, 0 pl.eu.org, 4 pl.ua, 0 place, 0 -platform0.app, 4 platformsh.site, 6 -platter-app.com, 4 platter-app.dev, 4 platterp.us, 4 play, 0 @@ -6651,6 +6571,7 @@ plesk.page, 4 pleskns.com, 4 pley.games, 4 plo.ps, 0 +plock.pl, 4 plumbing, 0 plurinacional.bo, 0 plus, 0 @@ -6708,6 +6629,7 @@ pr.gov.br, 0 pr.gov.pl, 0 pr.it, 0 pr.leg.br, 4 +pr.ml, 0 pr.us, 0 pramerica, 0 prato.it, 0 @@ -6722,11 +6644,9 @@ press.aero, 0 press.cy, 0 press.ma, 0 press.se, 0 -presse.ci, 0 presse.km, 0 presse.ml, 0 preview.csb.app, 4 -preview.wdh.app, 4 pri.ee, 0 prime, 0 primetel.cloud, 4 @@ -6749,7 +6669,6 @@ pro.fj, 0 pro.ht, 0 pro.in, 0 pro.mv, 0 -pro.na, 0 pro.om, 0 pro.pr, 0 pro.tt, 0 @@ -6763,6 +6682,7 @@ prof, 0 prof.pr, 0 profesional.bo, 0 progressive, 0 +project.space, 4 promo, 0 properties, 0 property, 0 @@ -6786,6 +6706,7 @@ pu.it, 0 pub, 0 pub.instances.scw.cloud, 4 pub.sa, 0 +publ.cv, 0 publ.pt, 0 public-inquiry.uk, 4 pubtls.org, 4 @@ -6809,7 +6730,6 @@ pyatigorsk.ru, 4 pymnt.uk, 4 pythonanywhere.com, 4 pz.it, 0 -q-a.eu.org, 4 q.bg, 0 qa, 0 qa2.com, 4 @@ -6891,7 +6811,6 @@ realtor, 0 realty, 0 rebun.hokkaido.jp, 0 rec.br, 0 -rec.co, 0 rec.nf, 0 rec.ro, 0 rec.ve, 0 @@ -7035,15 +6954,16 @@ rs.leg.br, 4 rs.webaccel.jp, 4 rsc.cdn77.org, 4 rsc.contentproxy9.cz, 4 -rss.my.id, 4 rsvp, 0 rt.ht, 4 ru, 0 ru.com, 4 ru.eu.org, 4 ru.net, 4 +rub.de, 4 rugby, 0 ruhr, 0 +ruhr-uni-bochum.de, 4 rulez.jp, 4 run, 0 run.app, 6 @@ -7093,6 +7013,7 @@ s3-accesspoint.ap-southeast-1.amazonaws.com, 4 s3-accesspoint.ap-southeast-2.amazonaws.com, 4 s3-accesspoint.ap-southeast-3.amazonaws.com, 4 s3-accesspoint.ap-southeast-4.amazonaws.com, 4 +s3-accesspoint.ap-southeast-5.amazonaws.com, 4 s3-accesspoint.ca-central-1.amazonaws.com, 4 s3-accesspoint.ca-west-1.amazonaws.com, 4 s3-accesspoint.cn-north-1.amazonaws.com.cn, 4 @@ -7108,6 +7029,7 @@ s3-accesspoint.dualstack.ap-southeast-1.amazonaws.com, 4 s3-accesspoint.dualstack.ap-southeast-2.amazonaws.com, 4 s3-accesspoint.dualstack.ap-southeast-3.amazonaws.com, 4 s3-accesspoint.dualstack.ap-southeast-4.amazonaws.com, 4 +s3-accesspoint.dualstack.ap-southeast-5.amazonaws.com, 4 s3-accesspoint.dualstack.ca-central-1.amazonaws.com, 4 s3-accesspoint.dualstack.ca-west-1.amazonaws.com, 4 s3-accesspoint.dualstack.cn-north-1.amazonaws.com.cn, 4 @@ -7156,6 +7078,7 @@ s3-ap-south-1.amazonaws.com, 4 s3-ap-southeast-1.amazonaws.com, 4 s3-ap-southeast-2.amazonaws.com, 4 s3-ca-central-1.amazonaws.com, 4 +s3-deprecated.ap-southeast-5.amazonaws.com, 4 s3-deprecated.cn-north-1.amazonaws.com.cn, 4 s3-deprecated.eu-west-1.amazonaws.com, 4 s3-deprecated.us-east-1.amazonaws.com, 4 @@ -7197,7 +7120,9 @@ s3-object-lambda.ap-southeast-1.amazonaws.com, 4 s3-object-lambda.ap-southeast-2.amazonaws.com, 4 s3-object-lambda.ap-southeast-3.amazonaws.com, 4 s3-object-lambda.ap-southeast-4.amazonaws.com, 4 +s3-object-lambda.ap-southeast-5.amazonaws.com, 4 s3-object-lambda.ca-central-1.amazonaws.com, 4 +s3-object-lambda.ca-west-1.amazonaws.com, 4 s3-object-lambda.cn-north-1.amazonaws.com.cn, 4 s3-object-lambda.cn-northwest-1.amazonaws.com.cn, 4 s3-object-lambda.eu-central-1.amazonaws.com, 4 @@ -7244,6 +7169,7 @@ s3-website.ap-southeast-1.amazonaws.com, 4 s3-website.ap-southeast-2.amazonaws.com, 4 s3-website.ap-southeast-3.amazonaws.com, 4 s3-website.ap-southeast-4.amazonaws.com, 4 +s3-website.ap-southeast-5.amazonaws.com, 4 s3-website.ca-central-1.amazonaws.com, 4 s3-website.ca-west-1.amazonaws.com, 4 s3-website.cn-north-1.amazonaws.com.cn, 4 @@ -7253,17 +7179,26 @@ s3-website.dualstack.ap-northeast-1.amazonaws.com, 4 s3-website.dualstack.ap-northeast-2.amazonaws.com, 4 s3-website.dualstack.ap-northeast-3.amazonaws.com, 4 s3-website.dualstack.ap-south-1.amazonaws.com, 4 +s3-website.dualstack.ap-south-2.amazonaws.com, 4 s3-website.dualstack.ap-southeast-1.amazonaws.com, 4 s3-website.dualstack.ap-southeast-2.amazonaws.com, 4 +s3-website.dualstack.ap-southeast-3.amazonaws.com, 4 +s3-website.dualstack.ap-southeast-4.amazonaws.com, 4 +s3-website.dualstack.ap-southeast-5.amazonaws.com, 4 s3-website.dualstack.ca-central-1.amazonaws.com, 4 s3-website.dualstack.ca-west-1.amazonaws.com, 4 s3-website.dualstack.cn-north-1.amazonaws.com.cn, 4 s3-website.dualstack.eu-central-1.amazonaws.com, 4 +s3-website.dualstack.eu-central-2.amazonaws.com, 4 s3-website.dualstack.eu-south-1.amazonaws.com, 4 +s3-website.dualstack.eu-south-2.amazonaws.com, 4 s3-website.dualstack.eu-west-1.amazonaws.com, 4 s3-website.dualstack.eu-west-3.amazonaws.com, 4 +s3-website.dualstack.il-central-1.amazonaws.com, 4 +s3-website.dualstack.me-central-1.amazonaws.com, 4 s3-website.dualstack.sa-east-1.amazonaws.com, 4 s3-website.dualstack.us-east-1.amazonaws.com, 4 +s3-website.dualstack.us-east-2.amazonaws.com, 4 s3-website.dualstack.us-west-1.amazonaws.com, 4 s3-website.dualstack.us-west-2.amazonaws.com, 4 s3-website.eu-central-1.amazonaws.com, 4 @@ -7299,6 +7234,7 @@ s3.ap-southeast-1.amazonaws.com, 4 s3.ap-southeast-2.amazonaws.com, 4 s3.ap-southeast-3.amazonaws.com, 4 s3.ap-southeast-4.amazonaws.com, 4 +s3.ap-southeast-5.amazonaws.com, 4 s3.ca-central-1.amazonaws.com, 4 s3.ca-west-1.amazonaws.com, 4 s3.cn-north-1.amazonaws.com.cn, 4 @@ -7314,6 +7250,7 @@ s3.dualstack.ap-southeast-1.amazonaws.com, 4 s3.dualstack.ap-southeast-2.amazonaws.com, 4 s3.dualstack.ap-southeast-3.amazonaws.com, 4 s3.dualstack.ap-southeast-4.amazonaws.com, 4 +s3.dualstack.ap-southeast-5.amazonaws.com, 4 s3.dualstack.ca-central-1.amazonaws.com, 4 s3.dualstack.ca-west-1.amazonaws.com, 4 s3.dualstack.cn-north-1.amazonaws.com.cn, 4 @@ -7360,7 +7297,6 @@ s3.us-gov-east-1.amazonaws.com, 4 s3.us-gov-west-1.amazonaws.com, 4 s3.us-west-1.amazonaws.com, 4 s3.us-west-2.amazonaws.com, 4 -s5y.io, 6 sa, 0 sa-east-1.airflow.amazonaws.com, 6 sa-east-1.elasticbeanstalk.com, 4 @@ -7517,7 +7453,7 @@ schmidt, 0 schokokeks.net, 4 scholarships, 0 school, 0 -school.na, 0 +school.ge, 0 school.nz, 0 school.za, 0 schoolbus.jp, 4 @@ -7547,7 +7483,6 @@ search, 0 seat, 0 sebastopol.ua, 0 sec.ps, 0 -secaas.hk, 4 secret.jp, 4 secure, 0 security, 0 @@ -7587,7 +7522,6 @@ sendai.jp, 2 sener, 0 sennan.osaka.jp, 0 senseering.net, 4 -sensiosite.cloud, 6 seoul.kr, 0 sera.hiroshima.jp, 0 seranishi.hiroshima.jp, 0 @@ -7657,7 +7591,6 @@ shibukawa.gunma.jp, 0 shibuya.tokyo.jp, 0 shichikashuku.miyagi.jp, 0 shichinohe.aomori.jp, 0 -shiftedit.io, 4 shiga.jp, 0 shiiba.miyazaki.jp, 0 shijonawate.osaka.jp, 0 @@ -7751,6 +7684,7 @@ shoparena.pl, 4 shopitsite.com, 4 shopping, 0 shopselect.net, 4 +shopware.shop, 4 shopware.store, 4 shouji, 0 show, 0 @@ -7768,6 +7702,7 @@ sicilia.it, 0 sicily.it, 0 siellak.no, 0 siena.it, 0 +sieradz.pl, 4 sigdal.no, 0 siiites.com, 4 siljan.no, 0 @@ -7801,6 +7736,7 @@ skedsmokorset.no, 0 ski, 0 ski.no, 0 skien.no, 0 +skierniewice.pl, 4 skierva.no, 0 skin, 0 skiptvet.no, 0 @@ -7899,7 +7835,6 @@ sp.leg.br, 4 spa, 0 space, 0 space-to-rent.com, 4 -spacekit.io, 4 spb.ru, 4 spb.su, 4 spdns.de, 4 @@ -7910,6 +7845,7 @@ sphinx.mythic-beasts.com, 4 spjelkavik.no, 0 spock.replit.dev, 4 sport, 0 +sport.eg, 0 sport.hu, 0 spot, 0 spydeberg.no, 0 @@ -7938,7 +7874,6 @@ stackit.zone, 4 stada, 0 stage.nodeart.io, 4 staging.expo.app, 4 -staging.onred.one, 4 staging.replit.dev, 4 stalowa-wola.pl, 0 stange.no, 0 @@ -7952,6 +7887,7 @@ statebank, 0 statefarm, 0 stathelle.no, 0 static-access.net, 4 +static.hf.space, 4 static.observableusercontent.com, 4 statics.cloud, 6 stavanger.no, 0 @@ -8013,6 +7949,7 @@ studio.ca-central-1.sagemaker.aws, 4 studio.cn-north-1.sagemaker.com.cn, 4 studio.cn-northwest-1.sagemaker.com.cn, 4 studio.eu-central-1.sagemaker.aws, 4 +studio.eu-central-2.sagemaker.aws, 4 studio.eu-north-1.sagemaker.aws, 4 studio.eu-south-1.sagemaker.aws, 4 studio.eu-south-2.sagemaker.aws, 4 @@ -8036,6 +7973,10 @@ stufftoread.com, 4 style, 0 su, 0 sub.jp, 4 +sub.psl.hrsn.dev, 4 +sub.wc.psl.hrsn.dev, 6 +subsc-pay.com, 4 +subsc-pay.net, 4 sucks, 0 sue.fukuoka.jp, 0 suedtirol.it, 0 @@ -8111,7 +8052,6 @@ szczytno.pl, 0 szex.hu, 0 szkola.pl, 0 t.bg, 0 -t.hrsn.net, 4 t.se, 0 ta.it, 0 taa.it, 0 @@ -8219,6 +8159,7 @@ tateyama.toyama.jp, 0 tatsuno.hyogo.jp, 0 tatsuno.nagano.jp, 0 tattoo, 0 +taveusercontent.com, 4 tawaramoto.nara.jp, 0 tax, 0 taxi, 0 @@ -8265,7 +8206,6 @@ terni.it, 0 ternopil.ua, 0 teshikaga.hokkaido.jp, 0 test-iserv.de, 4 -test.ru, 4 test.tj, 0 tests.cx, 4 teva, 0 @@ -8316,7 +8256,6 @@ tm.fr, 0 tm.hu, 0 tm.km, 0 tm.mc, 0 -tm.mg, 0 tm.no, 0 tm.pl, 0 tm.ro, 0 @@ -8458,6 +8397,15 @@ trani-barletta-andria.it, 0 traniandriabarletta.it, 0 tranibarlettaandria.it, 0 tranoy.no, 0 +transfer-webapp.ap-northeast-1.on.aws, 4 +transfer-webapp.ap-southeast-1.on.aws, 4 +transfer-webapp.ap-southeast-2.on.aws, 4 +transfer-webapp.eu-central-1.on.aws, 4 +transfer-webapp.eu-north-1.on.aws, 4 +transfer-webapp.eu-west-1.on.aws, 4 +transfer-webapp.us-east-1.on.aws, 4 +transfer-webapp.us-east-2.on.aws, 4 +transfer-webapp.us-west-2.on.aws, 4 translate.goog, 4 translated.page, 4 transporte.bo, 0 @@ -8468,7 +8416,6 @@ trapani.it, 0 travel, 0 travel.in, 0 travel.pl, 0 -travel.tt, 0 travelers, 0 travelersinsurance, 0 travinh.vn, 0 @@ -8572,10 +8519,11 @@ tv, 0 tv.bb, 0 tv.bo, 0 tv.br, 0 +tv.eg, 0 tv.im, 0 tv.in, 0 tv.it, 0 -tv.na, 0 +tv.jo, 0 tv.sd, 0 tv.tr, 0 tv.tz, 0 @@ -8591,6 +8539,7 @@ tychy.pl, 0 tydal.no, 0 tynset.no, 0 typedream.app, 4 +typo3server.info, 4 tysfjord.no, 0 tysnes.no, 0 tysvar.no, 0 @@ -8601,7 +8550,6 @@ u.se, 0 u2-local.xnbay.com, 4 u2.xnbay.com, 4 ua, 0 -ua.rs, 4 ubank, 0 ube.yamaguchi.jp, 0 uber.space, 4 @@ -8669,7 +8617,6 @@ uol, 0 uonuma.niigata.jp, 0 uozu.toyama.jp, 0 up.in, 0 -upli.io, 4 upow.gov.pl, 0 upper.jp, 4 uppo.gov.pl, 0 @@ -8711,7 +8658,6 @@ us.eu.org, 4 us.gov.pl, 0 us.in, 0 us.kg, 4 -us.na, 0 us.ngrok.io, 4 us.org, 4 us.platform.sh, 4 @@ -8750,6 +8696,7 @@ uzs.gov.pl, 0 v-info.info, 4 v.bg, 0 v.ua, 4 +v0.build, 4 va, 0 va.it, 0 va.no, 0 @@ -8924,6 +8871,7 @@ vt.it, 0 vt.us, 0 vu, 0 vultrobjects.com, 6 +vusercontent.net, 4 vv.it, 0 w-corp-staticblitz.com, 4 w-credentialless-staticblitz.com, 4 @@ -8969,6 +8917,7 @@ waw.pl, 0 wazuka.kyoto.jp, 0 wb.crm.dev, 6 wc.crm.dev, 6 +wc.psl.hrsn.dev, 6 wd.crm.dev, 6 wdh.app, 4 we.bs, 4 @@ -8977,7 +8926,6 @@ weather, 0 weatherchannel, 0 web.app, 4 web.bo, 0 -web.co, 0 web.do, 0 web.gu, 0 web.id, 0 @@ -9011,6 +8959,7 @@ website.yandexcloud.net, 4 websitebuilder.online, 4 websozai.jp, 4 webspace.rocks, 4 +webspaceconfig.de, 4 webthings.io, 4 webview-assets.aws-cloud9.af-south-1.amazonaws.com, 4 webview-assets.aws-cloud9.ap-east-1.amazonaws.com, 4 @@ -9129,7 +9078,6 @@ writesthisblog.com, 4 wroc.pl, 4 wroclaw.pl, 0 ws, 0 -ws.na, 0 wsa.gov.pl, 0 wskr.gov.pl, 0 wsse.gov.pl, 0 @@ -9266,7 +9214,6 @@ xn--clchc0ea0b2g2a9gcd, 0 xn--czr694b, 0 xn--czrs0t, 0 xn--czru2d, 0 -xn--czrw28b.tw, 0 xn--d1acj3b, 0 xn--d1alf, 0 xn--d1at.xn--90a3ac, 0 @@ -9567,7 +9514,6 @@ xn--trna-woa.no, 0 xn--troms-zua.no, 0 xn--tysvr-vra.no, 0 xn--uc0atv.hk, 0 -xn--uc0atv.tw, 0 xn--uc0atv.xn--j6w193g, 0 xn--uc0ay4a.hk, 0 xn--uist22h.jp, 0 @@ -9612,7 +9558,6 @@ xn--ygarden-p1a.no, 0 xn--ygbi2ammx, 0 xn--ystre-slidre-ujb.no, 0 xn--zbx025d.jp, 0 -xn--zf0ao64a.tw, 0 xn--zf0avx.hk, 0 xn--zfr164b, 0 xnbay.com, 4 @@ -9686,11 +9631,6 @@ yawara.ibaraki.jp, 0 yawata.kyoto.jp, 0 yawatahama.ehime.jp, 0 yazu.tottori.jp, 0 -ybo.faith, 4 -ybo.party, 4 -ybo.review, 4 -ybo.science, 4 -ybo.trade, 4 ye, 0 yenbai.vn, 0 yk.ca, 0 @@ -9711,7 +9651,6 @@ yokosuka.kanagawa.jp, 0 yokote.akita.jp, 0 yokoze.saitama.jp, 0 yolasite.com, 4 -yombo.me, 4 yomitan.okinawa.jp, 0 yonabaru.okinawa.jp, 0 yonago.tottori.jp, 0 @@ -9770,6 +9709,7 @@ zarow.pl, 0 zeabur.app, 4 zentsuji.kagawa.jp, 0 zero, 0 +zgierz.pl, 4 zgora.pl, 0 zgorzelec.pl, 0 zhitomir.ua, 0 diff --git a/naiveproxy/src/net/base/schemeful_site.cc b/naiveproxy/src/net/base/schemeful_site.cc index a39f1804f5..22d6da0234 100644 --- a/naiveproxy/src/net/base/schemeful_site.cc +++ b/naiveproxy/src/net/base/schemeful_site.cc @@ -164,20 +164,6 @@ size_t SchemefulSite::EstimateMemoryUsage() const { return base::trace_event::EstimateMemoryUsage(site_as_origin_); } -bool SchemefulSite::operator==(const SchemefulSite& other) const { - return site_as_origin_ == other.site_as_origin_; -} - -bool SchemefulSite::operator!=(const SchemefulSite& other) const { - return !(*this == other); -} - -// Allows SchemefulSite to be used as a key in STL containers (for example, a -// std::set or std::map). -bool SchemefulSite::operator<(const SchemefulSite& other) const { - return site_as_origin_ < other.site_as_origin_; -} - // static std::optional SchemefulSite::DeserializeWithNonce( base::PassKey, diff --git a/naiveproxy/src/net/base/schemeful_site.h b/naiveproxy/src/net/base/schemeful_site.h index f41c3db4d4..5c7d92d13b 100644 --- a/naiveproxy/src/net/base/schemeful_site.h +++ b/naiveproxy/src/net/base/schemeful_site.h @@ -5,6 +5,7 @@ #ifndef NET_BASE_SCHEMEFUL_SITE_H_ #define NET_BASE_SCHEMEFUL_SITE_H_ +#include #include #include #include @@ -148,11 +149,7 @@ class NET_EXPORT SchemefulSite { // See base/trace_event/memory_usage_estimator.h for more info. size_t EstimateMemoryUsage() const; - bool operator==(const SchemefulSite& other) const; - - bool operator!=(const SchemefulSite& other) const; - - bool operator<(const SchemefulSite& other) const; + std::strong_ordering operator<=>(const SchemefulSite& other) const = default; private: // IPC serialization code needs to access internal origin. diff --git a/naiveproxy/src/net/base/sockaddr_util_posix.cc b/naiveproxy/src/net/base/sockaddr_util_posix.cc index e2ee55b180..e3b2c73016 100644 --- a/naiveproxy/src/net/base/sockaddr_util_posix.cc +++ b/naiveproxy/src/net/base/sockaddr_util_posix.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "net/base/sockaddr_util_posix.h" #include diff --git a/naiveproxy/src/net/cert/cert_verify_proc.cc b/naiveproxy/src/net/cert/cert_verify_proc.cc index a6ce9ec0ba..08f0e0d256 100644 --- a/naiveproxy/src/net/cert/cert_verify_proc.cc +++ b/naiveproxy/src/net/cert/cert_verify_proc.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "net/cert/cert_verify_proc.h" #include diff --git a/naiveproxy/src/net/cert/cert_verify_proc_android.cc b/naiveproxy/src/net/cert/cert_verify_proc_android.cc index 56b91c1d26..d356d5d3f5 100644 --- a/naiveproxy/src/net/cert/cert_verify_proc_android.cc +++ b/naiveproxy/src/net/cert/cert_verify_proc_android.cc @@ -125,6 +125,8 @@ bool PerformAIAFetchAndAddResultToVector( android::CertVerifyStatusAndroid AttemptVerificationAfterAIAFetch( const bssl::ParsedCertificateList& certs, const std::string& hostname, + const std::string& ocsp_response, + const std::string& sct_list, CertVerifyResult* verify_result, std::vector* verified_chain) { std::vector cert_bytes; @@ -135,8 +137,8 @@ android::CertVerifyStatusAndroid AttemptVerificationAfterAIAFetch( bool is_issued_by_known_root; std::vector candidate_verified_chain; android::CertVerifyStatusAndroid status; - android::VerifyX509CertChain(cert_bytes, kAuthType, hostname, &status, - &is_issued_by_known_root, + android::VerifyX509CertChain(cert_bytes, kAuthType, hostname, ocsp_response, + sct_list, &status, &is_issued_by_known_root, &candidate_verified_chain); if (status == android::CERT_VERIFY_STATUS_ANDROID_OK) { @@ -164,6 +166,8 @@ android::CertVerifyStatusAndroid AttemptVerificationAfterAIAFetch( android::CertVerifyStatusAndroid TryVerifyWithAIAFetching( const std::vector& cert_bytes, const std::string& hostname, + const std::string& ocsp_response, + const std::string& sct_list, scoped_refptr cert_net_fetcher, CertVerifyResult* verify_result, std::vector* verified_chain) { @@ -213,7 +217,8 @@ android::CertVerifyStatusAndroid TryVerifyWithAIAFetching( if (!PerformAIAFetchAndAddResultToVector(cert_net_fetcher, uri, &certs)) continue; android::CertVerifyStatusAndroid status = - AttemptVerificationAfterAIAFetch(certs, hostname, verify_result, + AttemptVerificationAfterAIAFetch(certs, hostname, ocsp_response, + sct_list, verify_result, verified_chain); if (status == android::CERT_VERIFY_STATUS_ANDROID_OK) return status; @@ -245,22 +250,24 @@ android::CertVerifyStatusAndroid TryVerifyWithAIAFetching( bool VerifyFromAndroidTrustManager( const std::vector& cert_bytes, const std::string& hostname, + const std::string& ocsp_response, + const std::string& sct_list, int flags, scoped_refptr cert_net_fetcher, CertVerifyResult* verify_result) { android::CertVerifyStatusAndroid status; std::vector verified_chain; - android::VerifyX509CertChain(cert_bytes, kAuthType, hostname, &status, - &verify_result->is_issued_by_known_root, - &verified_chain); + android::VerifyX509CertChain( + cert_bytes, kAuthType, hostname, ocsp_response, sct_list, &status, + &verify_result->is_issued_by_known_root, &verified_chain); // If verification resulted in a NO_TRUSTED_ROOT error, then fetch // intermediates and retry. if (status == android::CERT_VERIFY_STATUS_ANDROID_NO_TRUSTED_ROOT && !(flags & CertVerifyProc::VERIFY_DISABLE_NETWORK_FETCHES)) { - status = TryVerifyWithAIAFetching(cert_bytes, hostname, - std::move(cert_net_fetcher), + status = TryVerifyWithAIAFetching(cert_bytes, hostname, ocsp_response, + sct_list, std::move(cert_net_fetcher), verify_result, &verified_chain); } @@ -357,8 +364,9 @@ int CertVerifyProcAndroid::VerifyInternal(X509Certificate* cert, const NetLogWithSource& net_log) { std::vector cert_bytes; GetChainDEREncodedBytes(cert, &cert_bytes); - if (!VerifyFromAndroidTrustManager(cert_bytes, hostname, flags, - cert_net_fetcher_, verify_result)) { + if (!VerifyFromAndroidTrustManager(cert_bytes, hostname, ocsp_response, + sct_list, flags, cert_net_fetcher_, + verify_result)) { return ERR_FAILED; } diff --git a/naiveproxy/src/net/cert/cert_verify_proc_builtin.cc b/naiveproxy/src/net/cert/cert_verify_proc_builtin.cc index 199cd47f59..10456857c5 100644 --- a/naiveproxy/src/net/cert/cert_verify_proc_builtin.cc +++ b/naiveproxy/src/net/cert/cert_verify_proc_builtin.cc @@ -229,16 +229,11 @@ class CertVerifyProcTrustStore { bool IsNonChromeRootStoreTrustAnchor( const bssl::ParsedCertificate* trust_anchor) const { - return IsAdditionalTrustAnchor(trust_anchor) || + return additional_trust_store_->GetTrust(trust_anchor).IsTrustAnchor() || system_trust_store_->IsLocallyTrustedRoot(trust_anchor); } #endif - bool IsAdditionalTrustAnchor( - const bssl::ParsedCertificate* trust_anchor) const { - return additional_trust_store_->GetTrust(trust_anchor).IsTrustAnchor(); - } - private: raw_ptr system_trust_store_; raw_ptr additional_trust_store_; @@ -1126,9 +1121,6 @@ int AssignVerifyResult(X509Certificate* input_cert, if (trusted_cert) { verify_result->is_issued_by_known_root = trust_store->IsKnownRoot(trusted_cert); - - verify_result->is_issued_by_additional_trust_anchor = - trust_store->IsAdditionalTrustAnchor(trusted_cert); } if (path_is_valid && (verification_type == VerificationType::kEV)) { diff --git a/naiveproxy/src/net/cert/cert_verify_result.cc b/naiveproxy/src/net/cert/cert_verify_result.cc index 807d8af7ad..7044eb2657 100644 --- a/naiveproxy/src/net/cert/cert_verify_result.cc +++ b/naiveproxy/src/net/cert/cert_verify_result.cc @@ -30,7 +30,6 @@ void CertVerifyResult::Reset() { cert_status = 0; has_sha1 = false; is_issued_by_known_root = false; - is_issued_by_additional_trust_anchor = false; public_key_hashes.clear(); ocsp_result = bssl::OCSPVerifyResult(); @@ -46,9 +45,6 @@ base::Value::Dict CertVerifyResult::NetLogParams(int net_error) const { if (net_error < 0) dict.Set("net_error", net_error); dict.Set("is_issued_by_known_root", is_issued_by_known_root); - if (is_issued_by_additional_trust_anchor) { - dict.Set("is_issued_by_additional_trust_anchor", true); - } dict.Set("cert_status", static_cast(cert_status)); // TODO(mattm): This double-wrapping of the certificate list is weird. Remove // this (probably requires updates to netlog-viewer). diff --git a/naiveproxy/src/net/cert/cert_verify_result.h b/naiveproxy/src/net/cert/cert_verify_result.h index a80a5cb83d..43d43bd409 100644 --- a/naiveproxy/src/net/cert/cert_verify_result.h +++ b/naiveproxy/src/net/cert/cert_verify_result.h @@ -78,10 +78,6 @@ class NET_EXPORT CertVerifyResult { // meaningless if the certificate was not trusted. bool is_issued_by_known_root; - // is_issued_by_additional_trust_anchor is true if the root CA used for this - // verification came from the list of additional trust anchors. - bool is_issued_by_additional_trust_anchor; - // Verification of stapled OCSP response, if present. bssl::OCSPVerifyResult ocsp_result; diff --git a/naiveproxy/src/net/cert/coalescing_cert_verifier.cc b/naiveproxy/src/net/cert/coalescing_cert_verifier.cc index f4e48e0e5f..dc48c50938 100644 --- a/naiveproxy/src/net/cert/coalescing_cert_verifier.cc +++ b/naiveproxy/src/net/cert/coalescing_cert_verifier.cc @@ -4,6 +4,8 @@ #include "net/cert/coalescing_cert_verifier.h" +#include + #include "base/containers/linked_list.h" #include "base/containers/unique_ptr_adapters.h" #include "base/functional/bind.h" @@ -11,7 +13,6 @@ #include "base/memory/weak_ptr.h" #include "base/metrics/histogram_macros.h" #include "base/not_fatal_until.h" -#include "base/ranges/algorithm.h" #include "base/strings/string_number_conversions.h" #include "base/time/time.h" #include "net/base/net_errors.h" @@ -471,7 +472,7 @@ void CoalescingCertVerifier::RemoveJob(Job* job) { // Otherwise, it MUST have been a job from a previous generation. auto inflight_it = - base::ranges::find_if(inflight_jobs_, base::MatchesUniquePtr(job)); + std::ranges::find_if(inflight_jobs_, base::MatchesUniquePtr(job)); CHECK(inflight_it != inflight_jobs_.end(), base::NotFatalUntil::M130); inflight_jobs_.erase(inflight_it); return; diff --git a/naiveproxy/src/net/cert/crl_set.cc b/naiveproxy/src/net/cert/crl_set.cc index 6f096421e7..80da07a9da 100644 --- a/naiveproxy/src/net/cert/crl_set.cc +++ b/naiveproxy/src/net/cert/crl_set.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "net/cert/crl_set.h" #include @@ -70,13 +75,13 @@ std::optional ReadHeader(std::string_view* data) { const std::string_view header_bytes = data->substr(0, header_len); data->remove_prefix(header_len); - std::optional header = - base::JSONReader::Read(header_bytes, base::JSON_ALLOW_TRAILING_COMMAS); - if (!header || !header->is_dict()) { + std::optional header = base::JSONReader::ReadDict( + header_bytes, base::JSON_ALLOW_TRAILING_COMMAS); + if (!header) { return std::nullopt; } - return header; + return base::Value(std::move(*header)); } // kCurrentFileVersion is the version of the CRLSet file format that we diff --git a/naiveproxy/src/net/cert/ct_log_response_parser.cc b/naiveproxy/src/net/cert/ct_log_response_parser.cc index 7ffdd50d3b..9c522e62b9 100644 --- a/naiveproxy/src/net/cert/ct_log_response_parser.cc +++ b/naiveproxy/src/net/cert/ct_log_response_parser.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "net/cert/ct_log_response_parser.h" #include diff --git a/naiveproxy/src/net/cert/ct_log_verifier.cc b/naiveproxy/src/net/cert/ct_log_verifier.cc index e62909e820..9d8373c3ab 100644 --- a/naiveproxy/src/net/cert/ct_log_verifier.cc +++ b/naiveproxy/src/net/cert/ct_log_verifier.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "net/cert/ct_log_verifier.h" #include diff --git a/naiveproxy/src/net/cert/ct_objects_extractor.cc b/naiveproxy/src/net/cert/ct_objects_extractor.cc index bd5deb3488..179bbdb0b8 100644 --- a/naiveproxy/src/net/cert/ct_objects_extractor.cc +++ b/naiveproxy/src/net/cert/ct_objects_extractor.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "net/cert/ct_objects_extractor.h" #include diff --git a/naiveproxy/src/net/cert/internal/trust_store_nss.cc b/naiveproxy/src/net/cert/internal/trust_store_nss.cc index cd465a0cac..3dbadf4c62 100644 --- a/naiveproxy/src/net/cert/internal/trust_store_nss.cc +++ b/naiveproxy/src/net/cert/internal/trust_store_nss.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "net/cert/internal/trust_store_nss.h" #include @@ -110,12 +115,10 @@ bool IsMozillaCaPolicyProvided(PK11SlotInfo* slot, /*haslock=*/PR_FALSE) == CK_TRUE; } -bool IsCertOnlyInNSSRoots(CERTCertificate* cert) { - // In this path, `cert` could be a client certificate, so we should not skip - // the chaps module. +bool IsCertOnlyInNSSRoots(CERTCertificate* cert, bool ignore_chaps_module) { std::vector> slots_and_handles_for_cert = - GetAllSlotsAndHandlesForCert(cert, /*ignore_chaps_module=*/false); + GetAllSlotsAndHandlesForCert(cert, ignore_chaps_module); for (const auto& [slot, handle] : slots_and_handles_for_cert) { if (IsMozillaCaPolicyProvided(slot.get(), handle)) { // Cert is an NSS root. Continue looking to see if it also is present in @@ -220,6 +223,13 @@ void TrustStoreNSS::SyncGetIssuersOf(const bssl::ParsedCertificate* cert, std::vector TrustStoreNSS::ListCertsIgnoringNSSRoots() { + // In this path, the returned certs could include client certificates, so we + // should not skip the chaps module. + return ListCertsIgnoringNSSRootsImpl(/*ignore_chaps_module=*/false); +} + +std::vector +TrustStoreNSS::ListCertsIgnoringNSSRootsImpl(bool ignore_chaps_module) { crypto::EnsureNSSInit(); std::vector results; crypto::ScopedCERTCertList cert_list; @@ -245,7 +255,7 @@ TrustStoreNSS::ListCertsIgnoringNSSRoots() { CERTCertListNode* node; for (node = CERT_LIST_HEAD(cert_list); !CERT_LIST_END(node, cert_list); node = CERT_LIST_NEXT(node)) { - if (IsCertOnlyInNSSRoots(node->cert)) { + if (IsCertOnlyInNSSRoots(node->cert, ignore_chaps_module)) { continue; } results.emplace_back(x509_util::DupCERTCertificate(node->cert), @@ -516,7 +526,11 @@ bssl::CertificateTrust TrustStoreNSS::GetTrustForNSSTrust( std::vector TrustStoreNSS::GetAllUserAddedCerts() { std::vector user_added_certs; - for (const auto& cert_result : ListCertsIgnoringNSSRoots()) { + // Do not consider certs from Chaps here, as there should be no way for a + // user to have client cert in Chaps with a server auth trust setting. + std::vector certs = + ListCertsIgnoringNSSRootsImpl(/*ignore_chaps_module=*/true); + for (const auto& cert_result : certs) { // Skip user certs, unless the user added the user cert with specific // server auth trust settings. if (cert_result.trust.HasUnspecifiedTrust() && diff --git a/naiveproxy/src/net/cert/internal/trust_store_nss.h b/naiveproxy/src/net/cert/internal/trust_store_nss.h index 4e73f7c4f3..57007d32ea 100644 --- a/naiveproxy/src/net/cert/internal/trust_store_nss.h +++ b/naiveproxy/src/net/cert/internal/trust_store_nss.h @@ -64,6 +64,9 @@ class NET_EXPORT TrustStoreNSS : public PlatformTrustStore { std::vector ListCertsIgnoringNSSRoots(); private: + std::vector ListCertsIgnoringNSSRootsImpl( + bool ignore_chaps_module); + bssl::CertificateTrust GetTrustForNSSTrust(const CERTCertTrust& trust) const; bssl::CertificateTrust GetTrustIgnoringSystemTrust( diff --git a/naiveproxy/src/net/cert/internal/trust_store_win.cc b/naiveproxy/src/net/cert/internal/trust_store_win.cc index ef32f4a45a..25f57d0c83 100644 --- a/naiveproxy/src/net/cert/internal/trust_store_win.cc +++ b/naiveproxy/src/net/cert/internal/trust_store_win.cc @@ -9,6 +9,7 @@ #include "net/cert/internal/trust_store_win.h" +#include #include #include "base/containers/span.h" @@ -17,7 +18,6 @@ #include "base/location.h" #include "base/logging.h" #include "base/memory/ptr_util.h" -#include "base/ranges/algorithm.h" #include "base/strings/string_number_conversions.h" #include "base/threading/scoped_blocking_call.h" #include "net/base/features.h" @@ -338,7 +338,7 @@ class TrustStoreWin::Impl { x509_util::CertContextAsSpan(cert_from_store); // If a cert is in the windows distruted store, it is considered // distrusted for all purporses. EKU isn't checked. See crbug.com/1355961. - if (base::ranges::equal(cert_span, cert_from_store_span)) { + if (std::ranges::equal(cert_span, cert_from_store_span)) { return bssl::CertificateTrust::ForDistrusted(); } } @@ -348,7 +348,7 @@ class TrustStoreWin::Impl { CERT_FIND_SHA1_HASH, &cert_hash_blob, cert_from_store))) { base::span cert_from_store_span = x509_util::CertContextAsSpan(cert_from_store); - if (base::ranges::equal(cert_span, cert_from_store_span)) { + if (std::ranges::equal(cert_span, cert_from_store_span)) { // If we find at least one version of the cert that is trusted for TLS // Server Auth, we will trust the cert. if (IsCertTrustedForServerAuth(cert_from_store)) { @@ -362,7 +362,7 @@ class TrustStoreWin::Impl { CERT_FIND_SHA1_HASH, &cert_hash_blob, cert_from_store))) { base::span cert_from_store_span = x509_util::CertContextAsSpan(cert_from_store); - if (base::ranges::equal(cert_span, cert_from_store_span)) { + if (std::ranges::equal(cert_span, cert_from_store_span)) { // If we find at least one version of the cert that is trusted for TLS // Server Auth, we will trust the cert. if (IsCertTrustedForServerAuth(cert_from_store)) { diff --git a/naiveproxy/src/net/cert/known_roots.cc b/naiveproxy/src/net/cert/known_roots.cc index 947dcec279..1c0b56b0fa 100644 --- a/naiveproxy/src/net/cert/known_roots.cc +++ b/naiveproxy/src/net/cert/known_roots.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "net/cert/known_roots.h" #include diff --git a/naiveproxy/src/net/cert/nss_cert_database.h b/naiveproxy/src/net/cert/nss_cert_database.h index 5144b2143a..e659e9bd88 100644 --- a/naiveproxy/src/net/cert/nss_cert_database.h +++ b/naiveproxy/src/net/cert/nss_cert_database.h @@ -153,6 +153,9 @@ class NET_EXPORT NSSCertDatabase { enum class NSSRootsHandling { kInclude, + // TODO(crbug.com/390333881): kExclude is only used by the old cert + // manager. Remove this and any other no-longer needed NSSCertDatabase + // features once the new cert manager is fully launched. kExclude, }; // Asynchronously get a list of certificates along with additional diff --git a/naiveproxy/src/net/cert/signed_tree_head.cc b/naiveproxy/src/net/cert/signed_tree_head.cc index e255fcd920..db0931bafa 100644 --- a/naiveproxy/src/net/cert/signed_tree_head.cc +++ b/naiveproxy/src/net/cert/signed_tree_head.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "net/cert/signed_tree_head.h" #include diff --git a/naiveproxy/src/net/cert/x509_certificate.cc b/naiveproxy/src/net/cert/x509_certificate.cc index 568f598029..60be909183 100644 --- a/naiveproxy/src/net/cert/x509_certificate.cc +++ b/naiveproxy/src/net/cert/x509_certificate.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "net/cert/x509_certificate.h" #include diff --git a/naiveproxy/src/net/cert/x509_util_nss.cc b/naiveproxy/src/net/cert/x509_util_nss.cc index fccfeea322..387b389317 100644 --- a/naiveproxy/src/net/cert/x509_util_nss.cc +++ b/naiveproxy/src/net/cert/x509_util_nss.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "net/cert/x509_util_nss.h" #include // Must be included before certdb.h diff --git a/naiveproxy/src/net/cert_net/cert_net_fetcher_url_request.cc b/naiveproxy/src/net/cert_net/cert_net_fetcher_url_request.cc index 2352507698..f2326cff5e 100644 --- a/naiveproxy/src/net/cert_net/cert_net_fetcher_url_request.cc +++ b/naiveproxy/src/net/cert_net/cert_net_fetcher_url_request.cc @@ -58,6 +58,7 @@ #include "net/cert_net/cert_net_fetcher_url_request.h" +#include #include #include #include @@ -70,7 +71,6 @@ #include "base/memory/raw_ptr.h" #include "base/not_fatal_until.h" #include "base/numerics/safe_math.h" -#include "base/ranges/algorithm.h" #include "base/synchronization/waitable_event.h" #include "base/task/single_thread_task_runner.h" #include "base/time/time.h" @@ -463,7 +463,7 @@ void Job::AttachRequest( void Job::DetachRequest(CertNetFetcherURLRequest::RequestCore* request) { std::unique_ptr delete_this; - auto it = base::ranges::find(requests_, request); + auto it = std::ranges::find(requests_, request); CHECK(it != requests_.end(), base::NotFatalUntil::M130); requests_.erase(it); diff --git a/naiveproxy/src/net/cookies/canonical_cookie.cc b/naiveproxy/src/net/cookies/canonical_cookie.cc index 1d153d9e15..8c970aa2a5 100644 --- a/naiveproxy/src/net/cookies/canonical_cookie.cc +++ b/naiveproxy/src/net/cookies/canonical_cookie.cc @@ -58,6 +58,7 @@ #include "base/memory/ptr_util.h" #include "base/metrics/histogram_functions.h" #include "base/metrics/histogram_macros.h" +#include "base/rand_util.h" #include "base/strings/strcat.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" @@ -83,32 +84,6 @@ namespace { static constexpr int kMinutesInTwelveHours = 12 * 60; static constexpr int kMinutesInTwentyFourHours = 24 * 60; -// Determine the cookie domain to use for setting the specified cookie. -bool GetCookieDomain(const GURL& url, - const ParsedCookie& pc, - CookieInclusionStatus& status, - std::string* result) { - std::string domain_string; - if (pc.HasDomain()) - domain_string = pc.Domain(); - return cookie_util::GetCookieDomainWithString(url, domain_string, status, - result); -} - -// Compares cookies using name, domain and path, so that "equivalent" cookies -// (per RFC 2965) are equal to each other. -int PartialCookieOrdering(const CanonicalCookie& a, const CanonicalCookie& b) { - int diff = a.Name().compare(b.Name()); - if (diff != 0) - return diff; - - diff = a.Domain().compare(b.Domain()); - if (diff != 0) - return diff; - - return a.Path().compare(b.Path()); -} - void AppendCookieLineEntry(const CanonicalCookie& cookie, std::string* cookie_line) { if (!cookie_line->empty()) @@ -323,7 +298,8 @@ std::unique_ptr CanonicalCookie::Create( // Check the URL; it may be nonsense since some platform APIs may permit // it to be specified directly. if (!url.is_valid()) { - status->AddExclusionReason(CookieInclusionStatus::EXCLUDE_FAILURE_TO_STORE); + status->AddExclusionReason( + CookieInclusionStatus::ExclusionReason::EXCLUDE_FAILURE_TO_STORE); return nullptr; } @@ -350,11 +326,15 @@ std::unique_ptr CanonicalCookie::Create( parsed_cookie.HasDomain() && !base::IsStringASCII(parsed_cookie.Domain())); - std::string cookie_domain; - if (!GetCookieDomain(url, parsed_cookie, *status, &cookie_domain)) { + std::optional cookie_domain = + cookie_util::GetCookieDomainWithString( + url, parsed_cookie.HasDomain() ? parsed_cookie.Domain() : "", + *status); + if (!cookie_domain) { DVLOG(net::cookie_util::kVlogSetCookies) << "Create() failed to get a valid cookie domain"; - status->AddExclusionReason(CookieInclusionStatus::EXCLUDE_INVALID_DOMAIN); + status->AddExclusionReason( + CookieInclusionStatus::ExclusionReason::EXCLUDE_INVALID_DOMAIN); } std::string cookie_path = cookie_util::CanonPathWithString( @@ -380,7 +360,8 @@ std::unique_ptr CanonicalCookie::Create( if (!is_cookie_prefix_valid) { DVLOG(net::cookie_util::kVlogSetCookies) << "Create() failed because the cookie violated prefix rules."; - status->AddExclusionReason(CookieInclusionStatus::EXCLUDE_INVALID_PREFIX); + status->AddExclusionReason( + CookieInclusionStatus::ExclusionReason::EXCLUDE_INVALID_PREFIX); } bool partition_has_nonce = CookiePartitionKey::HasNonce(cookie_partition_key); @@ -388,7 +369,7 @@ std::unique_ptr CanonicalCookie::Create( url, parsed_cookie, partition_has_nonce); if (!is_partitioned_valid) { status->AddExclusionReason( - CookieInclusionStatus::EXCLUDE_INVALID_PARTITIONED); + CookieInclusionStatus::ExclusionReason::EXCLUDE_INVALID_PARTITIONED); } // Collect metrics on whether usage of the Partitioned attribute is correct. @@ -431,7 +412,7 @@ std::unique_ptr CanonicalCookie::Create( if (!url.SchemeIsCryptographic()) { status->AddWarningReason( - CookieInclusionStatus:: + CookieInclusionStatus::WarningReason:: WARN_TENTATIVELY_ALLOWING_SECURE_SOURCE_SCHEME); } } else { @@ -453,23 +434,31 @@ std::unique_ptr CanonicalCookie::Create( auto cc = std::make_unique( base::PassKey(), parsed_cookie.Name(), - parsed_cookie.Value(), std::move(cookie_domain), std::move(cookie_path), - creation_time, cookie_expires, creation_time, + parsed_cookie.Value(), std::move(cookie_domain).value_or(std::string()), + std::move(cookie_path), creation_time, cookie_expires, creation_time, /*last_update=*/base::Time::Now(), parsed_cookie.IsSecure(), parsed_cookie.IsHttpOnly(), samesite, parsed_cookie.Priority(), cookie_partition_key, source_scheme, source_port, source_type); + // Check if name or value contains any non-ascii values, exclude if they do. + if (base::FeatureList::IsEnabled(features::kDisallowNonAsciiCookies)) { + if (!base::IsStringASCII(cc->Name()) || !base::IsStringASCII(cc->Value())) { + status->AddExclusionReason( + CookieInclusionStatus::ExclusionReason::EXCLUDE_DISALLOWED_CHARACTER); + } + } + // TODO(chlily): Log metrics. if (!cc->IsCanonical()) { status->AddExclusionReason( - net::CookieInclusionStatus::EXCLUDE_FAILURE_TO_STORE); + net::CookieInclusionStatus::ExclusionReason::EXCLUDE_FAILURE_TO_STORE); return nullptr; } RecordCookieSameSiteAttributeValueHistogram(samesite_string); // These metrics capture whether or not a cookie has a Non-ASCII character in - // it. + // it, except if kDisallowNonAsciiCookies is enabled. UMA_HISTOGRAM_BOOLEAN("Cookie.HasNonASCII.Name", !base::IsStringASCII(cc->Name())); UMA_HISTOGRAM_BOOLEAN("Cookie.HasNonASCII.Value", @@ -511,17 +500,25 @@ std::unique_ptr CanonicalCookie::CreateSanitizedCookie( // Validate consistency of passed arguments. if (ParsedCookie::ParseTokenString(name) != name) { - status->AddExclusionReason( - net::CookieInclusionStatus::EXCLUDE_DISALLOWED_CHARACTER); + status->AddExclusionReason(net::CookieInclusionStatus::ExclusionReason:: + EXCLUDE_DISALLOWED_CHARACTER); } else if (ParsedCookie::ParseValueString(value) != value) { - status->AddExclusionReason( - net::CookieInclusionStatus::EXCLUDE_DISALLOWED_CHARACTER); + status->AddExclusionReason(net::CookieInclusionStatus::ExclusionReason:: + EXCLUDE_DISALLOWED_CHARACTER); } else if (ParsedCookie::ParseValueString(path) != path) { // NOTE: If `path` contains "terminating characters" ('\r', '\n', and // '\0'), ';', or leading / trailing whitespace, path will be rejected, // but any other control characters will just get URL-encoded below. - status->AddExclusionReason( - net::CookieInclusionStatus::EXCLUDE_DISALLOWED_CHARACTER); + status->AddExclusionReason(net::CookieInclusionStatus::ExclusionReason:: + EXCLUDE_DISALLOWED_CHARACTER); + } + + // Check if name or value contains any non-ascii values, exclude if they do. + if (base::FeatureList::IsEnabled(features::kDisallowNonAsciiCookies)) { + if (!base::IsStringASCII(name) || !base::IsStringASCII(value)) { + status->AddExclusionReason( + CookieInclusionStatus::ExclusionReason::EXCLUDE_DISALLOWED_CHARACTER); + } } // Validate name and value against character set and size limit constraints. @@ -534,33 +531,34 @@ std::unique_ptr CanonicalCookie::CreateSanitizedCookie( if ((ParsedCookie::ParseValueString(domain) != domain)) { status->AddExclusionReason( - net::CookieInclusionStatus::EXCLUDE_INVALID_DOMAIN); + net::CookieInclusionStatus::ExclusionReason::EXCLUDE_INVALID_DOMAIN); domain_is_valid = false; } if (!ParsedCookie::CookieAttributeValueHasValidCharSet(domain)) { status->AddExclusionReason( - net::CookieInclusionStatus::EXCLUDE_INVALID_DOMAIN); + net::CookieInclusionStatus::ExclusionReason::EXCLUDE_INVALID_DOMAIN); domain_is_valid = false; } if (!ParsedCookie::CookieAttributeValueHasValidSize(domain)) { - status->AddExclusionReason( - net::CookieInclusionStatus::EXCLUDE_ATTRIBUTE_VALUE_EXCEEDS_MAX_SIZE); + status->AddExclusionReason(net::CookieInclusionStatus::ExclusionReason:: + EXCLUDE_ATTRIBUTE_VALUE_EXCEEDS_MAX_SIZE); domain_is_valid = false; } const std::string& domain_attribute = domain_is_valid ? domain : std::string(); - std::string cookie_domain; + std::optional cookie_domain; // This validation step must happen before GetCookieDomainWithString, so it // doesn't fail DCHECKs. if (!cookie_util::DomainIsHostOnly(url.host())) { status->AddExclusionReason( - net::CookieInclusionStatus::EXCLUDE_INVALID_DOMAIN); - } else if (!cookie_util::GetCookieDomainWithString(url, domain_attribute, - *status, &cookie_domain)) { + net::CookieInclusionStatus::ExclusionReason::EXCLUDE_INVALID_DOMAIN); + } else if (cookie_domain = cookie_util::GetCookieDomainWithString( + url, domain_attribute, *status); + !cookie_domain) { status->AddExclusionReason( - net::CookieInclusionStatus::EXCLUDE_INVALID_DOMAIN); + net::CookieInclusionStatus::ExclusionReason::EXCLUDE_INVALID_DOMAIN); } // The next two sections set the source_scheme_ and source_port_. Normally @@ -582,7 +580,7 @@ std::unique_ptr CanonicalCookie::CreateSanitizedCookie( // doesn't fail DCHECKs. if (!url.is_valid()) { status->AddExclusionReason( - net::CookieInclusionStatus::EXCLUDE_INVALID_DOMAIN); + net::CookieInclusionStatus::ExclusionReason::EXCLUDE_INVALID_DOMAIN); } else { // It's possible that a trustworthy origin is setting this cookie with the // `Secure` attribute even if the url's scheme isn't secure. In that case @@ -596,7 +594,7 @@ std::unique_ptr CanonicalCookie::CreateSanitizedCookie( if (source_scheme == CookieSourceScheme::kSecure && !url.SchemeIsCryptographic()) { status->AddWarningReason( - CookieInclusionStatus:: + CookieInclusionStatus::WarningReason:: WARN_TENTATIVELY_ALLOWING_SECURE_SOURCE_SCHEME); } } @@ -624,14 +622,14 @@ std::unique_ptr CanonicalCookie::CreateSanitizedCookie( if (cookie_path != path) { // The path attribute was specified and found to be invalid, so record an // error. - status->AddExclusionReason( - net::CookieInclusionStatus::EXCLUDE_FAILURE_TO_STORE); + status->AddExclusionReason(net::CookieInclusionStatus::ExclusionReason:: + EXCLUDE_FAILURE_TO_STORE); } else if (!ParsedCookie::CookieAttributeValueHasValidSize( encoded_cookie_path)) { // The path attribute was specified and encodes into a value that's longer // than the length limit, so record an error. - status->AddExclusionReason( - net::CookieInclusionStatus::EXCLUDE_ATTRIBUTE_VALUE_EXCEEDS_MAX_SIZE); + status->AddExclusionReason(net::CookieInclusionStatus::ExclusionReason:: + EXCLUDE_ATTRIBUTE_VALUE_EXCEEDS_MAX_SIZE); } } @@ -639,12 +637,12 @@ std::unique_ptr CanonicalCookie::CreateSanitizedCookie( if (!cookie_util::IsCookiePrefixValid(prefix, url, secure, domain_attribute, cookie_path)) { status->AddExclusionReason( - net::CookieInclusionStatus::EXCLUDE_INVALID_PREFIX); + net::CookieInclusionStatus::ExclusionReason::EXCLUDE_INVALID_PREFIX); } if (name == "" && HasHiddenPrefixName(value)) { status->AddExclusionReason( - net::CookieInclusionStatus::EXCLUDE_INVALID_PREFIX); + net::CookieInclusionStatus::ExclusionReason::EXCLUDE_INVALID_PREFIX); } if (!cookie_util::IsCookiePartitionedValid( @@ -652,13 +650,13 @@ std::unique_ptr CanonicalCookie::CreateSanitizedCookie( /*is_partitioned=*/partition_key.has_value(), /*partition_has_nonce=*/ CookiePartitionKey::HasNonce(partition_key))) { - status->AddExclusionReason( - net::CookieInclusionStatus::EXCLUDE_INVALID_PARTITIONED); + status->AddExclusionReason(net::CookieInclusionStatus::ExclusionReason:: + EXCLUDE_INVALID_PARTITIONED); } if (!last_access_time.is_null() && creation_time.is_null()) { status->AddExclusionReason( - net::CookieInclusionStatus::EXCLUDE_FAILURE_TO_STORE); + net::CookieInclusionStatus::ExclusionReason::EXCLUDE_FAILURE_TO_STORE); } expiration_time = ValidateAndAdjustExpiryDate(expiration_time, creation_time, source_scheme); @@ -667,7 +665,8 @@ std::unique_ptr CanonicalCookie::CreateSanitizedCookie( return nullptr; auto cc = std::make_unique( - base::PassKey(), name, value, std::move(cookie_domain), + base::PassKey(), name, value, + std::move(cookie_domain).value_or(std::string()), std::move(encoded_cookie_path), creation_time, expiration_time, last_access_time, /*last_update=*/base::Time::Now(), secure, http_only, same_site, priority, @@ -803,9 +802,29 @@ void CanonicalCookie::PostIncludeForRequestURL( const CookieOptions& options_used, CookieOptions::SameSiteCookieContext::ContextType cookie_inclusion_context_used) const { - UMA_HISTOGRAM_ENUMERATION( - "Cookie.RequestSameSiteContext", cookie_inclusion_context_used, - CookieOptions::SameSiteCookieContext::ContextType::COUNT); + if (metrics_subsampler_.ShouldSample(0.001)) { + UMA_HISTOGRAM_ENUMERATION( + "Cookie.RequestSameSiteContext", cookie_inclusion_context_used, + CookieOptions::SameSiteCookieContext::ContextType::COUNT); + + if (access_result.status.IsInclude()) { + UMA_HISTOGRAM_ENUMERATION("Cookie.IncludedRequestEffectiveSameSite", + access_result.effective_same_site, + CookieEffectiveSameSite::COUNT); + } + + using ContextRedirectTypeBug1221316 = CookieOptions::SameSiteCookieContext:: + ContextMetadata::ContextRedirectTypeBug1221316; + + ContextRedirectTypeBug1221316 redirect_type_for_metrics = + options_used.same_site_cookie_context() + .GetMetadataForCurrentSchemefulMode() + .redirect_type_bug_1221316; + if (redirect_type_for_metrics != ContextRedirectTypeBug1221316::kUnset) { + UMA_HISTOGRAM_ENUMERATION("Cookie.CrossSiteRedirectType.Read", + redirect_type_for_metrics); + } + } // For the metric, we only want to consider first party partitioned cookies. if (IsFirstPartyPartitioned()) { @@ -815,48 +834,12 @@ void CanonicalCookie::PostIncludeForRequestURL( CookieOptions::SameSiteCookieContext::ContextType::CROSS_SITE); } - if (access_result.status.IsInclude()) { - UMA_HISTOGRAM_ENUMERATION("Cookie.IncludedRequestEffectiveSameSite", - access_result.effective_same_site, - CookieEffectiveSameSite::COUNT); - } - - using ContextRedirectTypeBug1221316 = CookieOptions::SameSiteCookieContext:: - ContextMetadata::ContextRedirectTypeBug1221316; - - ContextRedirectTypeBug1221316 redirect_type_for_metrics = - options_used.same_site_cookie_context() - .GetMetadataForCurrentSchemefulMode() - .redirect_type_bug_1221316; - if (redirect_type_for_metrics != ContextRedirectTypeBug1221316::kUnset) { - UMA_HISTOGRAM_ENUMERATION("Cookie.CrossSiteRedirectType.Read", - redirect_type_for_metrics); - } - if (access_result.status.HasWarningReason( - CookieInclusionStatus:: + CookieInclusionStatus::WarningReason:: WARN_CROSS_SITE_REDIRECT_DOWNGRADE_CHANGES_INCLUSION)) { UMA_HISTOGRAM_ENUMERATION( "Cookie.CrossSiteRedirectDowngradeChangesInclusion2.Read", CookieSameSiteToCookieSameSiteForMetrics(SameSite())); - - using HttpMethod = - CookieOptions::SameSiteCookieContext::ContextMetadata::HttpMethod; - - HttpMethod http_method_enum = options_used.same_site_cookie_context() - .GetMetadataForCurrentSchemefulMode() - .http_method_bug_1221316; - - DCHECK(http_method_enum != HttpMethod::kUnset); - - UMA_HISTOGRAM_ENUMERATION( - "Cookie.CrossSiteRedirectDowngradeChangesInclusionHttpMethod", - http_method_enum); - - base::TimeDelta cookie_age = base::Time::Now() - CreationDate(); - UMA_HISTOGRAM_EXACT_LINEAR( - "Cookie.CrossSiteRedirectDowngradeChangesInclusionAge", - cookie_age.InMinutes(), 30); } } @@ -882,7 +865,7 @@ void CanonicalCookie::PostIsSetPermittedInContext( } if (access_result.status.HasWarningReason( - CookieInclusionStatus:: + CookieInclusionStatus::WarningReason:: WARN_CROSS_SITE_REDIRECT_DOWNGRADE_CHANGES_INCLUSION)) { UMA_HISTOGRAM_ENUMERATION( "Cookie.CrossSiteRedirectDowngradeChangesInclusion2.Write", @@ -907,10 +890,6 @@ std::string CanonicalCookie::DebugString() const { static_cast(CreationDate().ToTimeT())); } -bool CanonicalCookie::PartialCompare(const CanonicalCookie& other) const { - return PartialCookieOrdering(*this, other) < 0; -} - bool CanonicalCookie::IsCanonical() const { // TODO(crbug.com/40787717) Eventually we should check the size of name+value, // assuming we collect metrics and determine that a low percentage of cookies @@ -947,6 +926,13 @@ bool CanonicalCookie::IsCanonicalForFromStorage() const { return false; } + // Check if name or value contains any non-ascii values, fail if they do. + if (base::FeatureList::IsEnabled(features::kDisallowNonAsciiCookies)) { + if (!base::IsStringASCII(Name()) || !base::IsStringASCII(Value())) { + return false; + } + } + url::CanonHostInfo canon_host_info; std::string canonical_domain(CanonicalizeHost(Domain(), &canon_host_info)); diff --git a/naiveproxy/src/net/cookies/canonical_cookie.h b/naiveproxy/src/net/cookies/canonical_cookie.h index b9c8466019..28e418cf8f 100644 --- a/naiveproxy/src/net/cookies/canonical_cookie.h +++ b/naiveproxy/src/net/cookies/canonical_cookie.h @@ -13,6 +13,7 @@ #include "base/feature_list.h" #include "base/gtest_prod_util.h" +#include "base/rand_util.h" #include "base/time/time.h" #include "base/types/pass_key.h" #include "crypto/process_bound_string.h" @@ -240,17 +241,8 @@ class NET_EXPORT CanonicalCookie : public CookieBase { bool IsEquivalent(const CanonicalCookie& ecc) const { // It seems like it would make sense to take secure, httponly, and samesite // into account, but the RFC doesn't specify this. - // NOTE: Keep this logic in-sync with TrimDuplicateCookiesForKey(). - // A host cookie will never match a domain cookie or vice-versa, this is - // because the "host-only-flag" is encoded within the `domain` field of the - // respective keys. So we don't need to explicitly check if ecc is also host - // or domain. - if (IsHostCookie()) { - return UniqueKey() == ecc.UniqueKey(); - } - // Is domain cookie - return UniqueDomainKey() == ecc.UniqueDomainKey(); + return UniqueKey() == ecc.UniqueKey(); } // Checks a looser set of equivalency rules than 'IsEquivalent()' in order @@ -312,13 +304,6 @@ class NET_EXPORT CanonicalCookie : public CookieBase { const base::Time& creation_date, net::CookieSourceScheme scheme); - // Cookie ordering methods. - - // Returns true if the cookie is less than |other|, considering only name, - // domain and path. In particular, two equivalent cookies (see IsEquivalent()) - // are identical for PartialCompare(). - bool PartialCompare(const CanonicalCookie& other) const; - // Return whether this object is a valid CanonicalCookie(). Invalid // cookies may be constructed by the detailed constructor. // A cookie is considered canonical if-and-only-if: @@ -419,6 +404,7 @@ class NET_EXPORT CanonicalCookie : public CookieBase { base::Time last_update_date_; CookiePriority priority_{COOKIE_PRIORITY_MEDIUM}; CookieSourceType source_type_{CookieSourceType::kUnknown}; + base::MetricsSubSampler metrics_subsampler_; }; // Used to pass excluded cookie information when it's possible that the diff --git a/naiveproxy/src/net/cookies/canonical_cookie_test_helpers.h b/naiveproxy/src/net/cookies/canonical_cookie_test_helpers.h index a3e7dd9910..7f4a1d558d 100644 --- a/naiveproxy/src/net/cookies/canonical_cookie_test_helpers.h +++ b/naiveproxy/src/net/cookies/canonical_cookie_test_helpers.h @@ -11,11 +11,27 @@ #include "base/strings/string_split.h" #include "net/cookies/canonical_cookie.h" +#include "net/cookies/cookie_inclusion_status.h" #include "testing/gmock/include/gmock/gmock-matchers.h" #include "testing/gmock/include/gmock/gmock.h" namespace net { +namespace internal { +MATCHER_P(HasExactlyExclusionReasonsForTesting, reasons, "") { + const CookieInclusionStatus status = arg; + return testing::ExplainMatchResult( + true, status.HasExactlyExclusionReasonsForTesting(reasons), + result_listener); +} +MATCHER_P(HasExactlyWarningReasonsForTesting, reasons, "") { + const CookieInclusionStatus status = arg; + return testing::ExplainMatchResult( + true, status.HasExactlyWarningReasonsForTesting(reasons), + result_listener); +} +} // namespace internal + MATCHER_P(MatchesCookieLine, cookie_line, "") { std::string argument_line = CanonicalCookie::BuildCookieLine(arg); if (argument_line == cookie_line) @@ -118,21 +134,15 @@ MATCHER_P(HasExactlyExemptionReason, reason, "") { // Helper for checking that status.HasExactlyExclusionReasonsForTesting(reasons) // == true. -MATCHER_P(HasExactlyExclusionReasonsForTesting, reasons, "") { - const CookieInclusionStatus status = arg; - return testing::ExplainMatchResult( - true, status.HasExactlyExclusionReasonsForTesting(reasons), - result_listener); -} +inline constexpr auto& HasExactlyExclusionReasonsForTesting = + internal::HasExactlyExclusionReasonsForTesting< + CookieInclusionStatus::ExclusionReasonBitset>; // Helper for checking that status.HasExactlyWarningReasonsForTesting(reasons) // == true. -MATCHER_P(HasExactlyWarningReasonsForTesting, reasons, "") { - const CookieInclusionStatus status = arg; - return testing::ExplainMatchResult( - true, status.HasExactlyWarningReasonsForTesting(reasons), - result_listener); -} +inline constexpr auto& HasExactlyWarningReasonsForTesting = + internal::HasExactlyWarningReasonsForTesting< + CookieInclusionStatus::WarningReasonBitset>; MATCHER(ShouldWarn, "") { net::CookieInclusionStatus status = arg; diff --git a/naiveproxy/src/net/cookies/cookie_base.cc b/naiveproxy/src/net/cookies/cookie_base.cc index 511eb875be..ecadbe43de 100644 --- a/naiveproxy/src/net/cookies/cookie_base.cc +++ b/naiveproxy/src/net/cookies/cookie_base.cc @@ -7,6 +7,7 @@ #include "base/containers/contains.h" #include "base/feature_list.h" #include "base/strings/strcat.h" +#include "base/types/pass_key.h" #include "net/base/features.h" #include "net/cookies/cookie_constants.h" #include "net/cookies/cookie_inclusion_status.h" @@ -104,8 +105,8 @@ void ApplySameSiteCookieWarningToStatus( if (samesite == CookieSameSite::UNSPECIFIED && same_site_context.GetContextForCookieInclusion() < CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_LAX) { - status->AddWarningReason( - CookieInclusionStatus::WARN_SAMESITE_UNSPECIFIED_CROSS_SITE_CONTEXT); + status->AddWarningReason(CookieInclusionStatus::WarningReason:: + WARN_SAMESITE_UNSPECIFIED_CROSS_SITE_CONTEXT); } if (effective_samesite == CookieEffectiveSameSite::LAX_MODE_ALLOW_UNSAFE && same_site_context.GetContextForCookieInclusion() == @@ -114,13 +115,14 @@ void ApplySameSiteCookieWarningToStatus( // This warning is more specific so remove the previous, more general, // warning. status->RemoveWarningReason( - CookieInclusionStatus::WARN_SAMESITE_UNSPECIFIED_CROSS_SITE_CONTEXT); - status->AddWarningReason( - CookieInclusionStatus::WARN_SAMESITE_UNSPECIFIED_LAX_ALLOW_UNSAFE); + CookieInclusionStatus::WarningReason:: + WARN_SAMESITE_UNSPECIFIED_CROSS_SITE_CONTEXT); + status->AddWarningReason(CookieInclusionStatus::WarningReason:: + WARN_SAMESITE_UNSPECIFIED_LAX_ALLOW_UNSAFE); } if (samesite == CookieSameSite::NO_RESTRICTION && !is_secure) { status->AddWarningReason( - CookieInclusionStatus::WARN_SAMESITE_NONE_INSECURE); + CookieInclusionStatus::WarningReason::WARN_SAMESITE_NONE_INSECURE); } // Add a warning if the cookie would be accessible in @@ -129,19 +131,19 @@ void ApplySameSiteCookieWarningToStatus( if (IsBreakingStrictToLaxDowngrade(same_site_context.context(), same_site_context.schemeful_context(), effective_samesite, is_cookie_being_set)) { - status->AddWarningReason( - CookieInclusionStatus::WARN_STRICT_LAX_DOWNGRADE_STRICT_SAMESITE); + status->AddWarningReason(CookieInclusionStatus::WarningReason:: + WARN_STRICT_LAX_DOWNGRADE_STRICT_SAMESITE); } else if (IsBreakingStrictToCrossDowngrade( same_site_context.context(), same_site_context.schemeful_context(), effective_samesite)) { // Which warning to apply depends on the SameSite value. if (effective_samesite == CookieEffectiveSameSite::STRICT_MODE) { - status->AddWarningReason( - CookieInclusionStatus::WARN_STRICT_CROSS_DOWNGRADE_STRICT_SAMESITE); + status->AddWarningReason(CookieInclusionStatus::WarningReason:: + WARN_STRICT_CROSS_DOWNGRADE_STRICT_SAMESITE); } else { // LAX_MODE or LAX_MODE_ALLOW_UNSAFE. - status->AddWarningReason( - CookieInclusionStatus::WARN_STRICT_CROSS_DOWNGRADE_LAX_SAMESITE); + status->AddWarningReason(CookieInclusionStatus::WarningReason:: + WARN_STRICT_CROSS_DOWNGRADE_LAX_SAMESITE); } } else if (IsBreakingLaxToCrossDowngrade( @@ -150,13 +152,13 @@ void ApplySameSiteCookieWarningToStatus( is_cookie_being_set)) { // Which warning to apply depends on the SameSite value. if (effective_samesite == CookieEffectiveSameSite::STRICT_MODE) { - status->AddWarningReason( - CookieInclusionStatus::WARN_LAX_CROSS_DOWNGRADE_STRICT_SAMESITE); + status->AddWarningReason(CookieInclusionStatus::WarningReason:: + WARN_LAX_CROSS_DOWNGRADE_STRICT_SAMESITE); } else { // LAX_MODE or LAX_MODE_ALLOW_UNSAFE. // This warning applies to both set/send. - status->AddWarningReason( - CookieInclusionStatus::WARN_LAX_CROSS_DOWNGRADE_LAX_SAMESITE); + status->AddWarningReason(CookieInclusionStatus::WarningReason:: + WARN_LAX_CROSS_DOWNGRADE_LAX_SAMESITE); } } @@ -196,7 +198,7 @@ void ApplySameSiteCookieWarningToStatus( } if (apply_cross_site_redirect_downgrade_warning) { status->AddWarningReason( - CookieInclusionStatus:: + CookieInclusionStatus::WarningReason:: WARN_CROSS_SITE_REDIRECT_DOWNGRADE_CHANGES_INCLUSION); } @@ -214,7 +216,8 @@ CookieAccessResult CookieBase::IncludeForRequestURL( CookieInclusionStatus status; // Filter out HttpOnly cookies, per options. if (options.exclude_httponly() && IsHttpOnly()) { - status.AddExclusionReason(CookieInclusionStatus::EXCLUDE_HTTP_ONLY); + status.AddExclusionReason( + CookieInclusionStatus::ExclusionReason::EXCLUDE_HTTP_ONLY); } // Secure cookies should not be included in requests for URLs with an // insecure scheme, unless it is a localhost url, or the CookieAccessDelegate @@ -230,7 +233,8 @@ CookieAccessResult CookieBase::IncludeForRequestURL( switch (cookie_access_scheme) { case CookieAccessScheme::kNonCryptographic: if (SecureAttribute()) { - status.AddExclusionReason(CookieInclusionStatus::EXCLUDE_SECURE_ONLY); + status.AddExclusionReason( + CookieInclusionStatus::ExclusionReason::EXCLUDE_SECURE_ONLY); } break; case CookieAccessScheme::kTrustworthy: @@ -240,7 +244,7 @@ CookieAccessResult CookieBase::IncludeForRequestURL( source_scheme_ == CookieSourceScheme::kSecure && params.scope_semantics != net::CookieScopeSemantics::LEGACY)) { status.AddWarningReason( - CookieInclusionStatus:: + CookieInclusionStatus::WarningReason:: WARN_SECURE_ACCESS_GRANTED_NON_CRYPTOGRAPHIC); } break; @@ -267,12 +271,15 @@ CookieAccessResult CookieBase::IncludeForRequestURL( // already blocked due to the `Secure` attribute. if (source_scheme_ == CookieSourceScheme::kSecure && cookie_access_scheme == CookieAccessScheme::kNonCryptographic && - !status.HasExclusionReason(CookieInclusionStatus::EXCLUDE_SECURE_ONLY)) { + !status.HasExclusionReason( + CookieInclusionStatus::ExclusionReason::EXCLUDE_SECURE_ONLY)) { if (cookie_util::IsSchemeBoundCookiesEnabled() && params.scope_semantics != net::CookieScopeSemantics::LEGACY) { - status.AddExclusionReason(CookieInclusionStatus::EXCLUDE_SCHEME_MISMATCH); + status.AddExclusionReason( + CookieInclusionStatus::ExclusionReason::EXCLUDE_SCHEME_MISMATCH); } else { - status.AddWarningReason(CookieInclusionStatus::WARN_SCHEME_MISMATCH); + status.AddWarningReason( + CookieInclusionStatus::WarningReason::WARN_SCHEME_MISMATCH); } } // A cookie with a source scheme of kNonSecure shouldn't be accessible by @@ -281,9 +288,11 @@ CookieAccessResult CookieBase::IncludeForRequestURL( cookie_access_scheme == CookieAccessScheme::kCryptographic) { if (cookie_util::IsSchemeBoundCookiesEnabled() && params.scope_semantics != net::CookieScopeSemantics::LEGACY) { - status.AddExclusionReason(CookieInclusionStatus::EXCLUDE_SCHEME_MISMATCH); + status.AddExclusionReason( + CookieInclusionStatus::ExclusionReason::EXCLUDE_SCHEME_MISMATCH); } else { - status.AddWarningReason(CookieInclusionStatus::WARN_SCHEME_MISMATCH); + status.AddWarningReason( + CookieInclusionStatus::WarningReason::WARN_SCHEME_MISMATCH); } } // Else, the cookie has a source scheme of kUnset or the access scheme is @@ -304,20 +313,24 @@ CookieAccessResult CookieBase::IncludeForRequestURL( if (!port_matches && !trustworthy_and_443) { if (cookie_util::IsPortBoundCookiesEnabled() && params.scope_semantics != net::CookieScopeSemantics::LEGACY) { - status.AddExclusionReason(CookieInclusionStatus::EXCLUDE_PORT_MISMATCH); + status.AddExclusionReason( + CookieInclusionStatus::ExclusionReason::EXCLUDE_PORT_MISMATCH); } else { - status.AddWarningReason(CookieInclusionStatus::WARN_PORT_MISMATCH); + status.AddWarningReason( + CookieInclusionStatus::WarningReason::WARN_PORT_MISMATCH); } } // Don't include cookies for requests that don't apply to the cookie domain. if (!IsDomainMatch(url.host())) { - status.AddExclusionReason(CookieInclusionStatus::EXCLUDE_DOMAIN_MISMATCH); + status.AddExclusionReason( + CookieInclusionStatus::ExclusionReason::EXCLUDE_DOMAIN_MISMATCH); } // Don't include cookies for requests with a url path that does not path // match the cookie-path. if (!IsOnPath(url.path())) { - status.AddExclusionReason(CookieInclusionStatus::EXCLUDE_NOT_ON_PATH); + status.AddExclusionReason( + CookieInclusionStatus::ExclusionReason::EXCLUDE_NOT_ON_PATH); } // For LEGACY cookies we should always return the schemeless context, @@ -339,7 +352,7 @@ CookieAccessResult CookieBase::IncludeForRequestURL( if (cookie_inclusion_context < CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_STRICT) { status.AddExclusionReason( - CookieInclusionStatus::EXCLUDE_SAMESITE_STRICT); + CookieInclusionStatus::ExclusionReason::EXCLUDE_SAMESITE_STRICT); } break; case CookieEffectiveSameSite::LAX_MODE: @@ -347,9 +360,9 @@ CookieAccessResult CookieBase::IncludeForRequestURL( CookieOptions::SameSiteCookieContext::ContextType::SAME_SITE_LAX) { status.AddExclusionReason( (SameSite() == CookieSameSite::UNSPECIFIED) - ? CookieInclusionStatus:: + ? CookieInclusionStatus::ExclusionReason:: EXCLUDE_SAMESITE_UNSPECIFIED_TREATED_AS_LAX - : CookieInclusionStatus::EXCLUDE_SAMESITE_LAX); + : CookieInclusionStatus::ExclusionReason::EXCLUDE_SAMESITE_LAX); } break; // TODO(crbug.com/40638805): Add a browsertest for this behavior. @@ -360,7 +373,8 @@ CookieAccessResult CookieBase::IncludeForRequestURL( SAME_SITE_LAX_METHOD_UNSAFE) { // TODO(chlily): Do we need a separate CookieInclusionStatus for this? status.AddExclusionReason( - CookieInclusionStatus::EXCLUDE_SAMESITE_UNSPECIFIED_TREATED_AS_LAX); + CookieInclusionStatus::ExclusionReason:: + EXCLUDE_SAMESITE_UNSPECIFIED_TREATED_AS_LAX); } break; default: @@ -374,7 +388,7 @@ CookieAccessResult CookieBase::IncludeForRequestURL( if (params.access_semantics != CookieAccessSemantics::LEGACY && SameSite() == CookieSameSite::NO_RESTRICTION && !SecureAttribute()) { status.AddExclusionReason( - CookieInclusionStatus::EXCLUDE_SAMESITE_NONE_INSECURE); + CookieInclusionStatus::ExclusionReason::EXCLUDE_SAMESITE_NONE_INSECURE); } ApplySameSiteCookieWarningToStatus(SameSite(), effective_same_site, @@ -404,12 +418,12 @@ CookieAccessResult CookieBase::IsSetPermittedInContext( if (!base::Contains(cookieable_schemes, source_url.scheme())) { access_result.status.AddExclusionReason( - CookieInclusionStatus::EXCLUDE_NONCOOKIEABLE_SCHEME); + CookieInclusionStatus::ExclusionReason::EXCLUDE_NONCOOKIEABLE_SCHEME); } if (!IsDomainMatch(source_url.host())) { access_result.status.AddExclusionReason( - CookieInclusionStatus::EXCLUDE_DOMAIN_MISMATCH); + CookieInclusionStatus::ExclusionReason::EXCLUDE_DOMAIN_MISMATCH); } CookieAccessScheme access_scheme = @@ -424,7 +438,7 @@ CookieAccessResult CookieBase::IsSetPermittedInContext( access_result.is_allowed_to_access_secure_cookies = false; if (SecureAttribute()) { access_result.status.AddExclusionReason( - CookieInclusionStatus::EXCLUDE_SECURE_ONLY); + CookieInclusionStatus::ExclusionReason::EXCLUDE_SECURE_ONLY); } break; @@ -443,7 +457,7 @@ CookieAccessResult CookieBase::IsSetPermittedInContext( // when they also specify "Secure" this if statement will already apply // to them. access_result.status.AddWarningReason( - CookieInclusionStatus:: + CookieInclusionStatus::WarningReason:: WARN_SECURE_ACCESS_GRANTED_NON_CRYPTOGRAPHIC); } break; @@ -454,7 +468,7 @@ CookieAccessResult CookieBase::IsSetPermittedInContext( DVLOG(net::cookie_util::kVlogSetCookies) << "HttpOnly cookie not permitted in script context."; access_result.status.AddExclusionReason( - CookieInclusionStatus::EXCLUDE_HTTP_ONLY); + CookieInclusionStatus::ExclusionReason::EXCLUDE_HTTP_ONLY); } // Unless legacy access semantics are in effect, SameSite=None cookies without @@ -464,7 +478,7 @@ CookieAccessResult CookieBase::IsSetPermittedInContext( DVLOG(net::cookie_util::kVlogSetCookies) << "SetCookie() rejecting insecure cookie with SameSite=None."; access_result.status.AddExclusionReason( - CookieInclusionStatus::EXCLUDE_SAMESITE_NONE_INSECURE); + CookieInclusionStatus::ExclusionReason::EXCLUDE_SAMESITE_NONE_INSECURE); } // For LEGACY cookies we should always return the schemeless context, @@ -489,7 +503,7 @@ CookieAccessResult CookieBase::IsSetPermittedInContext( << "Trying to set a `SameSite=Strict` cookie from a " "cross-site URL."; access_result.status.AddExclusionReason( - CookieInclusionStatus::EXCLUDE_SAMESITE_STRICT); + CookieInclusionStatus::ExclusionReason::EXCLUDE_SAMESITE_STRICT); } break; case CookieEffectiveSameSite::LAX_MODE: @@ -501,13 +515,13 @@ CookieAccessResult CookieBase::IsSetPermittedInContext( << "Cookies with no known SameSite attribute being treated as " "lax; attempt to set from a cross-site URL denied."; access_result.status.AddExclusionReason( - CookieInclusionStatus:: + CookieInclusionStatus::ExclusionReason:: EXCLUDE_SAMESITE_UNSPECIFIED_TREATED_AS_LAX); } else { DVLOG(net::cookie_util::kVlogSetCookies) << "Trying to set a `SameSite=Lax` cookie from a cross-site URL."; access_result.status.AddExclusionReason( - CookieInclusionStatus::EXCLUDE_SAMESITE_LAX); + CookieInclusionStatus::ExclusionReason::EXCLUDE_SAMESITE_LAX); } } break; @@ -553,30 +567,29 @@ std::string CookieBase::DomainWithoutDot() const { return cookie_util::CookieDomainAsHost(domain_); } -CookieBase::UniqueCookieKey CookieBase::UniqueKey() const { - std::optional source_scheme = - cookie_util::IsSchemeBoundCookiesEnabled() - ? std::make_optional(source_scheme_) - : std::nullopt; - std::optional source_port = cookie_util::IsPortBoundCookiesEnabled() - ? std::make_optional(source_port_) - : std::nullopt; - - return std::make_tuple(partition_key_, name_, domain_, path_, source_scheme, - source_port); -} - -CookieBase::UniqueDomainCookieKey CookieBase::UniqueDomainKey() const { +UniqueCookieKey CookieBase::UniqueKey() const { std::optional source_scheme = cookie_util::IsSchemeBoundCookiesEnabled() ? std::make_optional(source_scheme_) : std::nullopt; - return std::make_tuple(partition_key_, name_, domain_, path_, source_scheme); + if (IsHostCookie()) { + std::optional source_port = cookie_util::IsPortBoundCookiesEnabled() + ? std::make_optional(source_port_) + : std::nullopt; + + return UniqueCookieKey::Host(base::PassKey(), partition_key_, + name_, domain_, path_, source_scheme, + source_port); + } + + return UniqueCookieKey::Domain(base::PassKey(), partition_key_, + name_, domain_, path_, source_scheme); } -CookieBase::LegacyUniqueCookieKey CookieBase::LegacyUniqueKey() const { - return std::make_tuple(partition_key_, name_, domain_, path_); +UniqueCookieKey CookieBase::LegacyUniqueKey() const { + return UniqueCookieKey::Legacy(base::PassKey(), partition_key_, + name_, domain_, path_); } void CookieBase::SetSourcePort(int port) { diff --git a/naiveproxy/src/net/cookies/cookie_base.h b/naiveproxy/src/net/cookies/cookie_base.h index c803305fb3..cf84d04990 100644 --- a/naiveproxy/src/net/cookies/cookie_base.h +++ b/naiveproxy/src/net/cookies/cookie_base.h @@ -9,12 +9,14 @@ #include #include +#include "base/types/pass_key.h" #include "net/base/net_export.h" #include "net/cookies/cookie_access_params.h" #include "net/cookies/cookie_access_result.h" #include "net/cookies/cookie_constants.h" #include "net/cookies/cookie_options.h" #include "net/cookies/cookie_partition_key.h" +#include "net/cookies/unique_cookie_key.h" class GURL; @@ -25,39 +27,6 @@ namespace net { // the request context. class NET_EXPORT CookieBase { public: - // StrictlyUniqueCookieKey always populates the cookie's source scheme and - // source port. - using StrictlyUniqueCookieKey = std::tuple, - /*name=*/std::string, - /*domain=*/std::string, - /*path=*/std::string, - CookieSourceScheme, - /*source_port=*/int>; - - // Conditionally populates the source scheme and source port depending on the - // state of their associated feature. - using UniqueCookieKey = std::tuple, - /*name=*/std::string, - /*domain=*/std::string, - /*path=*/std::string, - std::optional, - /*source_port=*/std::optional>; - - // Same as UniqueCookieKey but for use with Domain cookies, which do not - // consider the source_port. - using UniqueDomainCookieKey = std::tuple, - /*name=*/std::string, - /*domain=*/std::string, - /*path=*/std::string, - std::optional>; - - // Same as UniqueCookieKey but for use with Legacy Scoped cookies, which do - // not consider the source_port or source_scheme. - using LegacyUniqueCookieKey = std::tuple, - /*name=*/std::string, - /*domain=*/std::string, - /*path=*/std::string>; - // Returns if the cookie should be included (and if not, why) for the given // request |url| using the CookieInclusionStatus enum. HTTP only cookies can // be filter by using appropriate cookie |options|. @@ -160,9 +129,12 @@ class NET_EXPORT CookieBase { // This corresponds to the "cookie's domain" as described in RFC 6265bis. std::string DomainWithoutDot() const; - StrictlyUniqueCookieKey StrictlyUniqueKey() const { - return std::make_tuple(partition_key_, name_, domain_, path_, - source_scheme_, source_port_); + // StrictlyUniqueKey always includes the cookie's source scheme and source + // port. + UniqueCookieKey StrictlyUniqueKey() const { + return UniqueCookieKey::Strict(base::PassKey(), partition_key_, + name_, domain_, path_, source_scheme_, + source_port_); } // Returns a key such that two cookies with the same UniqueKey() are @@ -173,14 +145,10 @@ class NET_EXPORT CookieBase { // associated features are enabled. UniqueCookieKey UniqueKey() const; - // Same as UniqueKey() except it does not contain a source_port field. For use - // with Domain cookies, which do not consider the source_port. - UniqueDomainCookieKey UniqueDomainKey() const; - // Same as UniqueKey() except it does not contain a source_port or // source_scheme field. For use for determining aliasing cookies, which do not // consider the source_port or source_scheme. - LegacyUniqueCookieKey LegacyUniqueKey() const; + UniqueCookieKey LegacyUniqueKey() const; void SetSourceScheme(CookieSourceScheme source_scheme) { source_scheme_ = source_scheme; diff --git a/naiveproxy/src/net/cookies/cookie_inclusion_status.cc b/naiveproxy/src/net/cookies/cookie_inclusion_status.cc index e146849c43..5f634d618a 100644 --- a/naiveproxy/src/net/cookies/cookie_inclusion_status.cc +++ b/naiveproxy/src/net/cookies/cookie_inclusion_status.cc @@ -4,35 +4,21 @@ #include "net/cookies/cookie_inclusion_status.h" +#include #include #include #include #include +#include "base/containers/enum_set.h" #include "base/notreached.h" -#include "base/ranges/algorithm.h" #include "base/strings/strcat.h" #include "url/gurl.h" namespace net { -namespace { -// Check that the given `reason` is valid, i.e., is within the range of values -// allowed by the `CookieInclusionStatus::WarningReason` enum. -bool IsWarningReasonOutOfBounds(CookieInclusionStatus::WarningReason reason) { - return reason < 0 || - reason >= CookieInclusionStatus::WarningReason::NUM_WARNING_REASONS; -} - -// Check that the given `reason` is valid, i.e., is within the range of values -// allowed by the `CookieInclusionStatus::ExclusionReason` enum. -bool IsExclusionReasonOutOfBounds( - CookieInclusionStatus::ExclusionReason reason) { - return reason < 0 || - reason >= - CookieInclusionStatus::ExclusionReason::NUM_EXCLUSION_REASONS; -} -} // namespace +using ExclusionReason = CookieInclusionStatus::ExclusionReason; +using WarningReason = CookieInclusionStatus::WarningReason; CookieInclusionStatus::CookieInclusionStatus() = default; @@ -49,30 +35,20 @@ bool CookieInclusionStatus::operator!=( const CookieInclusionStatus& other) const = default; bool CookieInclusionStatus::IsInclude() const { - return exclusion_reasons_.none(); + return exclusion_reasons_.empty(); } bool CookieInclusionStatus::HasExclusionReason(ExclusionReason reason) const { - if (IsExclusionReasonOutOfBounds(reason)) { - return false; - } - return exclusion_reasons_[reason]; + return exclusion_reasons_.Has(reason); } bool CookieInclusionStatus::HasOnlyExclusionReason( ExclusionReason reason) const { - if (IsExclusionReasonOutOfBounds(reason)) { - return false; - } - return exclusion_reasons_[reason] && exclusion_reasons_.count() == 1; + return exclusion_reasons_.Has(reason) && exclusion_reasons_.size() == 1; } void CookieInclusionStatus::AddExclusionReason(ExclusionReason reason) { - if (IsExclusionReasonOutOfBounds(reason)) { - return; - } - - exclusion_reasons_[reason] = true; + exclusion_reasons_.Put(reason); // If the cookie would be excluded for reasons other than the new SameSite // rules, don't bother warning about it. MaybeClearSameSiteWarning(); @@ -84,14 +60,11 @@ void CookieInclusionStatus::AddExclusionReason(ExclusionReason reason) { } void CookieInclusionStatus::RemoveExclusionReason(ExclusionReason reason) { - if (IsExclusionReasonOutOfBounds(reason)) { - return; - } - exclusion_reasons_[reason] = false; + exclusion_reasons_.Remove(reason); } void CookieInclusionStatus::RemoveExclusionReasons( - const std::vector& reasons) { + ExclusionReasonBitset reasons) { exclusion_reasons_ = ExclusionReasonsWithout(reasons); } @@ -103,79 +76,86 @@ void CookieInclusionStatus::MaybeSetExemptionReason(ExemptionReason reason) { CookieInclusionStatus::ExclusionReasonBitset CookieInclusionStatus::ExclusionReasonsWithout( - const std::vector& reasons) const { + ExclusionReasonBitset reasons) const { CookieInclusionStatus::ExclusionReasonBitset result(exclusion_reasons_); - for (const ExclusionReason reason : reasons) { - if (!IsExclusionReasonOutOfBounds(reason)) { - result[reason] = false; - } - } + result.RemoveAll(reasons); return result; } void CookieInclusionStatus::MaybeClearSameSiteWarning() { - if (ExclusionReasonsWithout({ - EXCLUDE_SAMESITE_UNSPECIFIED_TREATED_AS_LAX, - EXCLUDE_SAMESITE_NONE_INSECURE, - }) != 0u) { - RemoveWarningReason(WARN_SAMESITE_UNSPECIFIED_CROSS_SITE_CONTEXT); - RemoveWarningReason(WARN_SAMESITE_NONE_INSECURE); - RemoveWarningReason(WARN_SAMESITE_UNSPECIFIED_LAX_ALLOW_UNSAFE); + if (!ExclusionReasonsWithout( + { + ExclusionReason::EXCLUDE_SAMESITE_UNSPECIFIED_TREATED_AS_LAX, + ExclusionReason::EXCLUDE_SAMESITE_NONE_INSECURE, + }) + .empty()) { + RemoveWarningReason( + WarningReason::WARN_SAMESITE_UNSPECIFIED_CROSS_SITE_CONTEXT); + RemoveWarningReason(WarningReason::WARN_SAMESITE_NONE_INSECURE); + RemoveWarningReason( + WarningReason::WARN_SAMESITE_UNSPECIFIED_LAX_ALLOW_UNSAFE); } if (!ShouldRecordDowngradeMetrics()) { - RemoveWarningReason(WARN_STRICT_LAX_DOWNGRADE_STRICT_SAMESITE); - RemoveWarningReason(WARN_STRICT_CROSS_DOWNGRADE_STRICT_SAMESITE); - RemoveWarningReason(WARN_STRICT_CROSS_DOWNGRADE_LAX_SAMESITE); - RemoveWarningReason(WARN_LAX_CROSS_DOWNGRADE_STRICT_SAMESITE); - RemoveWarningReason(WARN_LAX_CROSS_DOWNGRADE_LAX_SAMESITE); + RemoveWarningReason( + WarningReason::WARN_STRICT_LAX_DOWNGRADE_STRICT_SAMESITE); + RemoveWarningReason( + WarningReason::WARN_STRICT_CROSS_DOWNGRADE_STRICT_SAMESITE); + RemoveWarningReason( + WarningReason::WARN_STRICT_CROSS_DOWNGRADE_LAX_SAMESITE); + RemoveWarningReason( + WarningReason::WARN_LAX_CROSS_DOWNGRADE_STRICT_SAMESITE); + RemoveWarningReason(WarningReason::WARN_LAX_CROSS_DOWNGRADE_LAX_SAMESITE); - RemoveWarningReason(WARN_CROSS_SITE_REDIRECT_DOWNGRADE_CHANGES_INCLUSION); + RemoveWarningReason( + WarningReason::WARN_CROSS_SITE_REDIRECT_DOWNGRADE_CHANGES_INCLUSION); } } void CookieInclusionStatus::MaybeClearThirdPartyPhaseoutReason() { if (!IsInclude()) { - RemoveWarningReason(WARN_THIRD_PARTY_PHASEOUT); + RemoveWarningReason(WarningReason::WARN_THIRD_PARTY_PHASEOUT); } - if (ExclusionReasonsWithout( - {EXCLUDE_THIRD_PARTY_PHASEOUT, - EXCLUDE_THIRD_PARTY_BLOCKED_WITHIN_FIRST_PARTY_SET}) != 0u) { - RemoveExclusionReason(EXCLUDE_THIRD_PARTY_PHASEOUT); - RemoveExclusionReason(EXCLUDE_THIRD_PARTY_BLOCKED_WITHIN_FIRST_PARTY_SET); + if (!ExclusionReasonsWithout( + {ExclusionReason::EXCLUDE_THIRD_PARTY_PHASEOUT, + ExclusionReason:: + EXCLUDE_THIRD_PARTY_BLOCKED_WITHIN_FIRST_PARTY_SET}) + .empty()) { + RemoveExclusionReasons( + {ExclusionReason::EXCLUDE_THIRD_PARTY_PHASEOUT, + ExclusionReason::EXCLUDE_THIRD_PARTY_BLOCKED_WITHIN_FIRST_PARTY_SET}); } } bool CookieInclusionStatus::ShouldRecordDowngradeMetrics() const { - return ExclusionReasonsWithout({ - EXCLUDE_SAMESITE_STRICT, - EXCLUDE_SAMESITE_LAX, - EXCLUDE_SAMESITE_UNSPECIFIED_TREATED_AS_LAX, - }) == 0u; + return ExclusionReasonsWithout( + { + ExclusionReason::EXCLUDE_SAMESITE_STRICT, + ExclusionReason::EXCLUDE_SAMESITE_LAX, + ExclusionReason::EXCLUDE_SAMESITE_UNSPECIFIED_TREATED_AS_LAX, + }) + .empty(); } bool CookieInclusionStatus::ShouldWarn() const { - return warning_reasons_.any(); + return !warning_reasons_.empty(); } bool CookieInclusionStatus::HasWarningReason(WarningReason reason) const { - if (IsWarningReasonOutOfBounds(reason)) { - return false; - } - return warning_reasons_[reason]; + return warning_reasons_.Has(reason); } bool CookieInclusionStatus::HasSchemefulDowngradeWarning( - CookieInclusionStatus::WarningReason* reason) const { + WarningReason* reason) const { if (!ShouldWarn()) return false; - const CookieInclusionStatus::WarningReason kDowngradeWarnings[] = { - WARN_STRICT_LAX_DOWNGRADE_STRICT_SAMESITE, - WARN_STRICT_CROSS_DOWNGRADE_STRICT_SAMESITE, - WARN_STRICT_CROSS_DOWNGRADE_LAX_SAMESITE, - WARN_LAX_CROSS_DOWNGRADE_STRICT_SAMESITE, - WARN_LAX_CROSS_DOWNGRADE_LAX_SAMESITE, + const WarningReason kDowngradeWarnings[] = { + WarningReason::WARN_STRICT_LAX_DOWNGRADE_STRICT_SAMESITE, + WarningReason::WARN_STRICT_CROSS_DOWNGRADE_STRICT_SAMESITE, + WarningReason::WARN_STRICT_CROSS_DOWNGRADE_LAX_SAMESITE, + WarningReason::WARN_LAX_CROSS_DOWNGRADE_STRICT_SAMESITE, + WarningReason::WARN_LAX_CROSS_DOWNGRADE_LAX_SAMESITE, }; for (auto warning : kDowngradeWarnings) { @@ -192,17 +172,11 @@ bool CookieInclusionStatus::HasSchemefulDowngradeWarning( } void CookieInclusionStatus::AddWarningReason(WarningReason reason) { - if (IsWarningReasonOutOfBounds(reason)) { - return; - } - warning_reasons_[reason] = true; + warning_reasons_.Put(reason); } void CookieInclusionStatus::RemoveWarningReason(WarningReason reason) { - if (IsWarningReasonOutOfBounds(reason)) { - return; - } - warning_reasons_[reason] = false; + warning_reasons_.Remove(reason); } CookieInclusionStatus::ContextDowngradeMetricValues @@ -211,7 +185,7 @@ CookieInclusionStatus::GetBreakingDowngradeMetricsEnumValue( bool url_is_secure = url.SchemeIsCryptographic(); // Start the |reason| as something other than the downgrade warnings. - WarningReason reason = WarningReason::NUM_WARNING_REASONS; + WarningReason reason = WarningReason::MAX_WARNING_REASON; // Don't bother checking the return value because the default switch case // will handle if no reason was found. @@ -250,44 +224,49 @@ std::string CookieInclusionStatus::GetDebugString() const { base::StrAppend(&out, {"INCLUDE, "}); constexpr std::pair exclusion_reasons[] = { - {EXCLUDE_UNKNOWN_ERROR, "EXCLUDE_UNKNOWN_ERROR"}, - {EXCLUDE_HTTP_ONLY, "EXCLUDE_HTTP_ONLY"}, - {EXCLUDE_SECURE_ONLY, "EXCLUDE_SECURE_ONLY"}, - {EXCLUDE_DOMAIN_MISMATCH, "EXCLUDE_DOMAIN_MISMATCH"}, - {EXCLUDE_NOT_ON_PATH, "EXCLUDE_NOT_ON_PATH"}, - {EXCLUDE_SAMESITE_STRICT, "EXCLUDE_SAMESITE_STRICT"}, - {EXCLUDE_SAMESITE_LAX, "EXCLUDE_SAMESITE_LAX"}, - {EXCLUDE_SAMESITE_UNSPECIFIED_TREATED_AS_LAX, + {ExclusionReason::EXCLUDE_UNKNOWN_ERROR, "EXCLUDE_UNKNOWN_ERROR"}, + {ExclusionReason::EXCLUDE_HTTP_ONLY, "EXCLUDE_HTTP_ONLY"}, + {ExclusionReason::EXCLUDE_SECURE_ONLY, "EXCLUDE_SECURE_ONLY"}, + {ExclusionReason::EXCLUDE_DOMAIN_MISMATCH, "EXCLUDE_DOMAIN_MISMATCH"}, + {ExclusionReason::EXCLUDE_NOT_ON_PATH, "EXCLUDE_NOT_ON_PATH"}, + {ExclusionReason::EXCLUDE_SAMESITE_STRICT, "EXCLUDE_SAMESITE_STRICT"}, + {ExclusionReason::EXCLUDE_SAMESITE_LAX, "EXCLUDE_SAMESITE_LAX"}, + {ExclusionReason::EXCLUDE_SAMESITE_UNSPECIFIED_TREATED_AS_LAX, "EXCLUDE_SAMESITE_UNSPECIFIED_TREATED_AS_LAX"}, - {EXCLUDE_SAMESITE_NONE_INSECURE, "EXCLUDE_SAMESITE_NONE_INSECURE"}, - {EXCLUDE_USER_PREFERENCES, "EXCLUDE_USER_PREFERENCES"}, - {EXCLUDE_FAILURE_TO_STORE, "EXCLUDE_FAILURE_TO_STORE"}, - {EXCLUDE_NONCOOKIEABLE_SCHEME, "EXCLUDE_NONCOOKIEABLE_SCHEME"}, - {EXCLUDE_OVERWRITE_SECURE, "EXCLUDE_OVERWRITE_SECURE"}, - {EXCLUDE_OVERWRITE_HTTP_ONLY, "EXCLUDE_OVERWRITE_HTTP_ONLY"}, - {EXCLUDE_INVALID_DOMAIN, "EXCLUDE_INVALID_DOMAIN"}, - {EXCLUDE_INVALID_PREFIX, "EXCLUDE_INVALID_PREFIX"}, - {EXCLUDE_INVALID_PARTITIONED, "EXCLUDE_INVALID_PARTITIONED"}, - {EXCLUDE_NAME_VALUE_PAIR_EXCEEDS_MAX_SIZE, + {ExclusionReason::EXCLUDE_SAMESITE_NONE_INSECURE, + "EXCLUDE_SAMESITE_NONE_INSECURE"}, + {ExclusionReason::EXCLUDE_USER_PREFERENCES, "EXCLUDE_USER_PREFERENCES"}, + {ExclusionReason::EXCLUDE_FAILURE_TO_STORE, "EXCLUDE_FAILURE_TO_STORE"}, + {ExclusionReason::EXCLUDE_NONCOOKIEABLE_SCHEME, + "EXCLUDE_NONCOOKIEABLE_SCHEME"}, + {ExclusionReason::EXCLUDE_OVERWRITE_SECURE, "EXCLUDE_OVERWRITE_SECURE"}, + {ExclusionReason::EXCLUDE_OVERWRITE_HTTP_ONLY, + "EXCLUDE_OVERWRITE_HTTP_ONLY"}, + {ExclusionReason::EXCLUDE_INVALID_DOMAIN, "EXCLUDE_INVALID_DOMAIN"}, + {ExclusionReason::EXCLUDE_INVALID_PREFIX, "EXCLUDE_INVALID_PREFIX"}, + {ExclusionReason::EXCLUDE_INVALID_PARTITIONED, + "EXCLUDE_INVALID_PARTITIONED"}, + {ExclusionReason::EXCLUDE_NAME_VALUE_PAIR_EXCEEDS_MAX_SIZE, "EXCLUDE_NAME_VALUE_PAIR_EXCEEDS_MAX_SIZE"}, - {EXCLUDE_ATTRIBUTE_VALUE_EXCEEDS_MAX_SIZE, + {ExclusionReason::EXCLUDE_ATTRIBUTE_VALUE_EXCEEDS_MAX_SIZE, "EXCLUDE_ATTRIBUTE_VALUE_EXCEEDS_MAX_SIZE"}, - {EXCLUDE_DOMAIN_NON_ASCII, "EXCLUDE_DOMAIN_NON_ASCII"}, - {EXCLUDE_THIRD_PARTY_BLOCKED_WITHIN_FIRST_PARTY_SET, + {ExclusionReason::EXCLUDE_DOMAIN_NON_ASCII, "EXCLUDE_DOMAIN_NON_ASCII"}, + {ExclusionReason::EXCLUDE_THIRD_PARTY_BLOCKED_WITHIN_FIRST_PARTY_SET, "EXCLUDE_THIRD_PARTY_BLOCKED_WITHIN_FIRST_PARTY_SET"}, - {EXCLUDE_PORT_MISMATCH, "EXCLUDE_PORT_MISMATCH"}, - {EXCLUDE_SCHEME_MISMATCH, "EXCLUDE_SCHEME_MISMATCH"}, - {EXCLUDE_SHADOWING_DOMAIN, "EXCLUDE_SHADOWING_DOMAIN"}, - {EXCLUDE_DISALLOWED_CHARACTER, "EXCLUDE_DISALLOWED_CHARACTER"}, - {EXCLUDE_THIRD_PARTY_PHASEOUT, "EXCLUDE_THIRD_PARTY_PHASEOUT"}, - {EXCLUDE_NO_COOKIE_CONTENT, "EXCLUDE_NO_COOKIE_CONTENT"}, - {EXCLUDE_ALIASING, "EXCLUDE_ALIASING"}, + {ExclusionReason::EXCLUDE_PORT_MISMATCH, "EXCLUDE_PORT_MISMATCH"}, + {ExclusionReason::EXCLUDE_SCHEME_MISMATCH, "EXCLUDE_SCHEME_MISMATCH"}, + {ExclusionReason::EXCLUDE_SHADOWING_DOMAIN, "EXCLUDE_SHADOWING_DOMAIN"}, + {ExclusionReason::EXCLUDE_DISALLOWED_CHARACTER, + "EXCLUDE_DISALLOWED_CHARACTER"}, + {ExclusionReason::EXCLUDE_THIRD_PARTY_PHASEOUT, + "EXCLUDE_THIRD_PARTY_PHASEOUT"}, + {ExclusionReason::EXCLUDE_NO_COOKIE_CONTENT, "EXCLUDE_NO_COOKIE_CONTENT"}, }; static_assert( - std::size(exclusion_reasons) == ExclusionReason::NUM_EXCLUSION_REASONS, + std::size(exclusion_reasons) == ExclusionReasonBitset::kValueCount, "Please ensure all ExclusionReason variants are enumerated in " "GetDebugString"); - static_assert(base::ranges::is_sorted(exclusion_reasons), + static_assert(std::ranges::is_sorted(exclusion_reasons), "Please keep the ExclusionReason variants sorted in numerical " "order in GetDebugString"); @@ -302,40 +281,40 @@ std::string CookieInclusionStatus::GetDebugString() const { } constexpr std::pair warning_reasons[] = { - {WARN_SAMESITE_UNSPECIFIED_CROSS_SITE_CONTEXT, + {WarningReason::WARN_SAMESITE_UNSPECIFIED_CROSS_SITE_CONTEXT, "WARN_SAMESITE_UNSPECIFIED_CROSS_SITE_CONTEXT"}, - {WARN_SAMESITE_NONE_INSECURE, "WARN_SAMESITE_NONE_INSECURE"}, - {WARN_SAMESITE_UNSPECIFIED_LAX_ALLOW_UNSAFE, + {WarningReason::WARN_SAMESITE_NONE_INSECURE, + "WARN_SAMESITE_NONE_INSECURE"}, + {WarningReason::WARN_SAMESITE_UNSPECIFIED_LAX_ALLOW_UNSAFE, "WARN_SAMESITE_UNSPECIFIED_LAX_ALLOW_UNSAFE"}, - {WARN_STRICT_LAX_DOWNGRADE_STRICT_SAMESITE, + {WarningReason::WARN_STRICT_LAX_DOWNGRADE_STRICT_SAMESITE, "WARN_STRICT_LAX_DOWNGRADE_STRICT_SAMESITE"}, - {WARN_STRICT_CROSS_DOWNGRADE_STRICT_SAMESITE, + {WarningReason::WARN_STRICT_CROSS_DOWNGRADE_STRICT_SAMESITE, "WARN_STRICT_CROSS_DOWNGRADE_STRICT_SAMESITE"}, - {WARN_STRICT_CROSS_DOWNGRADE_LAX_SAMESITE, + {WarningReason::WARN_STRICT_CROSS_DOWNGRADE_LAX_SAMESITE, "WARN_STRICT_CROSS_DOWNGRADE_LAX_SAMESITE"}, - {WARN_LAX_CROSS_DOWNGRADE_STRICT_SAMESITE, + {WarningReason::WARN_LAX_CROSS_DOWNGRADE_STRICT_SAMESITE, "WARN_LAX_CROSS_DOWNGRADE_STRICT_SAMESITE"}, - {WARN_LAX_CROSS_DOWNGRADE_LAX_SAMESITE, + {WarningReason::WARN_LAX_CROSS_DOWNGRADE_LAX_SAMESITE, "WARN_LAX_CROSS_DOWNGRADE_LAX_SAMESITE"}, - {WARN_SECURE_ACCESS_GRANTED_NON_CRYPTOGRAPHIC, + {WarningReason::WARN_SECURE_ACCESS_GRANTED_NON_CRYPTOGRAPHIC, "WARN_SECURE_ACCESS_GRANTED_NON_CRYPTOGRAPHIC"}, - {WARN_CROSS_SITE_REDIRECT_DOWNGRADE_CHANGES_INCLUSION, + {WarningReason::WARN_CROSS_SITE_REDIRECT_DOWNGRADE_CHANGES_INCLUSION, "WARN_CROSS_SITE_REDIRECT_DOWNGRADE_CHANGES_INCLUSION"}, - {WARN_ATTRIBUTE_VALUE_EXCEEDS_MAX_SIZE, + {WarningReason::WARN_ATTRIBUTE_VALUE_EXCEEDS_MAX_SIZE, "WARN_ATTRIBUTE_VALUE_EXCEEDS_MAX_SIZE"}, - {WARN_DOMAIN_NON_ASCII, "WARN_DOMAIN_NON_ASCII"}, - {WARN_PORT_MISMATCH, "WARN_PORT_MISMATCH"}, - {WARN_SCHEME_MISMATCH, "WARN_SCHEME_MISMATCH"}, - {WARN_TENTATIVELY_ALLOWING_SECURE_SOURCE_SCHEME, + {WarningReason::WARN_DOMAIN_NON_ASCII, "WARN_DOMAIN_NON_ASCII"}, + {WarningReason::WARN_PORT_MISMATCH, "WARN_PORT_MISMATCH"}, + {WarningReason::WARN_SCHEME_MISMATCH, "WARN_SCHEME_MISMATCH"}, + {WarningReason::WARN_TENTATIVELY_ALLOWING_SECURE_SOURCE_SCHEME, "WARN_TENTATIVELY_ALLOWING_SECURE_SOURCE_SCHEME"}, - {WARN_SHADOWING_DOMAIN, "WARN_SHADOWING_DOMAIN"}, - {WARN_THIRD_PARTY_PHASEOUT, "WARN_THIRD_PARTY_PHASEOUT"}, + {WarningReason::WARN_SHADOWING_DOMAIN, "WARN_SHADOWING_DOMAIN"}, + {WarningReason::WARN_THIRD_PARTY_PHASEOUT, "WARN_THIRD_PARTY_PHASEOUT"}, }; - static_assert( - std::size(warning_reasons) == WarningReason::NUM_WARNING_REASONS, - "Please ensure all WarningReason variants are enumerated in " - "GetDebugString"); - static_assert(base::ranges::is_sorted(warning_reasons), + static_assert(std::size(warning_reasons) == WarningReasonBitset::kValueCount, + "Please ensure all WarningReason variants are enumerated in " + "GetDebugString"); + static_assert(std::ranges::is_sorted(warning_reasons), "Please keep the WarningReason variants sorted in numerical " "order in GetDebugString"); @@ -379,41 +358,32 @@ std::string CookieInclusionStatus::GetDebugString() const { case ExemptionReason::kScheme: reason = "ExemptionScheme"; break; + case ExemptionReason::kSameSiteNoneCookiesInSandbox: + reason = "ExemptionSameSiteNoneCookiesInSandbox"; + break; case ExemptionReason::kNone: NOTREACHED(); - }; + } base::StrAppend(&out, {reason}); return out; } bool CookieInclusionStatus::HasExactlyExclusionReasonsForTesting( - const std::vector& reasons) const { + ExclusionReasonBitset reasons) const { CookieInclusionStatus expected = MakeFromReasonsForTesting(reasons); return expected.exclusion_reasons_ == exclusion_reasons_; } bool CookieInclusionStatus::HasExactlyWarningReasonsForTesting( - const std::vector& reasons) const { + WarningReasonBitset reasons) const { CookieInclusionStatus expected = MakeFromReasonsForTesting({}, reasons); return expected.warning_reasons_ == warning_reasons_; } -// static -bool CookieInclusionStatus::ValidateExclusionAndWarningFromWire( - uint32_t exclusion_reasons, - uint32_t warning_reasons) { - uint32_t exclusion_mask = - static_cast(~0ul << ExclusionReason::NUM_EXCLUSION_REASONS); - uint32_t warning_mask = - static_cast(~0ul << WarningReason::NUM_WARNING_REASONS); - return (exclusion_reasons & exclusion_mask) == 0 && - (warning_reasons & warning_mask) == 0; -} - CookieInclusionStatus CookieInclusionStatus::MakeFromReasonsForTesting( - const std::vector& exclusions, - const std::vector& warnings, + ExclusionReasonBitset exclusions, + WarningReasonBitset warnings, ExemptionReason exemption) { CookieInclusionStatus status; for (ExclusionReason reason : exclusions) { @@ -426,30 +396,51 @@ CookieInclusionStatus CookieInclusionStatus::MakeFromReasonsForTesting( for (auto reason : exclusions) { CHECK(status.HasExclusionReason(reason)) - << "Exemption " << reason << " could not be applied"; + << "Exemption " << static_cast(reason) << " could not be applied"; } - CHECK_EQ(status.exclusion_reasons_.count(), exclusions.size()); + CHECK_EQ(status.exclusion_reasons_.size(), exclusions.size()); for (auto reason : warnings) { CHECK(status.HasWarningReason(reason)) - << "Warning " << reason << " could not be applied"; + << "Warning " << static_cast(reason) << " could not be applied"; } - CHECK_EQ(status.warning_reasons_.count(), warnings.size()); + CHECK_EQ(status.warning_reasons_.size(), warnings.size()); CHECK_EQ(status.exemption_reason(), exemption) << "Exemption " << static_cast(exemption) << " could not be applied"; return status; } +std::optional CookieInclusionStatus::MakeFromComponents( + ExclusionReasonBitset exclusions, + WarningReasonBitset warnings, + ExemptionReason exemption) { + CookieInclusionStatus status; + for (ExclusionReason reason : exclusions) { + status.AddExclusionReason(reason); + } + for (WarningReason warning : warnings) { + status.AddWarningReason(warning); + } + status.MaybeSetExemptionReason(exemption); + + if (status.exclusion_reasons() != exclusions || + status.warning_reasons() != warnings || + status.exemption_reason() != exemption) { + return std::nullopt; + } + return status; +} + bool CookieInclusionStatus::ExcludedByUserPreferencesOrTPCD() const { if (HasOnlyExclusionReason(ExclusionReason::EXCLUDE_USER_PREFERENCES) || HasOnlyExclusionReason(ExclusionReason::EXCLUDE_THIRD_PARTY_PHASEOUT)) { return true; } - return exclusion_reasons_.count() == 2 && - exclusion_reasons_[ExclusionReason::EXCLUDE_THIRD_PARTY_PHASEOUT] && - exclusion_reasons_ - [ExclusionReason:: - EXCLUDE_THIRD_PARTY_BLOCKED_WITHIN_FIRST_PARTY_SET]; + return exclusion_reasons_ == + ExclusionReasonBitset( + {ExclusionReason::EXCLUDE_THIRD_PARTY_PHASEOUT, + ExclusionReason:: + EXCLUDE_THIRD_PARTY_BLOCKED_WITHIN_FIRST_PARTY_SET}); } } // namespace net diff --git a/naiveproxy/src/net/cookies/cookie_inclusion_status.h b/naiveproxy/src/net/cookies/cookie_inclusion_status.h index 9309e8e59a..0077cd44c2 100644 --- a/naiveproxy/src/net/cookies/cookie_inclusion_status.h +++ b/naiveproxy/src/net/cookies/cookie_inclusion_status.h @@ -11,8 +11,8 @@ #include #include #include -#include +#include "base/containers/enum_set.h" #include "net/base/net_export.h" class GURL; @@ -20,7 +20,7 @@ class GURL; namespace net { // This class represents if a cookie was included or excluded in a cookie get or -// set operation, and if excluded why. It holds a vector of reasons for +// set operation, and if excluded why. It holds a set of reasons for // exclusion, where cookie inclusion is represented by the absence of any // exclusion reasons. Also marks whether a cookie should be warned about, e.g. // for deprecation or intervention reasons. @@ -28,7 +28,7 @@ namespace net { class NET_EXPORT CookieInclusionStatus { public: // Types of reasons why a cookie might be excluded. - enum ExclusionReason { + enum class ExclusionReason { EXCLUDE_UNKNOWN_ERROR = 0, // Statuses applied when accessing a cookie (either sending or setting): @@ -108,26 +108,14 @@ class NET_EXPORT CookieInclusionStatus { EXCLUDE_THIRD_PARTY_PHASEOUT = 25, // Cookie contains no content or only whitespace. EXCLUDE_NO_COOKIE_CONTENT = 26, - // Cookie aliases that of another with a different source_port or - // source_scheme. I.e.: Two or more cookies share the same name but have - // different ports/schemes.. - EXCLUDE_ALIASING = 27, - // This should be kept last. - NUM_EXCLUSION_REASONS + MAX_EXCLUSION_REASON = EXCLUDE_NO_COOKIE_CONTENT }; - // Mojom and some tests assume that all the exclusion reasons will fit within - // a uint32_t. Once that's not longer true those assumptions need to be - // updated (along with this assert). - static_assert(ExclusionReason::NUM_EXCLUSION_REASONS <= 32, - "Expanding ExclusionReasons past 32 reasons requires updating " - "usage assumptions."); - // Reason to warn about a cookie. Any information contained in // WarningReason of an included cookie may be passed to an untrusted // renderer. - enum WarningReason { + enum class WarningReason { // Of the following 3 SameSite warnings, there will be, at most, a single // active one. @@ -232,16 +220,9 @@ class NET_EXPORT CookieInclusionStatus { WARN_THIRD_PARTY_PHASEOUT = 16, // This should be kept last. - NUM_WARNING_REASONS + MAX_WARNING_REASON = WARN_THIRD_PARTY_PHASEOUT }; - // Mojom and some tests assume that all the warning reasons will fit within - // a uint32_t. Once that's not longer true those assumptions need to be - // updated (along with this assert). - static_assert(WarningReason::NUM_WARNING_REASONS <= 32, - "Expanding WarningReasons past 32 reasons requires updating " - "usage assumptions."); - // These enums encode the context downgrade warnings + the secureness of the // url sending/setting the cookie. They're used for metrics only. The format // is k{context}{schemeful_context}{samesite_value}{securness}. @@ -291,14 +272,33 @@ class NET_EXPORT CookieInclusionStatus { kTopLevelStorageAccess = 8, // Allowed by the scheme. kScheme = 9, + // Allowed by the sandbox 'allow-same-site-none-cookies' value. + kSameSiteNoneCookiesInSandbox = 10, // Keep last. - kMaxValue = kScheme + kMaxValue = kSameSiteNoneCookiesInSandbox }; using ExclusionReasonBitset = - std::bitset; - using WarningReasonBitset = std::bitset; + base::EnumSet; + // Mojom and some tests assume that all the exclusion reasons will fit within + // a uint64_t. Once that's not longer true those assumptions need to be + // updated (along with this assert). + static_assert(ExclusionReasonBitset::kValueCount <= 64, + "Expanding ExclusionReasons past 64 reasons requires updating " + "usage assumptions."); + using WarningReasonBitset = + base::EnumSet; + // Mojom and some tests assume that all the warning reasons will fit within + // a uint64_t. Once that's not longer true those assumptions need to be + // updated (along with this assert). + static_assert(WarningReasonBitset::kValueCount <= 64, + "Expanding WarningReasons past 64 reasons requires updating " + "usage assumptions."); // Makes a status that says include and should not warn. CookieInclusionStatus(); @@ -321,14 +321,14 @@ class NET_EXPORT CookieInclusionStatus { // for exclusion. bool HasOnlyExclusionReason(ExclusionReason status_type) const; - // Add an exclusion reason. + // Add an exclusion reason. CHECKs if `status_type` is out of range. void AddExclusionReason(ExclusionReason status_type); - // Remove an exclusion reason. + // Remove an exclusion reason. CHECKs if `reason` is out of range. void RemoveExclusionReason(ExclusionReason reason); // Remove multiple exclusion reasons. - void RemoveExclusionReasons(const std::vector& reasons); + void RemoveExclusionReasons(ExclusionReasonBitset reasons); // Only updates exemption reason if the cookie was not already excluded and // doesn't already have an exemption reason. @@ -360,10 +360,10 @@ class NET_EXPORT CookieInclusionStatus { bool HasSchemefulDowngradeWarning( CookieInclusionStatus::WarningReason* reason = nullptr) const; - // Add an warning reason. + // Add an warning reason. CHECKs if `reason` is out of range. void AddWarningReason(WarningReason reason); - // Remove an warning reason. + // Remove an warning reason. CHECKs if `reason` is out of range. void RemoveWarningReason(WarningReason reason); // Used for serialization/deserialization. @@ -378,53 +378,50 @@ class NET_EXPORT CookieInclusionStatus { std::string GetDebugString() const; // Checks whether the exclusion reasons are exactly the set of exclusion - // reasons in the vector. (Ignores warnings.) + // reasons in the set. (Ignores warnings.) bool HasExactlyExclusionReasonsForTesting( - const std::vector& reasons) const; + ExclusionReasonBitset reasons) const; // Checks whether the warning reasons are exactly the set of warning - // reasons in the vector. (Ignores exclusions.) - bool HasExactlyWarningReasonsForTesting( - const std::vector& reasons) const; - - // Validates mojo data, since mojo does not support bitsets. ExemptionReason - // is omitted intendedly. - // TODO(crbug.com/40219875): Improve serialization validation comments - // and check for mutually exclusive values. - static bool ValidateExclusionAndWarningFromWire(uint32_t exclusion_reasons, - uint32_t warning_reasons); + // reasons in the set. (Ignores exclusions.) + bool HasExactlyWarningReasonsForTesting(WarningReasonBitset reasons) const; // Makes a status that contains the given reasons. If the given reasons are // self-inconsistent, CHECKs. static CookieInclusionStatus MakeFromReasonsForTesting( - const std::vector& exclusions, - const std::vector& warnings = std::vector(), + ExclusionReasonBitset exclusions, + WarningReasonBitset warnings = WarningReasonBitset(), ExemptionReason exemption = ExemptionReason::kNone); + static std::optional MakeFromComponents( + ExclusionReasonBitset exclusions, + WarningReasonBitset warnings, + ExemptionReason exemption); + // Returns true if the cookie was excluded because of user preferences or // 3PCD. bool ExcludedByUserPreferencesOrTPCD() const; void ResetForTesting() { - exclusion_reasons_.reset(); - warning_reasons_.reset(); + exclusion_reasons_.Clear(); + warning_reasons_.Clear(); exemption_reason_ = ExemptionReason::kNone; } private: // Returns the `exclusion_reasons_` with the given `reasons` unset. ExclusionReasonBitset ExclusionReasonsWithout( - const std::vector& reasons) const; + ExclusionReasonBitset reasons) const; // If the cookie would have been excluded by reasons that are not // Third-party cookie phaseout related, clear the Third-party cookie phaseout // warning/exclusion reason in this case. void MaybeClearThirdPartyPhaseoutReason(); - // A bit vector of the applicable exclusion reasons. + // A bitset of the applicable exclusion reasons. ExclusionReasonBitset exclusion_reasons_; - // A bit vector of the applicable warning reasons. + // A bitset of the applicable warning reasons. WarningReasonBitset warning_reasons_; // A cookie can only have at most one exemption reason. diff --git a/naiveproxy/src/net/cookies/cookie_monster.cc b/naiveproxy/src/net/cookies/cookie_monster.cc index 7f03ff6409..1dfbe67a3e 100644 --- a/naiveproxy/src/net/cookies/cookie_monster.cc +++ b/naiveproxy/src/net/cookies/cookie_monster.cc @@ -44,14 +44,17 @@ #include "net/cookies/cookie_monster.h" +#include #include #include +#include #include #include #include #include #include #include +#include #include "base/check_is_test.h" #include "base/compiler_specific.h" @@ -64,18 +67,20 @@ #include "base/metrics/field_trial.h" #include "base/metrics/histogram_functions.h" #include "base/metrics/histogram_macros.h" -#include "base/ranges/algorithm.h" +#include "base/rand_util.h" #include "base/strings/strcat.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "base/task/single_thread_task_runner.h" #include "base/threading/thread_checker.h" #include "base/time/time.h" +#include "base/timer/elapsed_timer.h" #include "net/base/isolation_info.h" #include "net/base/registry_controlled_domains/registry_controlled_domain.h" #include "net/base/schemeful_site.h" #include "net/base/url_util.h" #include "net/cookies/canonical_cookie.h" +#include "net/cookies/cookie_base.h" #include "net/cookies/cookie_constants.h" #include "net/cookies/cookie_monster_change_dispatcher.h" #include "net/cookies/cookie_monster_netlog_params.h" @@ -235,7 +240,7 @@ const int CookieMonster::kSafeFromGlobalPurgeDays = 30; namespace { bool ContainsControlCharacter(const std::string& s) { - return base::ranges::any_of(s, &HttpUtil::IsControlChar); + return std::ranges::any_of(s, &HttpUtil::IsControlChar); } typedef std::vector CanonicalCookieVector; @@ -413,6 +418,25 @@ size_t CountCookiesAndGenerateListsForPossibleDeletion( return total_cookies_at_priority; } +// Fills in the host & domain lists for `could_be_deleted` with every cookie +// in `cookies`. +DeletionCookieLists +CountCookiesAndGenerateListsForPossibleDeletionPartitionedCookies( + const CookieMonster::CookieItList& cookies) { + DeletionCookieLists could_be_deleted; + for (auto list_it = cookies.begin(); list_it != cookies.end(); list_it++) { + const auto cookiemap_it = *list_it; + const auto& cookie = cookiemap_it->second; + + if (cookie->IsHostCookie()) { + could_be_deleted.host_cookies.push_back(list_it); + } else { // Is a domain cookie. + could_be_deleted.domain_cookies.push_back(list_it); + } + } + return could_be_deleted; +} + // Records minutes until the expiration date of a cookie to the appropriate // histogram. Only histograms cookies that have an expiration date (i.e. are // persistent). @@ -449,16 +473,20 @@ void HistogramExpirationDuration(const CanonicalCookie& cookie, } // namespace CookieMonster::CookieMonster(scoped_refptr store, - NetLog* net_log) + NetLog* net_log, + std::unique_ptr pref_delegate) : CookieMonster(std::move(store), base::Seconds(kDefaultAccessUpdateThresholdSeconds), - net_log) {} + net_log, + std::move(pref_delegate)) {} CookieMonster::CookieMonster(scoped_refptr store, base::TimeDelta last_access_threshold, - NetLog* net_log) + NetLog* net_log, + std::unique_ptr pref_delegate) : change_dispatcher_(this), net_log_(NetLogWithSource::Make(net_log, NetLogSourceType::COOKIE_STORE)), + pref_delegate_(std::move(pref_delegate)), store_(std::move(store)), last_access_threshold_(last_access_threshold), last_statistic_record_time_(base::Time::Now()) { @@ -722,6 +750,11 @@ void CookieMonster::GetCookieListWithOptions( GetCookieListCallback callback) { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + std::optional timer; + if (metrics_subsampler_.ShouldSample(0.001)) { + timer.emplace(); + } + CookieAccessResultList included_cookies; CookieAccessResultList excluded_cookies; if (HasCookieableScheme(url)) { @@ -767,6 +800,12 @@ void CookieMonster::GetCookieListWithOptions( MaybeRunCookieCallback(std::move(callback), included_cookies, excluded_cookies); + + if (timer) { + UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES( + "Cookie.GetCookieListWithOptions.Duration", timer->Elapsed(), + base::Microseconds(1), base::Milliseconds(128), 100); + } } void CookieMonster::DeleteAllCreatedInTimeRange(const TimeRange& creation_range, @@ -1153,15 +1192,10 @@ void CookieMonster::TrimDuplicateCookiesForKey( typedef std::multiset CookieSet; // Helper map we populate to find the duplicates. - typedef std::map EquivalenceMap; - typedef std::map - DomainEquivalenceMap; - EquivalenceMap equivalent_cookies; - DomainEquivalenceMap equivalent_domain_cookies; + std::map equivalent_cookies; // The number of duplicate cookies that have been found. int num_duplicates = 0; - int num_domain_duplicates = 0; // Iterate through all of the cookies in our range, and insert them into // the equivalence map. @@ -1169,49 +1203,31 @@ void CookieMonster::TrimDuplicateCookiesForKey( DCHECK_EQ(key, it->first); CanonicalCookie* cookie = it->second.get(); - if (cookie->IsHostCookie()) { - CanonicalCookie::UniqueCookieKey signature(cookie->UniqueKey()); - CookieSet& set = equivalent_cookies[signature]; + UniqueCookieKey signature(cookie->UniqueKey()); + CookieSet& set = equivalent_cookies[signature]; - // We found a duplicate! - if (!set.empty()) { - num_duplicates++; - } - - // We save the iterator into |cookies_| rather than the actual cookie - // pointer, since we may need to delete it later. - set.insert(it); + // We found a duplicate! + if (!set.empty()) { + num_duplicates++; } - // Is a domain cookie. - else { - CanonicalCookie::UniqueDomainCookieKey signature( - cookie->UniqueDomainKey()); - CookieSet& domain_set = equivalent_domain_cookies[signature]; - // We found a duplicate! - if (!domain_set.empty()) { - num_domain_duplicates++; - } - - // We save the iterator into |cookies_| rather than the actual cookie - // pointer, since we may need to delete it later. - domain_set.insert(it); - } + // We save the iterator into |cookies_| rather than the actual cookie + // pointer, since we may need to delete it later. + set.insert(it); } // If there were no duplicates, we are done! - if (num_duplicates == 0 && num_domain_duplicates == 0) { + if (num_duplicates == 0) { return; } // Make sure we find everything below that we did above. int num_duplicates_found = 0; - // Otherwise, delete all the duplicate host cookies, both from our in-memory + // Otherwise, delete all the duplicate cookies, both from our in-memory // store and from the backing store. - for (std::pair& - equivalent_cookie : equivalent_cookies) { - const CanonicalCookie::UniqueCookieKey& signature = equivalent_cookie.first; + for (auto& equivalent_cookie : equivalent_cookies) { + const UniqueCookieKey& signature = equivalent_cookie.first; CookieSet& dupes = equivalent_cookie.second; if (dupes.size() <= 1) { @@ -1231,9 +1247,8 @@ void CookieMonster::TrimDuplicateCookiesForKey( LOG(ERROR) << base::StringPrintf( "Found %d duplicate cookies for key='%s', " "with {name='%s', domain='%s', path='%s'}", - static_cast(dupes.size()), key.c_str(), - std::get<1>(signature).c_str(), std::get<2>(signature).c_str(), - std::get<3>(signature).c_str()); + static_cast(dupes.size()), key.c_str(), signature.name().c_str(), + signature.domain().c_str(), signature.path().c_str()); // Remove all the cookies identified by |dupes|. It is valid to delete our // list of iterators one at a time, since |cookies_| is a multimap (they @@ -1250,58 +1265,6 @@ void CookieMonster::TrimDuplicateCookiesForKey( } } CHECK_EQ(num_duplicates, num_duplicates_found); - - // Do the same again for domain cookies. - - if (num_domain_duplicates == 0) { - return; - } - - int num_domain_duplicates_found = 0; - - for (std::pair& - equivalent_domain_cookie : equivalent_domain_cookies) { - const CanonicalCookie::UniqueDomainCookieKey& signature = - equivalent_domain_cookie.first; - CookieSet& dupes = equivalent_domain_cookie.second; - - if (dupes.size() <= 1) { - continue; - } - - num_domain_duplicates_found += dupes.size() - 1; - - // Since |dupes| is sorted by creation time (descending), the first cookie - // is the most recent one (or tied for it), so we will keep it. The rest are - // duplicates. - dupes.erase(dupes.begin()); - - // TODO(crbug.com/40188414) Include cookie partition key in this log - // statement as well if needed. - // TODO(crbug.com/40165805): Include source scheme and source port. - LOG(ERROR) << base::StringPrintf( - "Found %d duplicate domain cookies for key='%s', " - "with {name='%s', domain='%s', path='%s'}", - static_cast(dupes.size()), key.c_str(), - std::get<1>(signature).c_str(), std::get<2>(signature).c_str(), - std::get<3>(signature).c_str()); - - // Remove all the cookies identified by |dupes|. It is valid to delete our - // list of iterators one at a time, since |cookies_| is a multimap (they - // don't invalidate existing iterators following deletion). - for (const CookieMap::iterator& dupe : dupes) { - if (cookie_partition_it) { - InternalDeletePartitionedCookie( - cookie_partition_it.value(), dupe, true, - DELETE_COOKIE_DUPLICATE_IN_BACKING_STORE); - } else { - InternalDeleteCookie(dupe, true, - DELETE_COOKIE_DUPLICATE_IN_BACKING_STORE); - } - } - } - - CHECK_EQ(num_domain_duplicates, num_domain_duplicates_found); } std::vector @@ -1374,8 +1337,9 @@ void CookieMonster::FilterCookiesWithOptions( bool delegate_treats_url_as_trustworthy = cookie_access_delegate() && cookie_access_delegate()->ShouldTreatUrlAsTrustworthy(url); - using CookieAndAccessResult = std::pair; - std::vector cookies_and_access_results; + + std::vector> + cookies_and_access_results; cookies_and_access_results.reserve(cookie_ptrs->size()); std::set origin_cookie_names; @@ -1397,30 +1361,30 @@ void CookieMonster::FilterCookiesWithOptions( // reasons, so we'll remove any potential path exclusions. CookieInclusionStatus status_copy = access_result.status; status_copy.RemoveExclusionReason( - CookieInclusionStatus::EXCLUDE_NOT_ON_PATH); + CookieInclusionStatus::ExclusionReason::EXCLUDE_NOT_ON_PATH); bool exclusion_or_warning = !status_copy.IsInclude() || status_copy.HasWarningReason( - CookieInclusionStatus::WARN_SCHEME_MISMATCH) || - status_copy.HasWarningReason(CookieInclusionStatus::WARN_PORT_MISMATCH); + CookieInclusionStatus::WarningReason::WARN_SCHEME_MISMATCH) || + status_copy.HasWarningReason( + CookieInclusionStatus::WarningReason::WARN_PORT_MISMATCH); if (!exclusion_or_warning && cookie_ptr->IsHostCookie()) { origin_cookie_names.insert(cookie_ptr->Name()); } } - // Map to store the most recent aliasing cookie and it's CookieAccessResult - std::map - latest_aliasing_cookies; - for (auto& cookie_result : cookies_and_access_results) { CanonicalCookie* cookie_ptr = cookie_result.first; CookieAccessResult& access_result = cookie_result.second; // We want to collect these metrics for cookies that would be included - // without considering shadowing domain cookies. - if (access_result.status.IsInclude()) { + // without considering shadowing domain cookies. Recording them on every + // resource sequest results in unnecessarily large amounts of samples + // and has a non-zero runtime cost, so only collect 1/1000 times. + if (metrics_subsampler_.ShouldSample(0.001) && + access_result.status.IsInclude()) { int destination_port = url.EffectiveIntPort(); if (IsLocalhost(url)) { @@ -1449,64 +1413,27 @@ void CookieMonster::FilterCookiesWithOptions( } } - if (GetScopeSemanticsForCookie(*cookie_ptr) == - CookieScopeSemantics::LEGACY) { - // For legacy scope semantics we want to exclude all but the most recent - // aliasing cookie(s). - auto existing_alias = - latest_aliasing_cookies.find(cookie_ptr->LegacyUniqueKey()); + // Filter out any domain `cookie_ptr` which are shadowing origin cookies. + // Don't apply domain shadowing exclusion/warning reason if `cookie_ptr` is + // already being excluded/warned for scheme matching reasons (Note, domain + // cookies match every port so they'll never get excluded/warned for port + // reasons). + bool scheme_mismatch = + access_result.status.HasExclusionReason( + CookieInclusionStatus::ExclusionReason::EXCLUDE_SCHEME_MISMATCH) || + access_result.status.HasWarningReason( + CookieInclusionStatus::WarningReason::WARN_SCHEME_MISMATCH); - if (existing_alias == latest_aliasing_cookies.end()) { - // Cookie is new and not in map. - latest_aliasing_cookies[cookie_ptr->LegacyUniqueKey()] = &cookie_result; + if (cookie_ptr->IsDomainCookie() && !scheme_mismatch && + origin_cookie_names.count(cookie_ptr->Name())) { + if (cookie_util::IsSchemeBoundCookiesEnabled()) { + access_result.status.AddExclusionReason( + CookieInclusionStatus::ExclusionReason::EXCLUDE_SHADOWING_DOMAIN); } else { - CHECK(std::make_tuple(cookie_ptr->SourcePort(), - cookie_ptr->SourceScheme()) != - std::make_tuple(existing_alias->second->first->SourcePort(), - existing_alias->second->first->SourceScheme())) - << "port: " << cookie_ptr->SourcePort() - << ", scheme: " << static_cast(cookie_ptr->SourceScheme()); - if (cookie_ptr->CreationDate() > - existing_alias->second->first->CreationDate()) { - existing_alias->second->second.status.AddExclusionReason( - CookieInclusionStatus::EXCLUDE_ALIASING); - latest_aliasing_cookies[cookie_ptr->LegacyUniqueKey()] = - &cookie_result; - } else { - access_result.status.AddExclusionReason( - CookieInclusionStatus::EXCLUDE_ALIASING); - } - } - } else { - // Filter out any domain `cookie_ptr` which are shadowing origin cookies. - // Don't apply domain shadowing exclusion/warning reason if `cookie_ptr` - // is already being excluded/warned for scheme matching reasons (Note, - // domain cookies match every port so they'll never get excluded/warned - // for port reasons). - bool scheme_mismatch = - access_result.status.HasExclusionReason( - CookieInclusionStatus::EXCLUDE_SCHEME_MISMATCH) || - access_result.status.HasWarningReason( - CookieInclusionStatus::WARN_SCHEME_MISMATCH); - - if (cookie_ptr->IsDomainCookie() && !scheme_mismatch && - origin_cookie_names.count(cookie_ptr->Name())) { - if (cookie_util::IsSchemeBoundCookiesEnabled()) { - access_result.status.AddExclusionReason( - CookieInclusionStatus::EXCLUDE_SHADOWING_DOMAIN); - } else { - access_result.status.AddWarningReason( - CookieInclusionStatus::WARN_SHADOWING_DOMAIN); - } + access_result.status.AddWarningReason( + CookieInclusionStatus::WarningReason::WARN_SHADOWING_DOMAIN); } } - } - // Loop through all cookies again and add to include and exclude list. - // TODO(crbug.com/40165805): Look for optimizations for excluding previous - // aliases. - for (auto& cookie_result : cookies_and_access_results) { - CanonicalCookie* cookie_ptr = cookie_result.first; - CookieAccessResult& access_result = cookie_result.second; if (!access_result.status.IsInclude()) { if (options.return_excluded_cookies()) { @@ -1534,23 +1461,16 @@ void CookieMonster::MaybeDeleteEquivalentCookieAndUpdateStatus( std::optional cookie_partition_it) { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); DCHECK(!status->HasExclusionReason( - CookieInclusionStatus::EXCLUDE_OVERWRITE_SECURE)); + CookieInclusionStatus::ExclusionReason::EXCLUDE_OVERWRITE_SECURE)); DCHECK(!status->HasExclusionReason( - CookieInclusionStatus::EXCLUDE_OVERWRITE_HTTP_ONLY)); + CookieInclusionStatus::ExclusionReason::EXCLUDE_OVERWRITE_HTTP_ONLY)); CookieMap* cookie_map = &cookies_; if (cookie_partition_it) { cookie_map = cookie_partition_it.value()->second.get(); } - // Vector to store aliasing cookies that are candidates for deletion. - std::vector alias_cookie_deletion_candidates; - // Most recently created cookie that is aliasing cookie_being_set. - CanonicalCookie* most_recently_created_deletion_candidate = nullptr; - bool found_equivalent_cookie = false; - bool legacy_behavior_active = GetScopeSemanticsForCookie(cookie_being_set) == - CookieScopeSemantics::LEGACY; CookieMap::iterator deletion_candidate_it = cookie_map->end(); CanonicalCookie* skipped_secure_cookie = nullptr; @@ -1573,9 +1493,7 @@ void CookieMonster::MaybeDeleteEquivalentCookieAndUpdateStatus( if (cur_existing_cookie->SecureAttribute() && !allowed_to_set_secure_cookie && cookie_being_set.IsEquivalentForSecureCookieMatching( - *cur_existing_cookie) && - !cookie_util::IsSchemeBoundCookiesBehaviorActive( - GetScopeSemanticsForCookie(cookie_being_set))) { + *cur_existing_cookie)) { // Hold onto this for additional Netlogging later if we end up preserving // a would-have-been-deleted cookie because of this. skipped_secure_cookie = cur_existing_cookie; @@ -1586,7 +1504,7 @@ void CookieMonster::MaybeDeleteEquivalentCookieAndUpdateStatus( capture_mode); }); status->AddExclusionReason( - CookieInclusionStatus::EXCLUDE_OVERWRITE_SECURE); + CookieInclusionStatus::ExclusionReason::EXCLUDE_OVERWRITE_SECURE); } if (cookie_being_set.IsEquivalent(*cur_existing_cookie)) { @@ -1606,46 +1524,18 @@ void CookieMonster::MaybeDeleteEquivalentCookieAndUpdateStatus( return NetLogCookieMonsterCookieRejectedHttponly( cur_existing_cookie, &cookie_being_set, capture_mode); }); - status->AddExclusionReason( - CookieInclusionStatus::EXCLUDE_OVERWRITE_HTTP_ONLY); + status->AddExclusionReason(CookieInclusionStatus::ExclusionReason:: + EXCLUDE_OVERWRITE_HTTP_ONLY); } else { deletion_candidate_it = cur_it; - if (!most_recently_created_deletion_candidate || - deletion_candidate_it->second->CreationDate() > - most_recently_created_deletion_candidate->CreationDate()) { - most_recently_created_deletion_candidate = - deletion_candidate_it->second.get(); - } } } - if (legacy_behavior_active) { - // Conditional check to check if cookies are aliasing each other when - // CookieScopeSemantics are LEGACY we want to delete all aliasing cookies. - if (cookie_being_set.LegacyUniqueKey() == - cur_existing_cookie->LegacyUniqueKey() && - deletion_candidate_it != cur_it) { - if (!most_recently_created_deletion_candidate || - cur_existing_cookie->CreationDate() > - most_recently_created_deletion_candidate->CreationDate()) { - most_recently_created_deletion_candidate = cur_existing_cookie; - } - alias_cookie_deletion_candidates.emplace_back(cur_it); - } - } - } - - if (most_recently_created_deletion_candidate) { - CHECK(!alias_cookie_deletion_candidates.empty() || - deletion_candidate_it != cookie_map->end()); - if (most_recently_created_deletion_candidate->Value() == - cookie_being_set.Value()) { - *creation_date_to_inherit = - most_recently_created_deletion_candidate->CreationDate(); - } } if (deletion_candidate_it != cookie_map->end()) { CanonicalCookie* deletion_candidate = deletion_candidate_it->second.get(); + if (deletion_candidate->Value() == cookie_being_set.Value()) + *creation_date_to_inherit = deletion_candidate->CreationDate(); if (status->IsInclude()) { if (cookie_being_set.IsPartitioned()) { InternalDeletePartitionedCookie( @@ -1659,7 +1549,8 @@ void CookieMonster::MaybeDeleteEquivalentCookieAndUpdateStatus( : DELETE_COOKIE_OVERWRITE); } } else if (status->HasExclusionReason( - CookieInclusionStatus::EXCLUDE_OVERWRITE_SECURE)) { + CookieInclusionStatus::ExclusionReason:: + EXCLUDE_OVERWRITE_SECURE)) { // Log that we preserved a cookie that would have been deleted due to // Leave Secure Cookies Alone. This arbitrarily only logs the last // |skipped_secure_cookie| that we were left with after the for loop, even @@ -1674,23 +1565,6 @@ void CookieMonster::MaybeDeleteEquivalentCookieAndUpdateStatus( }); } } - // Delete any aliasing cookies. - if (status->IsInclude()) { - if (cookie_being_set.IsPartitioned()) { - for (auto& alias_cookie : alias_cookie_deletion_candidates) { - InternalDeletePartitionedCookie( - cookie_partition_it.value(), alias_cookie, /* sync_to_store */ true, - already_expired ? DELETE_COOKIE_EXPIRED_OVERWRITE - : DELETE_COOKIE_OVERWRITE); - } - } else { - for (auto& alias_cookie : alias_cookie_deletion_candidates) { - InternalDeleteCookie(alias_cookie, /* sync_to_store */ true, - already_expired ? DELETE_COOKIE_EXPIRED_OVERWRITE - : DELETE_COOKIE_OVERWRITE); - } - } - } } CookieMonster::CookieMap::iterator CookieMonster::InternalInsertCookie( @@ -1866,9 +1740,10 @@ void CookieMonster::SetCanonicalCookie( } if (access_result.status.HasExclusionReason( - CookieInclusionStatus::EXCLUDE_OVERWRITE_SECURE) || + CookieInclusionStatus::ExclusionReason::EXCLUDE_OVERWRITE_SECURE) || access_result.status.HasExclusionReason( - CookieInclusionStatus::EXCLUDE_OVERWRITE_HTTP_ONLY)) { + CookieInclusionStatus::ExclusionReason:: + EXCLUDE_OVERWRITE_HTTP_ONLY)) { DVLOG(net::cookie_util::kVlogSetCookies) << "SetCookie() not clobbering httponly cookie or secure cookie for " "insecure scheme"; @@ -1943,7 +1818,7 @@ void CookieMonster::SetCanonicalCookie( // If the cookie would be excluded, don't bother warning about the 3p cookie // phaseout. access_result.status.RemoveWarningReason( - net::CookieInclusionStatus::WARN_THIRD_PARTY_PHASEOUT); + net::CookieInclusionStatus::WarningReason::WARN_THIRD_PARTY_PHASEOUT); } // TODO(chlily): Log metrics. @@ -2337,15 +2212,82 @@ size_t CookieMonster::GarbageCollectPartitionedCookies( std::sort(non_expired_cookie_its.begin(), non_expired_cookie_its.end(), LRACookieSorter); - for (size_t i = 0; - bytes_used > kPerPartitionDomainMaxCookieBytes || - non_expired_cookie_its.size() - i > kPerPartitionDomainMaxCookies; - ++i) { - bytes_used -= NameValueSizeBytes(*non_expired_cookie_its[i]->second); - InternalDeletePartitionedCookie( - cookie_partition_it, non_expired_cookie_its[i], true, - DELETE_COOKIE_EVICTED_PER_PARTITION_DOMAIN); - ++num_deleted; + // When OBC behavior is enabled, we need to consider the partitioned + // cookies that are domain cookies first and delete those, and then we + // want to delete host cookies. + if (cookie_util::IsOriginBoundCookiesPartiallyEnabled()) { + CookieItList cookie_it_list = CookieItList( + non_expired_cookie_its.begin(), non_expired_cookie_its.end()); + DeletionCookieLists could_be_deleted = + CountCookiesAndGenerateListsForPossibleDeletionPartitionedCookies( + cookie_it_list); + + // Delete domain cookies first. + // We have 3 layers of iterators to consider: + // The `could_be_deleted` list's iterator, which points to... + // The `cookies` list's iterator, which points to... + // The CookieMap's iterator which is used to delete the actual cookie + // from the backend. For each cookie deleted all three of these will + // need to erased, in a bottom up approach. + size_t num_cookies_deleted = 0; + for (auto domain_list_it = could_be_deleted.domain_cookies.begin(); + domain_list_it != could_be_deleted.domain_cookies.end() && + (bytes_used > kPerPartitionDomainMaxCookieBytes || + non_expired_cookie_its.size() - num_cookies_deleted > + kPerPartitionDomainMaxCookies); + ++num_cookies_deleted) { + auto cookies_list_it = *domain_list_it; + auto cookie_map_it = *cookies_list_it; + + bytes_used -= NameValueSizeBytes(*cookie_map_it->second); + + // Delete from the cookie store. + InternalDeletePartitionedCookie( + cookie_partition_it, cookie_map_it, /*sync_to_store=*/true, + DELETE_COOKIE_EVICTED_PER_PARTITION_DOMAIN); + + // Delete from `cookie_it_list`. + cookie_it_list.erase(cookies_list_it); + // Delete from `could_be_deleted`. + domain_list_it = + could_be_deleted.domain_cookies.erase(domain_list_it); + ++num_deleted; + } + + // Now do the same for host cookies. + for (auto host_list_it = could_be_deleted.host_cookies.begin(); + host_list_it != could_be_deleted.host_cookies.end() && + (bytes_used > kPerPartitionDomainMaxCookieBytes || + non_expired_cookie_its.size() - num_cookies_deleted > + kPerPartitionDomainMaxCookies); + ++num_cookies_deleted) { + auto cookies_list_it = *host_list_it; + auto cookie_map_it = *cookies_list_it; + + bytes_used -= NameValueSizeBytes(*cookie_map_it->second); + + // Delete from the cookie store. + InternalDeletePartitionedCookie( + cookie_partition_it, cookie_map_it, /*sync_to_store=*/true, + DELETE_COOKIE_EVICTED_PER_PARTITION_DOMAIN); + + // Delete from `cookie_it_list`. + cookie_it_list.erase(cookies_list_it); + // Delete from `could_be_deleted`. + host_list_it = could_be_deleted.host_cookies.erase(host_list_it); + ++num_deleted; + } + } else { + for (size_t i = 0; + bytes_used > kPerPartitionDomainMaxCookieBytes || + non_expired_cookie_its.size() - i > kPerPartitionDomainMaxCookies; + ++i) { + bytes_used -= NameValueSizeBytes(*non_expired_cookie_its[i]->second); + InternalDeletePartitionedCookie( + cookie_partition_it, non_expired_cookie_its[i], true, + DELETE_COOKIE_EVICTED_PER_PARTITION_DOMAIN); + ++num_deleted; + } } } } @@ -2627,7 +2569,7 @@ bool CookieMonster::HasCookieableScheme(const GURL& url) { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); // Make sure the request is on a cookie-able url scheme. - bool is_cookieable = base::ranges::any_of( + bool is_cookieable = std::ranges::any_of( cookieable_schemes_, [&url](const std::string& cookieable_scheme) { return url.SchemeIs(cookieable_scheme.c_str()); }); diff --git a/naiveproxy/src/net/cookies/cookie_monster.h b/naiveproxy/src/net/cookies/cookie_monster.h index 5a81a20072..1533aea318 100644 --- a/naiveproxy/src/net/cookies/cookie_monster.h +++ b/naiveproxy/src/net/cookies/cookie_monster.h @@ -24,6 +24,7 @@ #include "base/gtest_prod_util.h" #include "base/memory/ref_counted.h" #include "base/memory/weak_ptr.h" +#include "base/rand_util.h" #include "base/thread_annotations.h" #include "base/threading/thread_checker.h" #include "base/time/time.h" @@ -61,6 +62,28 @@ class NET_EXPORT CookieMonster : public CookieStore { public: class PersistentCookieStore; + // Provides an interface to interact with persistent preferences storage + // implemented by the embedder KnownLegacyScopeDomainsPrefDelegate. + // This pref delegate is used to store known legacy scope domains. + class PrefDelegate { + public: + virtual ~PrefDelegate() = default; + + // Returns a dict of all domains under legacy mode. + virtual const base::Value::Dict& GetLegacyDomains() const = 0; + + // Sets a dict of domain names under legacy scope mode. + virtual void SetLegacyDomains(base::Value::Dict dict) = 0; + + // Starts listening for prefs to be loaded. If prefs are already loaded, + // `pref_loaded_callback` will be invoked asynchronously. Callback will be + // invoked even if prefs fail to load. + virtual void WaitForPrefLoad(base::OnceClosure pref_loaded_callback) = 0; + + // Will return true if the pref system is ready to be used. + virtual bool IsPrefReady() = 0; + }; + // Terminology: // * The 'top level domain' (TLD) of an internet domain name is // the terminal "." free substring (e.g. "com" for google.com @@ -159,13 +182,16 @@ class NET_EXPORT CookieMonster : public CookieStore { // this class, but it must remain valid for the duration of the cookie // monster's existence. If |store| is NULL, then no backing store will be // updated. |net_log| must outlive the CookieMonster and can be null. - CookieMonster(scoped_refptr store, NetLog* net_log); + CookieMonster(scoped_refptr store, + NetLog* net_log, + std::unique_ptr pref_delegate = nullptr); // Only used during unit testing. // |net_log| must outlive the CookieMonster. CookieMonster(scoped_refptr store, base::TimeDelta last_access_threshold, - NetLog* net_log); + NetLog* net_log, + std::unique_ptr pref_delegate); CookieMonster(const CookieMonster&) = delete; CookieMonster& operator=(const CookieMonster&) = delete; @@ -273,8 +299,6 @@ class NET_EXPORT CookieMonster : public CookieStore { FilterCookiesWithOptionsExcludeShadowingDomains); FRIEND_TEST_ALL_PREFIXES(CookieMonsterTest, FilterCookiesWithOptionsWarnShadowingDomains); - FRIEND_TEST_ALL_PREFIXES(CookieMonsterTest, - FilterCookiesWithOptionsExcludeAlising); // For StoreLoadedCookies behavior with origin-bound cookies. FRIEND_TEST_ALL_PREFIXES(CookieMonsterTest_StoreLoadedCookies, @@ -785,6 +809,8 @@ class NET_EXPORT CookieMonster : public CookieStore { NetLogWithSource net_log_; + std::unique_ptr pref_delegate_; + scoped_refptr store_; // Minimum delay after updating a cookie's LastAccessDate before we will @@ -808,6 +834,8 @@ class NET_EXPORT CookieMonster : public CookieStore { bool persist_session_cookies_ = false; + base::MetricsSubSampler metrics_subsampler_; + THREAD_CHECKER(thread_checker_); base::WeakPtrFactory weak_ptr_factory_{this}; diff --git a/naiveproxy/src/net/cookies/cookie_monster_store_test.h b/naiveproxy/src/net/cookies/cookie_monster_store_test.h index 6fdedd8412..f8d80ccf47 100644 --- a/naiveproxy/src/net/cookies/cookie_monster_store_test.h +++ b/naiveproxy/src/net/cookies/cookie_monster_store_test.h @@ -170,8 +170,7 @@ class MockSimplePersistentCookieStore ~MockSimplePersistentCookieStore() override; private: - typedef std::map - CanonicalCookieMap; + typedef std::map CanonicalCookieMap; CanonicalCookieMap cookies_; diff --git a/naiveproxy/src/net/cookies/cookie_options.h b/naiveproxy/src/net/cookies/cookie_options.h index b240265067..5326a1ae0f 100644 --- a/naiveproxy/src/net/cookies/cookie_options.h +++ b/naiveproxy/src/net/cookies/cookie_options.h @@ -120,15 +120,6 @@ class NET_EXPORT CookieOptions { ContextRedirectTypeBug1221316 redirect_type_bug_1221316 = ContextRedirectTypeBug1221316::kUnset; - - // Records the HTTP method of requests that result in a cross-site - // redirect downgrade. May be kUnset if there wasn't a downgrade or if the - // cookie access wasn't due to a request. - // - // Note that this field is always set when there was a context - // downgrade but the associated histrogram is only recorded when that - // context downgrade results in a change in inclusion status. - HttpMethod http_method_bug_1221316 = HttpMethod::kUnset; }; // The following three constructors apply default values for the metadata @@ -304,8 +295,6 @@ inline void PrintTo( << static_cast(m.cross_site_redirect_downgrade); *os << ", redirect_type_bug_1221316: " << static_cast(m.redirect_type_bug_1221316); - *os << ", http_method_bug_1221316: " - << static_cast(m.http_method_bug_1221316); *os << " }"; } diff --git a/naiveproxy/src/net/cookies/cookie_partition_key.cc b/naiveproxy/src/net/cookies/cookie_partition_key.cc index 5cca877504..e6640b8cff 100644 --- a/naiveproxy/src/net/cookies/cookie_partition_key.cc +++ b/naiveproxy/src/net/cookies/cookie_partition_key.cc @@ -4,6 +4,7 @@ #include "net/cookies/cookie_partition_key.h" +#include #include #include @@ -99,21 +100,14 @@ CookiePartitionKey& CookiePartitionKey::operator=(CookiePartitionKey&& other) = CookiePartitionKey::~CookiePartitionKey() = default; bool CookiePartitionKey::operator==(const CookiePartitionKey& other) const { - AncestorChainBit this_bit = MaybeAncestorChainBit(); - AncestorChainBit other_bit = other.MaybeAncestorChainBit(); - - return std::tie(site_, nonce_, this_bit) == - std::tie(other.site_, other.nonce_, other_bit); + return (*this <=> other) == 0; } -bool CookiePartitionKey::operator!=(const CookiePartitionKey& other) const { - return !(*this == other); -} - -bool CookiePartitionKey::operator<(const CookiePartitionKey& other) const { +std::strong_ordering CookiePartitionKey::operator<=>( + const CookiePartitionKey& other) const { AncestorChainBit this_bit = MaybeAncestorChainBit(); AncestorChainBit other_bit = other.MaybeAncestorChainBit(); - return std::tie(site_, nonce_, this_bit) < + return std::tie(site_, nonce_, this_bit) <=> std::tie(other.site_, other.nonce_, other_bit); } diff --git a/naiveproxy/src/net/cookies/cookie_partition_key.h b/naiveproxy/src/net/cookies/cookie_partition_key.h index 12ce29c230..574d4feea7 100644 --- a/naiveproxy/src/net/cookies/cookie_partition_key.h +++ b/naiveproxy/src/net/cookies/cookie_partition_key.h @@ -5,6 +5,7 @@ #ifndef NET_COOKIES_COOKIE_PARTITION_KEY_H_ #define NET_COOKIES_COOKIE_PARTITION_KEY_H_ +#include #include #include @@ -71,8 +72,7 @@ class NET_EXPORT CookiePartitionKey { ~CookiePartitionKey(); bool operator==(const CookiePartitionKey& other) const; - bool operator!=(const CookiePartitionKey& other) const; - bool operator<(const CookiePartitionKey& other) const; + std::strong_ordering operator<=>(const CookiePartitionKey& other) const; // Methods for serializing and deserializing a partition key to/from a string. // This is currently used for: diff --git a/naiveproxy/src/net/cookies/cookie_setting_override.h b/naiveproxy/src/net/cookies/cookie_setting_override.h index 446578aa09..34d2af636e 100644 --- a/naiveproxy/src/net/cookies/cookie_setting_override.h +++ b/naiveproxy/src/net/cookies/cookie_setting_override.h @@ -44,8 +44,13 @@ enum class CookieSettingOverride { kStorageAccessGrantEligibleViaHeader = 7, // When present, third-party cookies may be allowed through mitigations. kForceEnableThirdPartyCookieMitigations = 8, + // When present, the context is sandboxed in a frame that is same-site + // with the top-level up its entire ancestor chain. SameSite=None + // cookies should be included in same-site requests from sandboxed contexts + // that have the 'allow-same-site-none-cookies' value. + kAllowSameSiteNoneCookiesInSandbox = 9, - kMaxValue = kForceEnableThirdPartyCookieMitigations, + kMaxValue = kAllowSameSiteNoneCookiesInSandbox, }; using CookieSettingOverrides = base::EnumSethttp_www_foo_.url(), true) .status.HasExclusionReason( - CookieInclusionStatus::EXCLUDE_SECURE_ONLY)); + CookieInclusionStatus::ExclusionReason::EXCLUDE_SECURE_ONLY)); // A Secure cookie can be created from an insecure URL, but is rejected upon // setting. @@ -639,10 +639,11 @@ TYPED_TEST_P(CookieStoreTest, SetCanonicalCookieTest) { CookieSourceType::kUnknown, &status); EXPECT_TRUE(cookie->SecureAttribute()); EXPECT_TRUE(status.IsInclude()); - EXPECT_TRUE(this->SetCanonicalCookieReturnAccessResult( - cs, std::move(cookie), this->http_www_foo_.url(), true) - .status.HasExclusionReason( - CookieInclusionStatus::EXCLUDE_SECURE_ONLY)); + EXPECT_TRUE( + this->SetCanonicalCookieReturnAccessResult( + cs, std::move(cookie), this->http_www_foo_.url(), true) + .status.HasExclusionReason( + CookieInclusionStatus::ExclusionReason::EXCLUDE_SECURE_ONLY)); // A secure source is also required for overwriting secure cookies. Writing // a secure cookie then overwriting it from a non-secure source should fail. @@ -664,21 +665,22 @@ TYPED_TEST_P(CookieStoreTest, SetCanonicalCookieTest) { COOKIE_PRIORITY_DEFAULT), this->http_www_foo_.url(), true /* modify_http_only */) .status.HasExclusionReason( - CookieInclusionStatus::EXCLUDE_SECURE_ONLY)); + CookieInclusionStatus::ExclusionReason::EXCLUDE_SECURE_ONLY)); if (TypeParam::supports_http_only) { // Permission to modify http only cookies is required to set an // httponly cookie. - EXPECT_TRUE(this->SetCanonicalCookieReturnAccessResult( - cs, - CanonicalCookie::CreateUnsafeCookieForTesting( - "G", "H", http_foo_host, "/unique", base::Time(), - base::Time(), base::Time(), base::Time(), - false /* secure */, true /* httponly */, - CookieSameSite::LAX_MODE, COOKIE_PRIORITY_DEFAULT), - this->http_www_foo_.url(), false /* modify_http_only */) - .status.HasExclusionReason( - CookieInclusionStatus::EXCLUDE_HTTP_ONLY)); + EXPECT_TRUE( + this->SetCanonicalCookieReturnAccessResult( + cs, + CanonicalCookie::CreateUnsafeCookieForTesting( + "G", "H", http_foo_host, "/unique", base::Time(), + base::Time(), base::Time(), base::Time(), + false /* secure */, true /* httponly */, + CookieSameSite::LAX_MODE, COOKIE_PRIORITY_DEFAULT), + this->http_www_foo_.url(), false /* modify_http_only */) + .status.HasExclusionReason( + CookieInclusionStatus::ExclusionReason::EXCLUDE_HTTP_ONLY)); // A HttpOnly cookie can be created, but is rejected // upon setting if the options do not specify include_httponly. @@ -690,11 +692,12 @@ TYPED_TEST_P(CookieStoreTest, SetCanonicalCookieTest) { &create_status); EXPECT_TRUE(c->IsHttpOnly()); EXPECT_TRUE(create_status.IsInclude()); - EXPECT_TRUE(this->SetCanonicalCookieReturnAccessResult( - cs, std::move(c), this->http_www_foo_.url(), - false /* can_modify_httponly */) - .status.HasExclusionReason( - CookieInclusionStatus::EXCLUDE_HTTP_ONLY)); + EXPECT_TRUE( + this->SetCanonicalCookieReturnAccessResult( + cs, std::move(c), this->http_www_foo_.url(), + false /* can_modify_httponly */) + .status.HasExclusionReason( + CookieInclusionStatus::ExclusionReason::EXCLUDE_HTTP_ONLY)); // Permission to modify httponly cookies is also required to overwrite // an httponly cookie. @@ -706,16 +709,17 @@ TYPED_TEST_P(CookieStoreTest, SetCanonicalCookieTest) { CookieSameSite::LAX_MODE, COOKIE_PRIORITY_DEFAULT), this->http_www_foo_.url(), true /* modify_http_only */)); - EXPECT_TRUE(this->SetCanonicalCookieReturnAccessResult( - cs, - CanonicalCookie::CreateUnsafeCookieForTesting( - "G", "H", http_foo_host, "/unique", base::Time(), - base::Time(), base::Time(), base::Time(), - false /* secure */, true /* httponly */, - CookieSameSite::LAX_MODE, COOKIE_PRIORITY_DEFAULT), - this->http_www_foo_.url(), false /* modify_http_only */) - .status.HasExclusionReason( - CookieInclusionStatus::EXCLUDE_HTTP_ONLY)); + EXPECT_TRUE( + this->SetCanonicalCookieReturnAccessResult( + cs, + CanonicalCookie::CreateUnsafeCookieForTesting( + "G", "H", http_foo_host, "/unique", base::Time(), + base::Time(), base::Time(), base::Time(), + false /* secure */, true /* httponly */, + CookieSameSite::LAX_MODE, COOKIE_PRIORITY_DEFAULT), + this->http_www_foo_.url(), false /* modify_http_only */) + .status.HasExclusionReason( + CookieInclusionStatus::ExclusionReason::EXCLUDE_HTTP_ONLY)); } else { // Leave store in same state as if the above tests had been run. EXPECT_TRUE(this->SetCanonicalCookie( diff --git a/naiveproxy/src/net/cookies/cookie_util.cc b/naiveproxy/src/net/cookies/cookie_util.cc index d9b3bf03a9..d72deb6aa9 100644 --- a/naiveproxy/src/net/cookies/cookie_util.cc +++ b/naiveproxy/src/net/cookies/cookie_util.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "net/cookies/cookie_util.h" #include @@ -13,6 +18,7 @@ #include "base/check.h" #include "base/command_line.h" #include "base/compiler_specific.h" +#include "base/containers/contains.h" #include "base/feature_list.h" #include "base/functional/bind.h" #include "base/functional/callback.h" @@ -197,7 +203,7 @@ ComputeSameSiteContextResult ComputeSameSiteContext( // already checked it previously.) bool same_site_redirect_chain = url_chain.size() == 1u || - base::ranges::all_of(url_chain, is_same_site_with_site_for_cookies); + std::ranges::all_of(url_chain, is_same_site_with_site_for_cookies); // Record what type of redirect was experienced. @@ -344,18 +350,19 @@ std::string GetEffectiveDomain(const std::string& scheme, return CookieDomainAsHost(host); } -bool GetCookieDomainWithString(const GURL& url, - const std::string& domain_string, - CookieInclusionStatus& status, - std::string* result) { +std::optional GetCookieDomainWithString( + const GURL& url, + const std::string& domain_string, + CookieInclusionStatus& status) { // Disallow non-ASCII domain names. if (!base::IsStringASCII(domain_string)) { if (base::FeatureList::IsEnabled(features::kCookieDomainRejectNonASCII)) { status.AddExclusionReason( - CookieInclusionStatus::EXCLUDE_DOMAIN_NON_ASCII); - return false; + CookieInclusionStatus::ExclusionReason::EXCLUDE_DOMAIN_NON_ASCII); + return std::nullopt; } - status.AddWarningReason(CookieInclusionStatus::WARN_DOMAIN_NON_ASCII); + status.AddWarningReason( + CookieInclusionStatus::WarningReason::WARN_DOMAIN_NON_ASCII); } const std::string url_host(url.host()); @@ -366,7 +373,7 @@ bool GetCookieDomainWithString(const GURL& url, // it is the last label in the name, but a name ending in `..` would have an // empty label in the penultimate position and is thus invalid. if (url_host.ends_with("..")) { - return false; + return std::nullopt; } // If no domain was specified in the domain string, default to a host cookie. // We match IE/Firefox in allowing a domain=IPADDR if it matches (case @@ -376,34 +383,36 @@ bool GetCookieDomainWithString(const GURL& url, (url.HostIsIPAddress() && (base::EqualsCaseInsensitiveASCII(url_host, domain_string) || base::EqualsCaseInsensitiveASCII("." + url_host, domain_string)))) { + std::string result; if (url.SchemeIsHTTPOrHTTPS() || url.SchemeIsWSOrWSS()) { - *result = url_host; + result = url_host; } else { // If the URL uses an unknown scheme, we should ensure the host has been // canonicalized. url::CanonHostInfo ignored; - *result = CanonicalizeHost(url_host, &ignored); + result = CanonicalizeHost(url_host, &ignored); } // TODO(crbug.com/40271909): Once empty label support is implemented we can // CHECK our assumptions here. For now, we DCHECK as DUMP_WILL_BE_CHECK is // generating too many crash reports and already know why this is failing. - DCHECK(DomainIsHostOnly(*result)); - return true; + DCHECK(DomainIsHostOnly(result)); + return result; } // Disallow domain names with %-escaped characters. - for (char c : domain_string) { - if (c == '%') - return false; + if (base::Contains(domain_string, '%')) { + return std::nullopt; } url::CanonHostInfo ignored; std::string cookie_domain(CanonicalizeHost(domain_string, &ignored)); // Get the normalized domain specified in cookie line. - if (cookie_domain.empty()) - return false; - if (cookie_domain[0] != '.') + if (cookie_domain.empty()) { + return std::nullopt; + } + if (cookie_domain[0] != '.') { cookie_domain = "." + cookie_domain; + } // Ensure |url| and |cookie_domain| have the same domain+registry. const std::string url_scheme(url.scheme()); @@ -416,19 +425,20 @@ bool GetCookieDomainWithString(const GURL& url, domain_string[0] == '.' ? domain_string.substr(1) : domain_string); if (url_host == normalized_domain_string) { - *result = url_host; - DCHECK(DomainIsHostOnly(*result)); - return true; + DCHECK(DomainIsHostOnly(normalized_domain_string)); + return normalized_domain_string; } // Otherwise, IP addresses/intranet hosts/public suffixes can't set // domain cookies. - return false; + return std::nullopt; } const std::string cookie_domain_and_registry( GetEffectiveDomain(url_scheme, cookie_domain)); - if (url_domain_and_registry != cookie_domain_and_registry) - return false; // Can't set a cookie on a different domain + registry. + if (url_domain_and_registry != cookie_domain_and_registry) { + // Can't set a cookie on a different domain + registry. + return std::nullopt; + } // Ensure |url_host| is |cookie_domain| or one of its subdomains. Given that // we know the domain+registry are the same from the above checks, this is @@ -437,11 +447,11 @@ bool GetCookieDomainWithString(const GURL& url, (cookie_domain != ("." + url_host)) : (url_host.compare(url_host.length() - cookie_domain.length(), cookie_domain.length(), cookie_domain) != 0); - if (is_suffix) - return false; + if (is_suffix) { + return std::nullopt; + } - *result = cookie_domain; - return true; + return cookie_domain; } // Parse a cookie expiration time. We try to be lenient, but we need to @@ -868,19 +878,6 @@ CookieOptions::SameSiteCookieContext ComputeSameSiteContextForRequest( schemeful_result.context_type = ContextType::SAME_SITE_LAX_METHOD_UNSAFE; } - ContextMetadata::HttpMethod http_method_enum = - HttpMethodStringToEnum(http_method); - - if (result.metadata.cross_site_redirect_downgrade != - ContextMetadata::ContextDowngradeType::kNoDowngrade) { - result.metadata.http_method_bug_1221316 = http_method_enum; - } - - if (schemeful_result.metadata.cross_site_redirect_downgrade != - ContextMetadata::ContextDowngradeType::kNoDowngrade) { - schemeful_result.metadata.http_method_bug_1221316 = http_method_enum; - } - return MakeSameSiteCookieContext(result, schemeful_result); } @@ -941,7 +938,7 @@ CookieOptions::SameSiteCookieContext ComputeSameSiteContextForResponse( bool same_site_redirect_chain = url_chain.size() == 1u || - base::ranges::all_of(url_chain, is_same_site_with_site_for_cookies); + std::ranges::all_of(url_chain, is_same_site_with_site_for_cookies); CookieOptions::SameSiteCookieContext::ContextMetadata& result_metadata = compute_schemefully ? result.schemeful_metadata() : result.metadata(); @@ -1009,11 +1006,6 @@ bool IsSchemeBoundCookiesEnabled() { return base::FeatureList::IsEnabled(features::kEnableSchemeBoundCookies); } -bool IsSchemeBoundCookiesBehaviorActive(CookieScopeSemantics scope_semantics) { - return scope_semantics != CookieScopeSemantics::LEGACY && - IsSchemeBoundCookiesEnabled(); -} - bool IsOriginBoundCookiesPartiallyEnabled() { return IsPortBoundCookiesEnabled() || IsSchemeBoundCookiesEnabled(); } @@ -1107,18 +1099,18 @@ NET_EXPORT void DCheckIncludedAndExcludedCookieLists( const CookieAccessResultList& excluded_cookies) { // Check that all elements of `included_cookies` really should be included, // and that all elements of `excluded_cookies` really should be excluded. - DCHECK(base::ranges::all_of(included_cookies, + DCHECK(std::ranges::all_of(included_cookies, + [](const net::CookieWithAccessResult& cookie) { + return cookie.access_result.status.IsInclude(); + })); + DCHECK(std::ranges::none_of(excluded_cookies, [](const net::CookieWithAccessResult& cookie) { return cookie.access_result.status.IsInclude(); })); - DCHECK(base::ranges::none_of(excluded_cookies, - [](const net::CookieWithAccessResult& cookie) { - return cookie.access_result.status.IsInclude(); - })); // Check that the included cookies are still in the correct order. DCHECK( - base::ranges::is_sorted(included_cookies, CookieWithAccessResultSorter)); + std::ranges::is_sorted(included_cookies, CookieWithAccessResultSorter)); } NET_EXPORT bool IsForceThirdPartyCookieBlockingEnabled() { @@ -1162,6 +1154,10 @@ bool ShouldAddInitialStorageAccessApiOverride( RecordStorageAccessNetRequestMetric(kind); } + if (base::FeatureList::IsEnabled( + features::kStorageAccessApiFollowsSameOriginPolicy)) { + return kind == kSameOrigin; + } return kind != kCrossSite; } diff --git a/naiveproxy/src/net/cookies/cookie_util.h b/naiveproxy/src/net/cookies/cookie_util.h index e21618e051..853496ea62 100644 --- a/naiveproxy/src/net/cookies/cookie_util.h +++ b/naiveproxy/src/net/cookies/cookie_util.h @@ -56,7 +56,8 @@ enum class StorageAccessResult { // ACCESS_ALLOWED_CORS_EXCEPTION = 8, // Deprecated ACCESS_ALLOWED_TOP_LEVEL_3PCD_TRIAL = 9, ACCESS_ALLOWED_SCHEME = 10, - kMaxValue = ACCESS_ALLOWED_SCHEME, + ACCESS_ALLOWED_SANDBOX_VALUE = 11, + kMaxValue = ACCESS_ALLOWED_SANDBOX_VALUE, }; // This enum's values correspond to the values of the HTTP request header @@ -171,15 +172,15 @@ NET_EXPORT std::string GetEffectiveDomain(const std::string& scheme, // Determine the actual cookie domain based on the domain string passed // (if any) and the URL from which the cookie came. -// On success returns true, and sets cookie_domain to either a +// On success returns either a // -host cookie domain (ex: "google.com") // -domain cookie domain (ex: ".google.com") // On success, DomainIsHostOnly(url.host()) is DCHECKed. The URL's host must not // begin with a '.' character. -NET_EXPORT bool GetCookieDomainWithString(const GURL& url, - const std::string& domain_string, - CookieInclusionStatus& status, - std::string* result); +NET_EXPORT std::optional GetCookieDomainWithString( + const GURL& url, + const std::string& domain_string, + CookieInclusionStatus& status); // Returns true if a domain string represents a host-only cookie, // i.e. it doesn't begin with a leading '.' character. @@ -400,11 +401,6 @@ NET_EXPORT bool IsPortBoundCookiesEnabled(); NET_EXPORT bool IsSchemeBoundCookiesEnabled(); -// Takes the feature state and CookieScopeSemantics semantics into account to -// determine if the behavior should be applied. -NET_EXPORT bool IsSchemeBoundCookiesBehaviorActive( - CookieScopeSemantics scope_semantics); - // Returns true if either portion of OBC is enabled. NET_EXPORT bool IsOriginBoundCookiesPartiallyEnabled(); diff --git a/naiveproxy/src/net/cookies/parsed_cookie.cc b/naiveproxy/src/net/cookies/parsed_cookie.cc index 1c8ec9d3be..7d5d0106a3 100644 --- a/naiveproxy/src/net/cookies/parsed_cookie.cc +++ b/naiveproxy/src/net/cookies/parsed_cookie.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + // Portions of this code based on Mozilla: // (netwerk/cookie/src/nsCookieService.cpp) /* ***** BEGIN LICENSE BLOCK ***** @@ -469,7 +474,7 @@ bool ParsedCookie::IsValidCookieNameValuePair( if (name.empty() && value.empty()) { if (status_out != nullptr) { status_out->AddExclusionReason( - CookieInclusionStatus::EXCLUDE_NO_COOKIE_CONTENT); + CookieInclusionStatus::ExclusionReason::EXCLUDE_NO_COOKIE_CONTENT); } // TODO(crbug.com/40189703) Note - if the exclusion reasons change to no // longer be the same, we'll need to not return right away and evaluate all @@ -484,7 +489,8 @@ bool ParsedCookie::IsValidCookieNameValuePair( (name_value_pair_size.ValueOrDie() > kMaxCookieNamePlusValueSize)) { if (status_out != nullptr) { status_out->AddExclusionReason( - CookieInclusionStatus::EXCLUDE_NAME_VALUE_PAIR_EXCEEDS_MAX_SIZE); + CookieInclusionStatus::ExclusionReason:: + EXCLUDE_NAME_VALUE_PAIR_EXCEEDS_MAX_SIZE); } return false; } @@ -494,7 +500,7 @@ bool ParsedCookie::IsValidCookieNameValuePair( if (!IsValidCookieName(name) || !IsValidCookieValue(value)) { if (status_out != nullptr) { status_out->AddExclusionReason( - CookieInclusionStatus::EXCLUDE_DISALLOWED_CHARACTER); + CookieInclusionStatus::ExclusionReason::EXCLUDE_DISALLOWED_CHARACTER); } return false; } @@ -518,14 +524,14 @@ void ParsedCookie::ParseTokenValuePairs(std::string_view cookie_line, // Block cookies that were truncated by control characters. if (end < cookie_line.end()) { status_out.AddExclusionReason( - CookieInclusionStatus::EXCLUDE_DISALLOWED_CHARACTER); + CookieInclusionStatus::ExclusionReason::EXCLUDE_DISALLOWED_CHARACTER); return; } // Exit early for an empty cookie string. if (it == end) { status_out.AddExclusionReason( - CookieInclusionStatus::EXCLUDE_NO_COOKIE_CONTENT); + CookieInclusionStatus::ExclusionReason::EXCLUDE_NO_COOKIE_CONTENT); return; } @@ -595,8 +601,8 @@ void ParsedCookie::ParseTokenValuePairs(std::string_view cookie_line, // this attribute name is one of the allowed ones here, so just re-use // the cookie name check. if (!IsValidCookieName(pair.first)) { - status_out.AddExclusionReason( - CookieInclusionStatus::EXCLUDE_DISALLOWED_CHARACTER); + status_out.AddExclusionReason(CookieInclusionStatus::ExclusionReason:: + EXCLUDE_DISALLOWED_CHARACTER); pairs_.clear(); break; } @@ -604,8 +610,8 @@ void ParsedCookie::ParseTokenValuePairs(std::string_view cookie_line, if (!CookieAttributeValueHasValidCharSet(pair.second)) { // If the attribute value contains invalid characters, the whole // cookie should be ignored. - status_out.AddExclusionReason( - CookieInclusionStatus::EXCLUDE_DISALLOWED_CHARACTER); + status_out.AddExclusionReason(CookieInclusionStatus::ExclusionReason:: + EXCLUDE_DISALLOWED_CHARACTER); pairs_.clear(); break; } @@ -613,8 +619,8 @@ void ParsedCookie::ParseTokenValuePairs(std::string_view cookie_line, if (!CookieAttributeValueHasValidSize(pair.second)) { // If the attribute value is too large, it should be ignored. ignore_pair = true; - status_out.AddWarningReason( - CookieInclusionStatus::WARN_ATTRIBUTE_VALUE_EXCEEDS_MAX_SIZE); + status_out.AddWarningReason(CookieInclusionStatus::WarningReason:: + WARN_ATTRIBUTE_VALUE_EXCEEDS_MAX_SIZE); } } diff --git a/naiveproxy/src/net/cookies/test_cookie_access_delegate.cc b/naiveproxy/src/net/cookies/test_cookie_access_delegate.cc index c45f502f80..669e710e34 100644 --- a/naiveproxy/src/net/cookies/test_cookie_access_delegate.cc +++ b/naiveproxy/src/net/cookies/test_cookie_access_delegate.cc @@ -4,6 +4,7 @@ #include "net/cookies/test_cookie_access_delegate.h" +#include #include #include #include @@ -13,7 +14,6 @@ #include "base/containers/flat_map.h" #include "base/containers/flat_set.h" #include "base/functional/callback.h" -#include "base/ranges/algorithm.h" #include "base/task/sequenced_task_runner.h" #include "base/task/thread_pool.h" #include "net/base/schemeful_site.h" diff --git a/naiveproxy/src/net/cookies/unique_cookie_key.cc b/naiveproxy/src/net/cookies/unique_cookie_key.cc new file mode 100644 index 0000000000..9c32310d82 --- /dev/null +++ b/naiveproxy/src/net/cookies/unique_cookie_key.cc @@ -0,0 +1,96 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "net/cookies/unique_cookie_key.h" + +#include +#include +#include + +#include "net/cookies/cookie_constants.h" +#include "net/cookies/cookie_partition_key.h" + +namespace net { + +class CookieBase; + +// static +UniqueCookieKey UniqueCookieKey::Strict( + base::PassKey, + std::optional partition_key, + std::string name, + std::string domain, + std::string path, + CookieSourceScheme source_scheme, + int source_port) { + return UniqueCookieKey(KeyType::kStrict, std::move(partition_key), + std::move(name), std::move(domain), std::move(path), + source_scheme, source_port); +} + +// static +UniqueCookieKey UniqueCookieKey::Host( + base::PassKey, + std::optional partition_key, + std::string name, + std::string domain, + std::string path, + std::optional source_scheme, + std::optional source_port) { + return UniqueCookieKey(KeyType::kHost, std::move(partition_key), + std::move(name), std::move(domain), std::move(path), + source_scheme, source_port); +} + +// static +UniqueCookieKey UniqueCookieKey::Domain( + base::PassKey, + std::optional partition_key, + std::string name, + std::string domain, + std::string path, + std::optional source_scheme) { + return UniqueCookieKey(KeyType::kDomain, std::move(partition_key), + std::move(name), std::move(domain), std::move(path), + source_scheme, /*port=*/std::nullopt); +} + +// static +UniqueCookieKey UniqueCookieKey::Legacy( + base::PassKey, + std::optional partition_key, + std::string name, + std::string domain, + std::string path) { + return UniqueCookieKey(KeyType::kLegacy, std::move(partition_key), + std::move(name), std::move(domain), std::move(path), + /*source_scheme=*/std::nullopt, + /*port=*/std::nullopt); +} + +UniqueCookieKey::UniqueCookieKey(UniqueCookieKey&& other) = default; +UniqueCookieKey::UniqueCookieKey(const UniqueCookieKey& other) = default; +UniqueCookieKey& UniqueCookieKey::operator=(UniqueCookieKey&& other) = default; +UniqueCookieKey& UniqueCookieKey::operator=(const UniqueCookieKey& other) = + default; + +UniqueCookieKey::~UniqueCookieKey() = default; + +UniqueCookieKey::UniqueCookieKey( + KeyType key_type, + std::optional partition_key, + std::string name, + std::string domain, + std::string path, + std::optional source_scheme, + std::optional port) + : key_type_(key_type), + partition_key_(std::move(partition_key)), + name_(std::move(name)), + domain_(std::move(domain)), + path_(std::move(path)), + source_scheme_(source_scheme), + port_(port) {} + +} // namespace net diff --git a/naiveproxy/src/net/cookies/unique_cookie_key.h b/naiveproxy/src/net/cookies/unique_cookie_key.h new file mode 100644 index 0000000000..386c73896e --- /dev/null +++ b/naiveproxy/src/net/cookies/unique_cookie_key.h @@ -0,0 +1,109 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef NET_COOKIES_UNIQUE_COOKIE_KEY_H_ +#define NET_COOKIES_UNIQUE_COOKIE_KEY_H_ + +#include +#include +#include + +#include "base/types/pass_key.h" +#include "net/base/net_export.h" +#include "net/cookies/cookie_constants.h" +#include "net/cookies/cookie_partition_key.h" + +namespace net { + +class CookieBase; + +class NET_EXPORT UniqueCookieKey { + public: + // Always populates the cookie's source scheme and source port. + static UniqueCookieKey Strict(base::PassKey, + std::optional partition_key, + std::string name, + std::string domain, + std::string path, + CookieSourceScheme source_scheme, + int source_port); + + // Conditionally populates the source scheme and source port depending on the + // state of their associated feature. + static UniqueCookieKey Host(base::PassKey, + std::optional partition_key, + std::string name, + std::string domain, + std::string path, + std::optional source_scheme, + std::optional source_port); + + // Same as Host but for use with Domain cookies, which do not + // consider the source_port. + static UniqueCookieKey Domain( + base::PassKey, + std::optional partition_key, + std::string name, + std::string domain, + std::string path, + std::optional source_scheme); + + // Same as Host but for use with Legacy Scoped cookies, which do + // not consider the source_port or source_scheme. + static UniqueCookieKey Legacy(base::PassKey, + std::optional partition_key, + std::string name, + std::string domain, + std::string path); + + UniqueCookieKey(UniqueCookieKey&& other); + UniqueCookieKey(const UniqueCookieKey& other); + UniqueCookieKey& operator=(UniqueCookieKey&& other); + UniqueCookieKey& operator=(const UniqueCookieKey& other); + + ~UniqueCookieKey(); + + std::strong_ordering operator<=>(const UniqueCookieKey& other) const = + default; + + const std::string& name() const { return name_; } + const std::string& domain() const { return domain_; } + const std::string& path() const { return path_; } + std::optional source_scheme() const { + return source_scheme_; + } + std::optional port() const { return port_; } + + private: + enum class KeyType { + kStrict, + kHost, + kDomain, + kLegacy, + }; + + UniqueCookieKey(KeyType key_type, + std::optional partition_key, + std::string name, + std::string domain, + std::string path, + std::optional source_scheme, + std::optional port); + + // Keys of different "types" (i.e., created by different factory functions) + // are never considered equivalent. + KeyType key_type_; + std::optional partition_key_; + std::string name_; + std::string domain_; + std::string path_; + // Nullopt in kLegacy keys; may be nullopt in kDomain and kHost keys. + std::optional source_scheme_; + // Nullopt in kLegacy and kDomain keys; may be nullopt in kHost keys. + std::optional port_; +}; + +} // namespace net + +#endif // NET_COOKIES_UNIQUE_COOKIE_KEY_H_ diff --git a/naiveproxy/src/net/data/ssl/chrome_root_store/faq.md b/naiveproxy/src/net/data/ssl/chrome_root_store/faq.md index 42d809188d..7d79e13b1d 100644 --- a/naiveproxy/src/net/data/ssl/chrome_root_store/faq.md +++ b/naiveproxy/src/net/data/ssl/chrome_root_store/faq.md @@ -1,5 +1,5 @@ # Frequently Asked Questions -Last updated: June 1, 2024 +Last updated: January 23, 2025 [TOC] @@ -122,6 +122,26 @@ During routine operating conditions, the Chrome Root Store is updated approximately quarterly. However, aperiodic updates may take place to promote the safety and privacy of Chrome's users. +### What happens when a certificate is added to or removed from the Chrome Root Store? + +Google Chrome includes or removes self-signed root CA certificates in the Chrome +Root Store as it deems appropriate at its sole discretion. + +New binary releases of Chrome include the current version of the Chrome Root +Store. If there is a change to the Chrome Root Store, future binary releases of +Chrome will automatically include that change. + +Existing versions of Chrome [relying](#when-did-these-features-land) on the +Chrome Root Store and capable of [receiving component updates](#how-is-the-chrome-root-store-updated) +typically receive updated versions of the Chrome Root Store within 24-hours of +the component’s release. Upon receiving the updated component, Chrome will rely +on the contents of the updated root store. + +Existing versions of Chrome *not* relying on the Chrome Root Store and/or that +have disabled component updates will *not* become aware of the change(s) until +installing a binary update following the publication of the updated root store. + + ### Does the Chrome Certificate Verifier consider local trust decisions? Yes. @@ -199,6 +219,18 @@ contents of the Chrome Root Store in use by a version of Chrome: 2. Click the ```Expand...``` button next to `chrome_root_store` 3. *The contents of the Chrome Root Store will display* +### What does it mean for a certificate in the Chrome Root Store to be constrained? +Chrome maintains a variety of mechanisms to protect its users from certificates +that put their safety and privacy at risk. One way this is accomplished is +through the use of metadata-based constraints added to CA certificates included +in the Chrome Root Store. + +The set of constraints that may be applied to a CA certificate included in the +Chrome Root Store is described [here](/net/cert/root_store.proto). + +To understand a constraint applied to a root included in the Chrome Root Store, +view the certificate’s entry in [root_store.textproto](/net/data/ssl/chrome_root_store/root_store.textproto). + ### What criteria does the Chrome Certificate Verifier use to evaluate certificates? The Chrome Certificate Verifier applies standard processing to include checking: diff --git a/naiveproxy/src/net/device_bound_sessions/cookie_craving.cc b/naiveproxy/src/net/device_bound_sessions/cookie_craving.cc index 854943a0e1..99061a0d25 100644 --- a/naiveproxy/src/net/device_bound_sessions/cookie_craving.cc +++ b/naiveproxy/src/net/device_bound_sessions/cookie_craving.cc @@ -114,14 +114,13 @@ std::optional CookieCraving::Create( if (parsed_cookie.HasDomain()) { domain_attribute_value = parsed_cookie.Domain(); } - std::string domain; CookieInclusionStatus ignored_status; + std::optional domain = cookie_util::GetCookieDomainWithString( + url, domain_attribute_value, ignored_status); // Note: This is a deviation from CanonicalCookie. Here, we also require that // domain is non-empty, which CanonicalCookie does not. See comment below in // IsValid(). - if (!cookie_util::GetCookieDomainWithString(url, domain_attribute_value, - ignored_status, &domain) || - domain.empty()) { + if (!domain || domain->empty()) { return std::nullopt; } @@ -155,7 +154,7 @@ std::optional CookieCraving::Create( int source_port = url.EffectiveIntPort(); CookieCraving cookie_craving{parsed_cookie.Name(), - std::move(domain), + std::move(domain).value(), std::move(path), creation_time, parsed_cookie.IsSecure(), diff --git a/naiveproxy/src/net/device_bound_sessions/mock_session_service.h b/naiveproxy/src/net/device_bound_sessions/mock_session_service.h index 496af0cce7..5f0ae5f4ef 100644 --- a/naiveproxy/src/net/device_bound_sessions/mock_session_service.h +++ b/naiveproxy/src/net/device_bound_sessions/mock_session_service.h @@ -28,7 +28,8 @@ class SessionServiceMock : public SessionService { (OnAccessCallback on_access_callback, RegistrationFetcherParam registration_params, const IsolationInfo& isolation_info, - const NetLogWithSource& net_log), + const NetLogWithSource& net_log, + const std::optional& original_request_initiator), (override)); MOCK_METHOD(std::optional, GetAnySessionRequiringDeferral, @@ -53,8 +54,10 @@ class SessionServiceMock : public SessionService { (base::OnceCallback&)> callback), (override)); MOCK_METHOD(void, - DeleteSession, - (const SchemefulSite& site, const Session::Id& id), + DeleteSessionAndNotify, + (const SchemefulSite& site, + const Session::Id& id, + SessionService::OnAccessCallback per_request_callback), (override)); MOCK_METHOD( void, @@ -64,6 +67,11 @@ class SessionServiceMock : public SessionService { base::RepeatingCallback site_matcher, base::OnceClosure completion_callback), (override)); + MOCK_METHOD(base::ScopedClosureRunner, + AddObserver, + (const GURL& url, + base::RepeatingCallback callback), + (override)); }; } // namespace net::device_bound_sessions diff --git a/naiveproxy/src/net/device_bound_sessions/registration_fetcher.cc b/naiveproxy/src/net/device_bound_sessions/registration_fetcher.cc index 4788820cf2..cd46163275 100644 --- a/naiveproxy/src/net/device_bound_sessions/registration_fetcher.cc +++ b/naiveproxy/src/net/device_bound_sessions/registration_fetcher.cc @@ -8,7 +8,7 @@ #include #include -#include "base/debug/stack_trace.h" +#include "base/functional/callback_helpers.h" #include "components/unexportable_keys/background_task_priority.h" #include "components/unexportable_keys/unexportable_key_service.h" #include "net/base/io_buffer.h" @@ -19,6 +19,7 @@ #include "net/traffic_annotation/network_traffic_annotation.h" #include "net/url_request/url_request.h" #include "net/url_request/url_request_context.h" +#include "url/origin.h" namespace net::device_bound_sessions { @@ -210,6 +211,7 @@ class RegistrationFetcherImpl : public URLRequest::Delegate { const URLRequestContext* context, const IsolationInfo& isolation_info, std::optional net_log_source, + const std::optional& original_request_initiator, RegistrationFetcher::RegistrationCompleteCallback callback) : fetcher_endpoint_(fetcher_endpoint), session_identifier_(std::move(session_identifier)), @@ -218,6 +220,7 @@ class RegistrationFetcherImpl : public URLRequest::Delegate { context_(context), isolation_info_(isolation_info), net_log_source_(std::move(net_log_source)), + original_request_initiator_(original_request_initiator), callback_(std::move(callback)), buf_(base::MakeRefCounted(kBufferSize)) {} @@ -300,8 +303,7 @@ class RegistrationFetcherImpl : public URLRequest::Delegate { request->set_allow_credentials(true); request->set_site_for_cookies(isolation_info_.site_for_cookies()); - // TODO(kristianm): Set initiator to the URL of the registration header. - request->set_initiator(url::Origin()); + request->set_initiator(original_request_initiator_); request->set_isolation_info(isolation_info_); if (session_identifier_.has_value()) { @@ -380,6 +382,7 @@ class RegistrationFetcherImpl : public URLRequest::Delegate { raw_ptr context_; IsolationInfo isolation_info_; std::optional net_log_source_; + std::optional original_request_initiator_; RegistrationFetcher::RegistrationCompleteCallback callback_; // Created to fetch data @@ -393,7 +396,7 @@ class RegistrationFetcherImpl : public URLRequest::Delegate { size_t number_of_challenges_ = 0; }; -RegistrationFetcher::FetcherType g_mock_fetcher = nullptr; +RegistrationFetcher::FetcherType* g_mock_fetcher = nullptr; } // namespace @@ -421,10 +424,11 @@ void RegistrationFetcher::StartCreateTokenAndFetch( const URLRequestContext* context, const IsolationInfo& isolation_info, std::optional net_log_source, + const std::optional& original_request_initiator, RegistrationCompleteCallback callback) { // Using mock fetcher for testing if (g_mock_fetcher) { - std::move(callback).Run(g_mock_fetcher()); + std::move(callback).Run(g_mock_fetcher->Run()); return; } @@ -437,7 +441,8 @@ void RegistrationFetcher::StartCreateTokenAndFetch( supported_algos, kTaskPriority, base::BindOnce(&RegistrationFetcher::StartFetchWithExistingKey, std::move(request_params), std::ref(key_service), context, - isolation_info, net_log_source, std::move(callback))); + isolation_info, net_log_source, original_request_initiator, + std::move(callback))); } // static @@ -447,12 +452,13 @@ void RegistrationFetcher::StartFetchWithExistingKey( const URLRequestContext* context, const IsolationInfo& isolation_info, std::optional net_log_source, + const std::optional& original_request_initiator, RegistrationFetcher::RegistrationCompleteCallback callback, unexportable_keys::ServiceErrorOr key_id) { // Using mock fetcher for testing. if (g_mock_fetcher) { - std::move(callback).Run(g_mock_fetcher()); + std::move(callback).Run(g_mock_fetcher->Run()); return; } @@ -466,19 +472,15 @@ void RegistrationFetcher::StartFetchWithExistingKey( request_params.TakeRegistrationEndpoint(), request_params.TakeSessionIdentifier(), unexportable_key_service, key_id.value(), context, isolation_info, net_log_source, - std::move(callback)); + original_request_initiator, std::move(callback)); fetcher->Start(request_params.TakeChallenge(), request_params.TakeAuthorization()); } -void RegistrationFetcher::SetFetcherForTesting(FetcherType func) { - if (g_mock_fetcher) { - CHECK(!func); - g_mock_fetcher = nullptr; - } else { - g_mock_fetcher = func; - } +void RegistrationFetcher::SetFetcherForTesting(FetcherType* func) { + CHECK(!g_mock_fetcher || !func); + g_mock_fetcher = func; } void RegistrationFetcher::CreateTokenAsyncForTesting( diff --git a/naiveproxy/src/net/device_bound_sessions/registration_fetcher.h b/naiveproxy/src/net/device_bound_sessions/registration_fetcher.h index 409117f8d8..b569842f38 100644 --- a/naiveproxy/src/net/device_bound_sessions/registration_fetcher.h +++ b/naiveproxy/src/net/device_bound_sessions/registration_fetcher.h @@ -56,7 +56,8 @@ class NET_EXPORT RegistrationFetcher { using RegistrationCompleteCallback = base::OnceCallback)>; - using FetcherType = std::optional (*)(); + using FetcherType = + base::RepeatingCallback()>; // TODO(kristianm): Add more parameters when the returned JSON is parsed. struct NET_EXPORT RegistrationTokenResult { @@ -76,6 +77,7 @@ class NET_EXPORT RegistrationFetcher { const URLRequestContext* context, const IsolationInfo& isolation_info, std::optional net_log_source, + const std::optional& original_request_initiator, RegistrationCompleteCallback callback); // Starts the network request to the DBSC refresh endpoint with existing key @@ -88,6 +90,7 @@ class NET_EXPORT RegistrationFetcher { const URLRequestContext* context, const IsolationInfo& isolation_info, std::optional net_log_source, + const std::optional& original_request_initiator, RegistrationCompleteCallback callback, unexportable_keys::ServiceErrorOr key_id); @@ -104,7 +107,7 @@ class NET_EXPORT RegistrationFetcher { void(std::optional)> callback); - static void SetFetcherForTesting(FetcherType); + static void SetFetcherForTesting(FetcherType* fetcher); }; } // namespace net::device_bound_sessions diff --git a/naiveproxy/src/net/device_bound_sessions/registration_fetcher_param.cc b/naiveproxy/src/net/device_bound_sessions/registration_fetcher_param.cc index e2233a3e08..aece5a6e2d 100644 --- a/naiveproxy/src/net/device_bound_sessions/registration_fetcher_param.cc +++ b/naiveproxy/src/net/device_bound_sessions/registration_fetcher_param.cc @@ -93,6 +93,10 @@ std::optional RegistrationFetcherParam::ParseItem( path, base::UnescapeRule::PATH_SEPARATORS | base::UnescapeRule::URL_SPECIAL_CHARS_EXCEPT_PATH_SEPARATORS); + // Registration endpoint can be a full URL (samesite with request origin) + // or a relative URL, starting with a "/" to make it origin-relative, + // and starting with anything else making it current-path-relative to + // request URL. GURL candidate_endpoint = request_url.Resolve(unescaped); if (candidate_endpoint.is_valid() && net::SchemefulSite(candidate_endpoint) == diff --git a/naiveproxy/src/net/device_bound_sessions/session.cc b/naiveproxy/src/net/device_bound_sessions/session.cc index 2055849015..d1b82cd270 100644 --- a/naiveproxy/src/net/device_bound_sessions/session.cc +++ b/naiveproxy/src/net/device_bound_sessions/session.cc @@ -6,6 +6,7 @@ #include +#include "base/strings/escape.h" #include "components/unexportable_keys/unexportable_key_id.h" #include "net/base/registry_controlled_domains/registry_controlled_domain.h" #include "net/cookies/canonical_cookie.h" @@ -50,12 +51,8 @@ Session::~Session() = default; // static std::unique_ptr Session::CreateIfValid(const SessionParams& params, GURL url) { - GURL refresh(params.refresh_url); - if (!refresh.is_valid()) { - return nullptr; - } - - if (params.session_id.empty()) { + if (!url.is_valid() || params.session_id.empty() || + params.refresh_url.empty()) { return nullptr; } @@ -69,8 +66,22 @@ std::unique_ptr Session::CreateIfValid(const SessionParams& params, return nullptr; } - std::unique_ptr session( - new Session(Id(params.session_id), url::Origin::Create(url), refresh)); + // The refresh endpoint can be a full URL (samesite with request origin) + // or a relative URL, starting with a "/" to make it origin-relative, + // and starting with anything else making it current-path-relative to + // request URL. + std::string unescaped_refresh_url = base::UnescapeURLComponent( + params.refresh_url, + base::UnescapeRule::PATH_SEPARATORS | + base::UnescapeRule::URL_SPECIAL_CHARS_EXCEPT_PATH_SEPARATORS); + GURL refresh_endpoint = url.Resolve(unescaped_refresh_url); + if (!refresh_endpoint.is_valid() || + net::SchemefulSite(refresh_endpoint) != net::SchemefulSite(url)) { + return nullptr; + } + std::unique_ptr session(new Session(Id(params.session_id), + url::Origin::Create(url), + std::move(refresh_endpoint))); for (const auto& spec : params.scope.specifications) { if (!spec.domain.empty() && !spec.path.empty()) { const auto inclusion_result = @@ -171,8 +182,7 @@ proto::Session Session::ToProto() const { } bool Session::ShouldDeferRequest(URLRequest* request) const { - if (inclusion_rules_.EvaluateRequestUrl(request->url()) == - SessionInclusionRules::kExclude) { + if (!IncludesUrl(request->url())) { // Request is not in scope for this session. return false; } @@ -292,7 +302,7 @@ bool Session::ShouldDeferRequest(URLRequest* request) const { } bool Session::IsEqualForTesting(const Session& other) const { - if (!base::ranges::equal( + if (!std::ranges::equal( cookie_cravings_, other.cookie_cravings_, [](const CookieCraving& lhs, const CookieCraving& rhs) { return lhs.IsEqualForTesting(rhs); // IN-TEST @@ -313,4 +323,9 @@ void Session::RecordAccess() { expiry_date_ = base::Time::Now() + kSessionTtl; } +bool Session::IncludesUrl(const GURL& url) const { + return inclusion_rules_.EvaluateRequestUrl(url) == + SessionInclusionRules::kInclude; +} + } // namespace net::device_bound_sessions diff --git a/naiveproxy/src/net/device_bound_sessions/session.h b/naiveproxy/src/net/device_bound_sessions/session.h index c96711b369..9626fdb2a4 100644 --- a/naiveproxy/src/net/device_bound_sessions/session.h +++ b/naiveproxy/src/net/device_bound_sessions/session.h @@ -89,6 +89,9 @@ class NET_EXPORT Session { // On use of a session, extend the TTL. void RecordAccess(); + // Whether the URL is in-scope for the session. + bool IncludesUrl(const GURL& url) const; + private: Session(Id id, url::Origin origin, GURL refresh); Session(Id id, diff --git a/naiveproxy/src/net/device_bound_sessions/session_access.cc b/naiveproxy/src/net/device_bound_sessions/session_access.cc new file mode 100644 index 0000000000..99a63ec1c8 --- /dev/null +++ b/naiveproxy/src/net/device_bound_sessions/session_access.cc @@ -0,0 +1,11 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "net/device_bound_sessions/session_access.h" + +namespace net::device_bound_sessions { + +bool SessionAccess::operator==(const SessionAccess& other) const = default; + +} // namespace net::device_bound_sessions diff --git a/naiveproxy/src/net/device_bound_sessions/session_access.h b/naiveproxy/src/net/device_bound_sessions/session_access.h new file mode 100644 index 0000000000..5348cc3c0b --- /dev/null +++ b/naiveproxy/src/net/device_bound_sessions/session_access.h @@ -0,0 +1,32 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef NET_DEVICE_BOUND_SESSIONS_SESSION_ACCESS_H_ +#define NET_DEVICE_BOUND_SESSIONS_SESSION_ACCESS_H_ + +#include "net/device_bound_sessions/session_key.h" + +namespace net::device_bound_sessions { + +// LINT.IfChange +struct NET_EXPORT SessionAccess { + enum class AccessType { + kCreation = 0, + kUpdate = 1, + kTermination = 2, + }; + + // Type of access + AccessType access_type; + + // Key of accessed session + SessionKey session_key; + + bool operator==(const SessionAccess& other) const; +}; +// LINT.ThenChange(//services/network/public/mojom/device_bound_sessions.mojom) + +} // namespace net::device_bound_sessions + +#endif // NET_DEVICE_BOUND_SESSIONS_SESSION_ACCESS_H_ diff --git a/naiveproxy/src/net/device_bound_sessions/session_challenge_param.cc b/naiveproxy/src/net/device_bound_sessions/session_challenge_param.cc index 6707e9902d..3da57e4728 100644 --- a/naiveproxy/src/net/device_bound_sessions/session_challenge_param.cc +++ b/naiveproxy/src/net/device_bound_sessions/session_challenge_param.cc @@ -4,7 +4,8 @@ #include "net/device_bound_sessions/session_challenge_param.h" -#include "base/ranges/algorithm.h" +#include + #include "net/http/http_response_headers.h" #include "url/gurl.h" @@ -49,7 +50,7 @@ std::optional SessionChallengeParam::ParseItem( } std::optional session_id; - if (auto it = base::ranges::find( + if (auto it = std::ranges::find( session_challenge.params, kSessionIdKey, &std::pair::first); it != session_challenge.params.end()) { diff --git a/naiveproxy/src/net/device_bound_sessions/session_key.h b/naiveproxy/src/net/device_bound_sessions/session_key.h index deb149c341..fdcd28ab9d 100644 --- a/naiveproxy/src/net/device_bound_sessions/session_key.h +++ b/naiveproxy/src/net/device_bound_sessions/session_key.h @@ -11,6 +11,7 @@ namespace net::device_bound_sessions { // Unique identifier for a `Session`. +// LINT.IfChange struct NET_EXPORT SessionKey { using Id = base::StrongAlias; @@ -30,6 +31,7 @@ struct NET_EXPORT SessionKey { bool operator==(const SessionKey& other) const; bool operator<(const SessionKey& other) const; }; +// LINT.ThenChange(//services/network/public/mojom/device_bound_sessions.mojom) } // namespace net::device_bound_sessions diff --git a/naiveproxy/src/net/device_bound_sessions/session_service.h b/naiveproxy/src/net/device_bound_sessions/session_service.h index 5072d027be..5fd30a3e5c 100644 --- a/naiveproxy/src/net/device_bound_sessions/session_service.h +++ b/naiveproxy/src/net/device_bound_sessions/session_service.h @@ -8,9 +8,11 @@ #include #include "base/functional/callback_forward.h" +#include "base/functional/callback_helpers.h" #include "net/base/net_export.h" #include "net/device_bound_sessions/registration_fetcher_param.h" #include "net/device_bound_sessions/session.h" +#include "net/device_bound_sessions/session_access.h" #include "net/device_bound_sessions/session_challenge_param.h" #include "net/device_bound_sessions/session_key.h" #include "net/log/net_log_with_source.h" @@ -28,7 +30,7 @@ namespace net::device_bound_sessions { class NET_EXPORT SessionService { public: using RefreshCompleteCallback = base::OnceClosure; - using OnAccessCallback = base::RepeatingCallback; + using OnAccessCallback = base::RepeatingCallback; // Returns nullptr if unexportable key provider is not supported by the // platform or the device. @@ -49,11 +51,14 @@ class NET_EXPORT SessionService { // header. // `net_log` is the log corresponding to the request receiving the // Sec-Session-Registration header. + // 'original_request_initiator` was the initiator for the request that + // received the Sec-Session-Registration header. virtual void RegisterBoundSession( OnAccessCallback on_access_callback, RegistrationFetcherParam registration_params, const IsolationInfo& isolation_info, - const NetLogWithSource& net_log) = 0; + const NetLogWithSource& net_log, + const std::optional& original_request_initiator) = 0; // Check if a request should be deferred due to the session cookie being // missing. This should only be called once the request has the correct @@ -89,9 +94,12 @@ class NET_EXPORT SessionService { virtual void GetAllSessionsAsync( base::OnceCallback&)> callback) = 0; - // Delete the session matching `key`. - virtual void DeleteSession(const SchemefulSite& site, - const Session::Id& id) = 0; + // Delete the session on `site` with `id`, notifying + // `per_request_callback` about any deletions. + virtual void DeleteSessionAndNotify( + const SchemefulSite& site, + const Session::Id& id, + SessionService::OnAccessCallback per_request_callback) = 0; // Delete all sessions that match the filtering arguments. See // `device_bound_sessions.mojom` for details on the filtering logic. @@ -101,6 +109,13 @@ class NET_EXPORT SessionService { base::RepeatingCallback site_matcher, base::OnceClosure completion_callback) = 0; + // Add an observer for session changes that include `url`. `callback` + // will only be notified until the destruction of the returned + // `ScopedClosureRunner`. + virtual base::ScopedClosureRunner AddObserver( + const GURL& url, + base::RepeatingCallback callback) = 0; + protected: SessionService() = default; }; diff --git a/naiveproxy/src/net/device_bound_sessions/session_service_impl.cc b/naiveproxy/src/net/device_bound_sessions/session_service_impl.cc index 8ad1e43787..e334f35165 100644 --- a/naiveproxy/src/net/device_bound_sessions/session_service_impl.cc +++ b/naiveproxy/src/net/device_bound_sessions/session_service_impl.cc @@ -19,16 +19,6 @@ namespace net::device_bound_sessions { namespace { -void NotifySessionAccess(SessionService::OnAccessCallback callback, - const SchemefulSite& site, - const Session::Id& session_id) { - if (callback.is_null()) { - return; - } - - callback.Run({site, session_id}); -} - bool SessionMatchesFilter( const SchemefulSite& site, const Session& session, @@ -93,7 +83,8 @@ void SessionServiceImpl::RegisterBoundSession( OnAccessCallback on_access_callback, RegistrationFetcherParam registration_params, const IsolationInfo& isolation_info, - const NetLogWithSource& net_log) { + const NetLogWithSource& net_log, + const std::optional& original_request_initiator) { net::NetLogSource net_log_source_for_registration = net::NetLogSource( net::NetLogSourceType::URL_REQUEST, net::NetLog::Get()->NextID()); net_log.AddEventReferencingSource( @@ -103,11 +94,18 @@ void SessionServiceImpl::RegisterBoundSession( RegistrationFetcher::StartCreateTokenAndFetch( std::move(registration_params), key_service_.get(), context_.get(), isolation_info, net_log_source_for_registration, + original_request_initiator, base::BindOnce(&SessionServiceImpl::OnRegistrationComplete, weak_factory_.GetWeakPtr(), std::move(on_access_callback))); } +SessionServiceImpl::Observer::Observer( + const GURL& url, + base::RepeatingCallback callback) + : url(url), callback(callback) {} +SessionServiceImpl::Observer::~Observer() = default; + void SessionServiceImpl::OnLoadSessionsComplete( SessionStore::SessionsMap sessions) { unpartitioned_sessions_.merge(sessions); @@ -133,8 +131,7 @@ void SessionServiceImpl::OnRegistrationComplete( const SessionTerminationParams& termination_params = std::get(params->params); Session::Id session_id(termination_params.session_id); - DeleteSession(site, session_id); - NotifySessionAccess(on_access_callback, site, session_id); + DeleteSessionAndNotify(site, session_id, on_access_callback); return; } @@ -146,7 +143,8 @@ void SessionServiceImpl::OnRegistrationComplete( } session->set_unexportable_key_id(std::move(params->key_id)); - NotifySessionAccess(on_access_callback, site, session->id()); + NotifySessionAccess(on_access_callback, SessionAccess::AccessType::kCreation, + site, *session); AddSession(site, std::move(session)); } @@ -158,7 +156,9 @@ SessionServiceImpl::GetSessionsForSite(const SchemefulSite& site) { auto [begin, end] = unpartitioned_sessions_.equal_range(site); for (auto it = begin; it != end;) { if (now >= it->second->expiry_date()) { - it = DeleteSessionInternal(it); + // Since this deletion is not due to a request, we do not need to + // provide a per-request callback here. + it = DeleteSessionAndNotifyInternal(it, base::NullCallback()); } else { it->second->RecordAccess(); it++; @@ -174,8 +174,9 @@ std::optional SessionServiceImpl::GetAnySessionRequiringDeferral( auto range = GetSessionsForSite(site); for (auto it = range.first; it != range.second; ++it) { if (it->second->ShouldDeferRequest(request)) { - NotifySessionAccess(request->device_bound_session_access_callback(), site, - it->second->id()); + NotifySessionAccess(request->device_bound_session_access_callback(), + SessionAccess::AccessType::kUpdate, site, + *it->second); return it->second->id(); } } @@ -212,8 +213,8 @@ void SessionServiceImpl::DeferRequestForRefresh( return; } // Notify the request that it has been deferred for refreshed cookies. - NotifySessionAccess(request->device_bound_session_access_callback(), site, - session->id()); + NotifySessionAccess(request->device_bound_session_access_callback(), + SessionAccess::AccessType::kUpdate, site, *session); // Do refresh the session. if (needs_refresh) { const Session::KeyIdOrError& key_id = session->unexportable_key_id(); @@ -235,7 +236,7 @@ void SessionServiceImpl::DeferRequestForRefresh( RegistrationFetcher::StartFetchWithExistingKey( RegistrationRequestParam::Create(*session), key_service_.get(), context_.get(), request->isolation_info(), net_log_source_for_refresh, - std::move(callback), *key_id); + request->initiator(), std::move(callback), *key_id); } } @@ -264,8 +265,7 @@ void SessionServiceImpl::OnRefreshRequestCompletion( Session::Id new_session_id(termination_params.session_id); // Only delete the session requested by the server. - DeleteSession(site, new_session_id); - NotifySessionAccess(on_access_callback, site, new_session_id); + DeleteSessionAndNotify(site, new_session_id, on_access_callback); return; } @@ -276,11 +276,16 @@ void SessionServiceImpl::OnRefreshRequestCompletion( if (new_session) { new_session->set_unexportable_key_id(std::move(refresh_result->key_id)); // Delete old session. - DeleteSession(site, session_id); + DeleteSessionAndNotify(site, session_id, + new_session->id() == session_id + ? base::NullCallback() + : on_access_callback); // Add the new session. SchemefulSite new_site(url::Origin::Create(refresh_result->url)); if (new_session->id() != session_id) { - NotifySessionAccess(on_access_callback, new_site, new_session->id()); + NotifySessionAccess(on_access_callback, + SessionAccess::AccessType::kCreation, new_site, + *new_session); } AddSession(new_site, std::move(new_session)); // The session has been refreshed, restart the request. @@ -293,7 +298,7 @@ void SessionServiceImpl::OnRefreshRequestCompletion( // 1. Clear the existing session which initiated the refresh flow. // 2. continue all deferred requests. // TODO(crbug.com/353766139): Do we need a retry mechanism? - DeleteSession(site, session_id); + DeleteSessionAndNotify(site, session_id, on_access_callback); UnblockDeferredRequests(session_id, /*is_cookie_refreshed=*/false); } @@ -330,7 +335,9 @@ void SessionServiceImpl::SetChallengeForBoundSession( auto range = GetSessionsForSite(site); for (auto it = range.first; it != range.second; ++it) { if (it->second->id().value() == param.session_id()) { - NotifySessionAccess(on_access_callback, site, it->second->id()); + NotifySessionAccess(on_access_callback, + SessionAccess::AccessType::kUpdate, site, + *it->second); it->second->set_cached_challenge(param.challenge()); return; } @@ -356,6 +363,19 @@ void SessionServiceImpl::GetAllSessionsAsync( } } +void SessionServiceImpl::DeleteSessionAndNotify( + const SchemefulSite& site, + const Session::Id& id, + SessionService::OnAccessCallback per_request_callback) { + auto range = unpartitioned_sessions_.equal_range(site); + for (auto it = range.first; it != range.second; ++it) { + if (it->second->id() == id) { + std::ignore = DeleteSessionAndNotifyInternal(it, per_request_callback); + return; + } + } +} + Session* SessionServiceImpl::GetSession(const SchemefulSite& site, const Session::Id& session_id) const { // Intentionally do not use `GetSessionsForSite` here so we do not @@ -379,17 +399,6 @@ void SessionServiceImpl::AddSession(const SchemefulSite& site, unpartitioned_sessions_.emplace(site, std::move(session)); } -void SessionServiceImpl::DeleteSession(const SchemefulSite& site, - const Session::Id& id) { - auto range = unpartitioned_sessions_.equal_range(site); - for (auto it = range.first; it != range.second; ++it) { - if (it->second->id() == id) { - std::ignore = DeleteSessionInternal(it); - return; - } - } -} - void SessionServiceImpl::DeleteAllSessions( std::optional created_after_time, std::optional created_before_time, @@ -399,7 +408,7 @@ void SessionServiceImpl::DeleteAllSessions( it != unpartitioned_sessions_.end();) { if (SessionMatchesFilter(it->first, *it->second, created_after_time, created_before_time, site_matcher)) { - it = DeleteSessionInternal(it); + it = DeleteSessionAndNotifyInternal(it, base::NullCallback()); } else { ++it; } @@ -408,15 +417,74 @@ void SessionServiceImpl::DeleteAllSessions( std::move(completion_callback).Run(); } +base::ScopedClosureRunner SessionServiceImpl::AddObserver( + const GURL& url, + base::RepeatingCallback callback) { + auto observer = std::make_unique(url, callback); + base::ScopedClosureRunner subscription(base::BindOnce( + &SessionServiceImpl::RemoveObserver, weak_factory_.GetWeakPtr(), + net::SchemefulSite(url), observer.get())); + observers_by_site_[net::SchemefulSite(url)].insert(std::move(observer)); + return subscription; +} + SessionServiceImpl::SessionsMap::iterator -SessionServiceImpl::DeleteSessionInternal( - SessionServiceImpl::SessionsMap::iterator it) { +SessionServiceImpl::DeleteSessionAndNotifyInternal( + SessionServiceImpl::SessionsMap::iterator it, + SessionService::OnAccessCallback per_request_callback) { if (session_store_) { session_store_->DeleteSession(it->first, it->second->id()); } + NotifySessionAccess(per_request_callback, + SessionAccess::AccessType::kTermination, it->first, + *it->second); + // TODO(crbug.com/353774923): Clear BFCache entries for this session. return unpartitioned_sessions_.erase(it); } +void SessionServiceImpl::NotifySessionAccess( + SessionService::OnAccessCallback per_request_callback, + SessionAccess::AccessType access_type, + const SchemefulSite& site, + const Session& session) { + SessionAccess access{access_type, {site, session.id()}}; + if (per_request_callback) { + per_request_callback.Run(access); + } + + auto observers_it = observers_by_site_.find(site); + if (observers_it == observers_by_site_.end()) { + return; + } + + for (const auto& observer : observers_it->second) { + if (session.IncludesUrl(observer->url)) { + observer->callback.Run(access); + } + } +} + +void SessionServiceImpl::RemoveObserver(net::SchemefulSite site, + Observer* observer) { + auto observers_it = observers_by_site_.find(site); + if (observers_it == observers_by_site_.end()) { + return; + } + + ObserverSet& observers = observers_it->second; + + auto it = observers.find(observer); + if (it == observers.end()) { + return; + } + + observers.erase(it); + + if (observers.empty()) { + observers_by_site_.erase(observers_it); + } +} + } // namespace net::device_bound_sessions diff --git a/naiveproxy/src/net/device_bound_sessions/session_service_impl.h b/naiveproxy/src/net/device_bound_sessions/session_service_impl.h index 1c784a6d9f..6747caf5b6 100644 --- a/naiveproxy/src/net/device_bound_sessions/session_service_impl.h +++ b/naiveproxy/src/net/device_bound_sessions/session_service_impl.h @@ -12,6 +12,8 @@ #include #include +#include "base/containers/unique_ptr_adapters.h" +#include "base/functional/callback.h" #include "base/memory/weak_ptr.h" #include "net/base/net_export.h" #include "net/device_bound_sessions/registration_fetcher.h" @@ -60,10 +62,12 @@ class NET_EXPORT SessionServiceImpl : public SessionService { // during construction. Otherwise, it is a no-op. void LoadSessionsAsync(); - void RegisterBoundSession(OnAccessCallback on_access_callback, - RegistrationFetcherParam registration_params, - const IsolationInfo& isolation_info, - const NetLogWithSource& net_log) override; + void RegisterBoundSession( + OnAccessCallback on_access_callback, + RegistrationFetcherParam registration_params, + const IsolationInfo& isolation_info, + const NetLogWithSource& net_log, + const std::optional& original_request_initiator) override; std::optional GetAnySessionRequiringDeferral( URLRequest* request) override; @@ -81,12 +85,18 @@ class NET_EXPORT SessionServiceImpl : public SessionService { void GetAllSessionsAsync( base::OnceCallback&)> callback) override; - void DeleteSession(const SchemefulSite& site, const Session::Id& id) override; + void DeleteSessionAndNotify( + const SchemefulSite& site, + const Session::Id& id, + SessionService::OnAccessCallback per_request_callback) override; void DeleteAllSessions( std::optional created_after_time, std::optional created_before_time, base::RepeatingCallback site_matcher, base::OnceClosure completion_callback) override; + base::ScopedClosureRunner AddObserver( + const GURL& url, + base::RepeatingCallback callback) override; Session* GetSession(const SchemefulSite& site, const Session::Id& session_id) const; @@ -99,6 +109,22 @@ class NET_EXPORT SessionServiceImpl : public SessionService { std::unordered_map>; + struct Observer { + Observer(const GURL& url, + base::RepeatingCallback callback); + + Observer(const Observer&) = delete; + Observer& operator=(const Observer&) = delete; + + ~Observer(); + + GURL url; + base::RepeatingCallback callback; + }; + + using ObserverSet = + std::set, base::UniquePtrComparator>; + void OnLoadSessionsComplete(SessionsMap sessions); void OnRegistrationComplete( @@ -119,11 +145,25 @@ class NET_EXPORT SessionServiceImpl : public SessionService { std::pair GetSessionsForSite( const SchemefulSite& site); - // Remove a session from the session map. It also clears the session from - // `session_store_` and any BFCache entries. + // Remove a session from the session map. It also clears the session + // from `session_store_` and notifies any observers (including + // `per_request_callback`) about the termination. // Return the iterator to the next session in the map. - [[nodiscard]] SessionsMap::iterator DeleteSessionInternal( - SessionsMap::iterator it); + [[nodiscard]] SessionsMap::iterator DeleteSessionAndNotifyInternal( + SessionsMap::iterator it, + SessionService::OnAccessCallback per_request_callback); + + // Notify all observers about an access to a session. Will update + // `per_request_callback` unconditionally, and any observers in + // `observers_` which have a URL in the scope of `session`. + void NotifySessionAccess( + SessionService::OnAccessCallback per_request_callback, + SessionAccess::AccessType access_type, + const SchemefulSite& site, + const Session& session); + + // Remove an observer by site and pointer. + void RemoveObserver(net::SchemefulSite site, Observer* observer); // Whether we are waiting on the initial load of saved sessions to complete. bool pending_initialization_ = false; @@ -140,6 +180,9 @@ class NET_EXPORT SessionServiceImpl : public SessionService { // Storage is similar to how CookieMonster stores its cookies. SessionsMap unpartitioned_sessions_; + // All observers of sessions. + std::map observers_by_site_; + base::WeakPtrFactory weak_factory_{this}; }; diff --git a/naiveproxy/src/net/device_bound_sessions/session_store_impl.cc b/naiveproxy/src/net/device_bound_sessions/session_store_impl.cc index 81a61dc49d..1e0b4f4884 100644 --- a/naiveproxy/src/net/device_bound_sessions/session_store_impl.cc +++ b/naiveproxy/src/net/device_bound_sessions/session_store_impl.cc @@ -65,7 +65,6 @@ SessionStoreImpl::SessionStoreImpl(base::FilePath db_storage_path, base::ThreadPool::CreateSequencedTaskRunner(kDBTaskTraits)), db_storage_path_(std::move(db_storage_path)), db_(std::make_unique( - sql::DatabaseOptions{.page_size = 4096, .cache_size = 500}, sql::Database::Tag("DBSCSessions"))), table_manager_(base::MakeRefCounted( db_task_runner_)), diff --git a/naiveproxy/src/net/device_bound_sessions/test_support.cc b/naiveproxy/src/net/device_bound_sessions/test_support.cc index 2c0fe1b44a..564f62b931 100644 --- a/naiveproxy/src/net/device_bound_sessions/test_support.cc +++ b/naiveproxy/src/net/device_bound_sessions/test_support.cc @@ -13,6 +13,7 @@ #include "base/json/json_writer.h" #include "base/strings/strcat.h" #include "base/strings/string_util.h" +#include "base/strings/stringprintf.h" #include "base/values.h" #include "crypto/signature_verifier.h" #include "net/test/embedded_test_server/http_request.h" @@ -59,6 +60,12 @@ std::unique_ptr RequestHandler( EXPECT_TRUE(json.has_value()); response->set_content(*json); return response; + } else if (request.relative_url == "/resource_triggered_dbsc_registration") { + response->set_content_type("text/html"); + response->set_content(base::StringPrintf( + R"*()*", + base_url.Resolve("/dbsc_required").spec())); + return response; } return nullptr; } @@ -258,4 +265,66 @@ bool VerifyEs256Jwt(std::string_view jwt) { return verifier.VerifyFinal(); } +#if BUILDFLAG(ENABLE_DEVICE_BOUND_SESSIONS) +// static +ScopedTestRegistrationFetcher ScopedTestRegistrationFetcher::CreateWithSuccess( + std::string_view session_id, + std::string_view refresh_url_string, + std::string_view origin_string) { + return ScopedTestRegistrationFetcher(base::BindRepeating( + [](const std::string& session_id, const std::string& refresh_url_string, + const std::string& origin_string) { + std::vector cookie_credentials; + cookie_credentials.push_back( + SessionParams::Credential{"test_cookie", "secure"}); + SessionParams::Scope scope; + scope.include_site = true; + scope.origin = origin_string; + SessionParams session_params(session_id, refresh_url_string, + std::move(scope), + std::move(cookie_credentials)); + unexportable_keys::UnexportableKeyId key_id; + return std::make_optional< + RegistrationFetcher::RegistrationCompleteParams>( + std::move(session_params), std::move(key_id), + GURL(refresh_url_string)); + }, + std::string(session_id), std::string(refresh_url_string), + std::string(origin_string))); +} + +// static +ScopedTestRegistrationFetcher +ScopedTestRegistrationFetcher::CreateWithFailure() { + return ScopedTestRegistrationFetcher(base::BindRepeating([]() { + return std::optional(); + })); +} + +// static +ScopedTestRegistrationFetcher +ScopedTestRegistrationFetcher::CreateWithTermination( + std::string_view session_id, + std::string_view refresh_url_string) { + return ScopedTestRegistrationFetcher(base::BindRepeating( + [](const std::string& session_id, const std::string& refresh_url_string) { + unexportable_keys::UnexportableKeyId key_id; + return std::make_optional< + RegistrationFetcher::RegistrationCompleteParams>( + SessionTerminationParams{session_id}, std::move(key_id), + GURL(refresh_url_string)); + }, + std::string(session_id), std::string(refresh_url_string))); +} + +ScopedTestRegistrationFetcher::ScopedTestRegistrationFetcher( + RegistrationFetcher::FetcherType fetcher) + : fetcher_(fetcher) { + RegistrationFetcher::SetFetcherForTesting(&fetcher_); +} +ScopedTestRegistrationFetcher::~ScopedTestRegistrationFetcher() { + RegistrationFetcher::SetFetcherForTesting(nullptr); +} +#endif // BUILDFLAG(ENABLE_DEVICE_BOUND_SESSIONS) + } // namespace net::device_bound_sessions diff --git a/naiveproxy/src/net/device_bound_sessions/test_support.h b/naiveproxy/src/net/device_bound_sessions/test_support.h index 29c9c7078a..56ec78a9b1 100644 --- a/naiveproxy/src/net/device_bound_sessions/test_support.h +++ b/naiveproxy/src/net/device_bound_sessions/test_support.h @@ -10,6 +10,8 @@ #include #include "base/containers/span.h" +#include "net/device_bound_sessions/registration_fetcher.h" +#include "net/net_buildflags.h" #include "net/test/embedded_test_server/embedded_test_server.h" #include "url/gurl.h" @@ -29,6 +31,37 @@ EmbeddedTestServer::HandleRequestCallback GetTestRequestHandler( // in its payload. bool VerifyEs256Jwt(std::string_view jwt); +#if BUILDFLAG(ENABLE_DEVICE_BOUND_SESSIONS) +// While this class is alive, session registration will always return a +// fixed value. +class ScopedTestRegistrationFetcher { + public: + // Creates a `ScopedTestRegistrationFetcher` that always succeeds at + // registering a session with the given `session_id`, + // `refresh_url_string`, and `origin_string`. + static ScopedTestRegistrationFetcher CreateWithSuccess( + std::string_view session_id, + std::string_view refresh_url_string, + std::string_view origin_string); + + // Creates a `ScopedTestRegistrationFetcher` that always fails to register + static ScopedTestRegistrationFetcher CreateWithFailure(); + + // Creates a `ScopedTestRegistrationFetcher` that always instructs + // Chrome to terminate the session with given id and site. + static ScopedTestRegistrationFetcher CreateWithTermination( + std::string_view session_id, + std::string_view refresh_url_string); + + explicit ScopedTestRegistrationFetcher( + RegistrationFetcher::FetcherType fetcher); + ~ScopedTestRegistrationFetcher(); + + private: + RegistrationFetcher::FetcherType fetcher_; +}; +#endif // BUILDFLAG(ENABLE_DEVICE_BOUND_SESSIONS) + } // namespace net::device_bound_sessions #endif // NET_DEVICE_BOUND_SESSIONS_TEST_SUPPORT_H_ diff --git a/naiveproxy/src/net/disk_cache/blockfile/backend_impl.cc b/naiveproxy/src/net/disk_cache/blockfile/backend_impl.cc index e45a7bc79f..6e516d8eab 100644 --- a/naiveproxy/src/net/disk_cache/blockfile/backend_impl.cc +++ b/naiveproxy/src/net/disk_cache/blockfile/backend_impl.cc @@ -10,6 +10,7 @@ #include "net/disk_cache/blockfile/backend_impl.h" #include +#include #include #include #include @@ -620,7 +621,7 @@ scoped_refptr BackendImpl::OpenNextEntryImpl( return nullptr; const int kListsToSearch = 3; - scoped_refptr entries[kListsToSearch]; + std::array, kListsToSearch> entries; if (!iterator->my_rankings) { iterator->my_rankings = &rankings_; bool ret = false; @@ -650,7 +651,7 @@ scoped_refptr BackendImpl::OpenNextEntryImpl( int newest = -1; int oldest = -1; - Time access_times[kListsToSearch]; + std::array access_times; for (int i = 0; i < kListsToSearch; i++) { if (entries[i].get()) { access_times[i] = entries[i]->GetLastUsed(); diff --git a/naiveproxy/src/net/disk_cache/blockfile/bitmap.cc b/naiveproxy/src/net/disk_cache/blockfile/bitmap.cc index 45a1bd860e..d304094b6f 100644 --- a/naiveproxy/src/net/disk_cache/blockfile/bitmap.cc +++ b/naiveproxy/src/net/disk_cache/blockfile/bitmap.cc @@ -139,10 +139,10 @@ void Bitmap::SetRange(int begin, int end, bool value) { SetWordBits(end, end_offset, value); // Set all the words in the middle. - base::ranges::fill(map_.subspan(base::checked_cast(begin / kIntBits), - base::checked_cast( - (end / kIntBits) - (begin / kIntBits))), - (value ? 0xFFFFFFFFu : 0x00u)); + std::ranges::fill(map_.subspan(base::checked_cast(begin / kIntBits), + base::checked_cast( + (end / kIntBits) - (begin / kIntBits))), + (value ? 0xFFFFFFFFu : 0x00u)); } // Return true if any bit between begin inclusive and end exclusive diff --git a/naiveproxy/src/net/disk_cache/blockfile/bitmap.h b/naiveproxy/src/net/disk_cache/blockfile/bitmap.h index ae72de65e3..f49e112278 100644 --- a/naiveproxy/src/net/disk_cache/blockfile/bitmap.h +++ b/naiveproxy/src/net/disk_cache/blockfile/bitmap.h @@ -8,10 +8,11 @@ #include #include +#include + #include "base/containers/heap_array.h" #include "base/containers/span.h" #include "base/memory/raw_span.h" -#include "base/ranges/algorithm.h" #include "net/base/net_export.h" namespace disk_cache { @@ -52,7 +53,7 @@ class NET_EXPORT_PRIVATE Bitmap { // Sets all the bits to true or false. void SetAll(bool value) { - base::ranges::fill(map_, (value ? 0xFFFFFFFFu : 0x00u)); + std::ranges::fill(map_, (value ? 0xFFFFFFFFu : 0x00u)); } // Clears all bits in the bitmap diff --git a/naiveproxy/src/net/disk_cache/blockfile/block_files.cc b/naiveproxy/src/net/disk_cache/blockfile/block_files.cc index 709c0e8854..b49cf37f78 100644 --- a/naiveproxy/src/net/disk_cache/blockfile/block_files.cc +++ b/naiveproxy/src/net/disk_cache/blockfile/block_files.cc @@ -9,6 +9,7 @@ #include "net/disk_cache/blockfile/block_files.h" +#include #include #include #include @@ -32,7 +33,9 @@ const char kBlockName[] = "data_"; // This array is used to perform a fast lookup of the nibble bit pattern to the // type of entry that can be stored there (number of consecutive blocks). -const char s_types[16] = {4, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}; +const std::array s_types = { + 4, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, +}; // Returns the type of block (number of consecutive blocks that can be stored) // for a given nibble of the bitmap. diff --git a/naiveproxy/src/net/disk_cache/blockfile/disk_format.cc b/naiveproxy/src/net/disk_cache/blockfile/disk_format.cc index 4f785c9172..4830a94a55 100644 --- a/naiveproxy/src/net/disk_cache/blockfile/disk_format.cc +++ b/naiveproxy/src/net/disk_cache/blockfile/disk_format.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "net/disk_cache/blockfile/disk_format.h" namespace disk_cache { diff --git a/naiveproxy/src/net/disk_cache/blockfile/stats.cc b/naiveproxy/src/net/disk_cache/blockfile/stats.cc index 92359d119e..b90eed05a2 100644 --- a/naiveproxy/src/net/disk_cache/blockfile/stats.cc +++ b/naiveproxy/src/net/disk_cache/blockfile/stats.cc @@ -9,6 +9,7 @@ #include "net/disk_cache/blockfile/stats.h" +#include #include #include @@ -30,30 +31,16 @@ struct OnDiskStats { static_assert(sizeof(OnDiskStats) < 512, "needs more than 2 blocks"); // WARNING: Add new stats only at the end, or change LoadStats(). -const char* const kCounterNames[] = { - "Open miss", - "Open hit", - "Create miss", - "Create hit", - "Resurrect hit", - "Create error", - "Trim entry", - "Doom entry", - "Doom cache", - "Invalid entry", - "Open entries", - "Max entries", - "Timer", - "Read data", - "Write data", - "Open rankings", - "Get rankings", - "Fatal error", - "Last report", - "Last report timer", - "Doom recent entries", - "unused" -}; +const auto kCounterNames = std::to_array({ + "Open miss", "Open hit", "Create miss", + "Create hit", "Resurrect hit", "Create error", + "Trim entry", "Doom entry", "Doom cache", + "Invalid entry", "Open entries", "Max entries", + "Timer", "Read data", "Write data", + "Open rankings", "Get rankings", "Fatal error", + "Last report", "Last report timer", "Doom recent entries", + "unused", +}); static_assert(std::size(kCounterNames) == disk_cache::Stats::MAX_COUNTER, "update the names"); diff --git a/naiveproxy/src/net/disk_cache/memory/mem_entry_impl.cc b/naiveproxy/src/net/disk_cache/memory/mem_entry_impl.cc index 433d78aa61..4fef733053 100644 --- a/naiveproxy/src/net/disk_cache/memory/mem_entry_impl.cc +++ b/naiveproxy/src/net/disk_cache/memory/mem_entry_impl.cc @@ -2,11 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifdef UNSAFE_BUFFERS_BUILD -// TODO(crbug.com/40284755): Remove this and spanify to fix the errors. -#pragma allow_unsafe_buffers -#endif - #include "net/disk_cache/memory/mem_entry_impl.h" #include @@ -338,6 +333,7 @@ int MemEntryImpl::InternalReadData(int index, int offset, IOBuffer* buf, int entry_size = data_[index].size(); if (offset >= entry_size || offset < 0 || !buf_len) return 0; + unsigned u_offset = static_cast(offset); int end_offset; if (!base::CheckAdd(offset, buf_len).AssignIfValid(&end_offset) || @@ -345,8 +341,9 @@ int MemEntryImpl::InternalReadData(int index, int offset, IOBuffer* buf, buf_len = entry_size - offset; UpdateStateOnUse(ENTRY_WAS_NOT_MODIFIED); - std::copy(data_[index].begin() + offset, - data_[index].begin() + offset + buf_len, buf->data()); + buf->span().copy_prefix_from( + base::as_byte_span(data_[index]) + .subspan(u_offset, base::checked_cast(buf_len))); return buf_len; } @@ -362,6 +359,9 @@ int MemEntryImpl::InternalWriteData(int index, int offset, IOBuffer* buf, if (offset < 0 || buf_len < 0) return net::ERR_INVALID_ARGUMENT; + unsigned u_offset = static_cast(offset); + unsigned u_buf_len = static_cast(buf_len); + const int max_file_size = backend_->MaxFileSize(); int end_offset; @@ -371,13 +371,23 @@ int MemEntryImpl::InternalWriteData(int index, int offset, IOBuffer* buf, return net::ERR_FAILED; } + // Trim to the portion of the buffer we're actually asked to work on. + // We need to be careful here since `buf` may be null if the length is 0; + // this may still affect the file if it gets truncated or extended. + base::span to_write; + if (buf) { + to_write = buf->span().first(u_buf_len); + } + std::vector& data = data_[index]; const int old_data_size = base::checked_cast(data.size()); // Overwrite any data that fits inside the existing file. - if (offset < old_data_size && buf_len > 0) { - const int bytes_to_copy = std::min(old_data_size - offset, buf_len); - std::copy(buf->data(), buf->data() + bytes_to_copy, data.begin() + offset); + if (u_offset < data.size() && !to_write.empty()) { + auto overwrite_chunk = + to_write.first(std::min(data.size() - u_offset, to_write.size())); + base::as_writable_byte_span(data).subspan(u_offset).copy_prefix_from( + overwrite_chunk); } const int delta = end_offset - old_data_size; @@ -401,8 +411,10 @@ int MemEntryImpl::InternalWriteData(int index, int offset, IOBuffer* buf, } // Append any data after the old end of the file. if (end_offset > current_size) { - data.insert(data.end(), buf->data() + current_size - offset, - buf->data() + buf_len); + auto append_chunk = + to_write.subspan(base::checked_cast(current_size - offset)); + + data.insert(data.end(), append_chunk.begin(), append_chunk.end()); } } diff --git a/naiveproxy/src/net/disk_cache/memory/mem_entry_impl.h b/naiveproxy/src/net/disk_cache/memory/mem_entry_impl.h index a9c48e1879..8f23a72c5a 100644 --- a/naiveproxy/src/net/disk_cache/memory/mem_entry_impl.h +++ b/naiveproxy/src/net/disk_cache/memory/mem_entry_impl.h @@ -181,7 +181,7 @@ class NET_EXPORT_PRIVATE MemEntryImpl final void Compact(); std::string key_; - std::vector data_[kNumStreams]; // User data. + std::array, kNumStreams> data_; // User data. uint32_t ref_count_ = 0; int64_t child_id_; // The ID of a child entry. diff --git a/naiveproxy/src/net/disk_cache/simple/simple_entry_format.cc b/naiveproxy/src/net/disk_cache/simple/simple_entry_format.cc index 72d1bf90d8..de2616cf50 100644 --- a/naiveproxy/src/net/disk_cache/simple/simple_entry_format.cc +++ b/naiveproxy/src/net/disk_cache/simple/simple_entry_format.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "net/disk_cache/simple/simple_entry_format.h" #include diff --git a/naiveproxy/src/net/disk_cache/simple/simple_entry_impl.cc b/naiveproxy/src/net/disk_cache/simple/simple_entry_impl.cc index b9c4814f39..1e82e1caec 100644 --- a/naiveproxy/src/net/disk_cache/simple/simple_entry_impl.cc +++ b/naiveproxy/src/net/disk_cache/simple/simple_entry_impl.cc @@ -2,11 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifdef UNSAFE_BUFFERS_BUILD -// TODO(crbug.com/40284755): Remove this and spanify to fix the errors. -#pragma allow_unsafe_buffers -#endif - #include "net/disk_cache/simple/simple_entry_impl.h" #include @@ -154,14 +149,14 @@ SimpleEntryImpl::SimpleEntryImpl( net::NetLogSourceType::DISK_CACHE_ENTRY)), stream_0_data_(base::MakeRefCounted()), entry_priority_(entry_priority) { - static_assert(std::extent() == - std::extent(), + static_assert(std::tuple_size() == + std::tuple_size(), "arrays should be the same size"); - static_assert( - std::extent() == std::extent(), - "arrays should be the same size"); - static_assert(std::extent() == - std::extent(), + static_assert(std::tuple_size() == + std::tuple_size(), + "arrays should be the same size"); + static_assert(std::tuple_size() == + std::tuple_size(), "arrays should be the same size"); ResetEntry(); NetLogSimpleEntryConstruction(net_log_, @@ -445,6 +440,7 @@ int SimpleEntryImpl::WriteData(int stream_index, } return net::ERR_INVALID_ARGUMENT; } + int end_offset; if (!base::CheckAdd(offset, buf_len).AssignIfValid(&end_offset) || (backend_.get() && end_offset > backend_->MaxFileSize())) { @@ -490,7 +486,9 @@ int SimpleEntryImpl::WriteData(int stream_index, // operations. if (buf) { op_buf = base::MakeRefCounted(buf_len); - std::copy(buf->data(), buf->data() + buf_len, op_buf->data()); + // Note: buf_len >= 0 per check at function entry. + op_buf->span().copy_from( + buf->span().first(static_cast(buf_len))); } op_callback = CompletionOnceCallback(); ret_value = buf_len; @@ -658,10 +656,10 @@ void SimpleEntryImpl::ResetEntry() { // we no longer own the name and are disconnected from the active entry table. // We preserve doom_state_ accross this entry for this same reason. state_ = doom_state_ == DOOM_COMPLETED ? STATE_FAILURE : STATE_UNINITIALIZED; - std::memset(crc32s_end_offset_, 0, sizeof(crc32s_end_offset_)); - std::memset(crc32s_, 0, sizeof(crc32s_)); - std::memset(have_written_, 0, sizeof(have_written_)); - std::memset(data_size_, 0, sizeof(data_size_)); + std::ranges::fill(crc32s_end_offset_, 0); + std::ranges::fill(crc32s_, 0); + std::ranges::fill(have_written_, 0); + std::ranges::fill(data_size_, 0); } void SimpleEntryImpl::ReturnEntryToCaller() { @@ -1687,8 +1685,8 @@ void SimpleEntryImpl::ReadFromBuffer(net::GrowableIOBuffer* in_buf, net::IOBuffer* out_buf) { DCHECK_GE(buf_len, 0); - std::copy(in_buf->data() + offset, in_buf->data() + offset + buf_len, - out_buf->data()); + out_buf->span().copy_prefix_from(in_buf->span().subspan( + base::checked_cast(offset), base::checked_cast(buf_len))); UpdateDataFromEntryStat(SimpleEntryStat(base::Time::Now(), last_modified_, data_size_, sparse_data_size_)); } @@ -1706,7 +1704,8 @@ void SimpleEntryImpl::SetStream0Data(net::IOBuffer* buf, int data_size = GetDataSize(0); if (offset == 0 && truncate) { stream_0_data_->SetCapacity(buf_len); - std::copy(buf->data(), buf->data() + buf_len, stream_0_data_->data()); + stream_0_data_->span().copy_from( + buf->span().first(base::checked_cast(buf_len))); data_size_[0] = buf_len; } else { const int buffer_size = @@ -1716,12 +1715,16 @@ void SimpleEntryImpl::SetStream0Data(net::IOBuffer* buf, // zero-filled. const int fill_size = offset <= data_size ? 0 : offset - data_size; if (fill_size > 0) { - std::fill(stream_0_data_->data() + data_size, - stream_0_data_->data() + data_size + fill_size, 0); + std::ranges::fill( + stream_0_data_->span().subspan(base::checked_cast(data_size), + base::checked_cast(fill_size)), + 0); } if (buf) { - std::copy(buf->data(), buf->data() + buf_len, - stream_0_data_->data() + offset); + stream_0_data_->span() + .subspan(base::checked_cast(offset)) + .copy_prefix_from( + buf->span().first(base::checked_cast(buf_len))); } data_size_[0] = buffer_size; } diff --git a/naiveproxy/src/net/disk_cache/simple/simple_entry_impl.h b/naiveproxy/src/net/disk_cache/simple/simple_entry_impl.h index 69e2a9ae91..dc33f2ebe6 100644 --- a/naiveproxy/src/net/disk_cache/simple/simple_entry_impl.h +++ b/naiveproxy/src/net/disk_cache/simple/simple_entry_impl.h @@ -383,7 +383,7 @@ class NET_EXPORT_PRIVATE SimpleEntryImpl : public Entry, // TODO(clamy): Unify last_used_ with data in the index. base::Time last_used_; base::Time last_modified_; - int32_t data_size_[kSimpleEntryStreamCount]; + std::array data_size_; int32_t sparse_data_size_ = 0; // Number of times this object has been returned from Backend::OpenEntry() and @@ -409,12 +409,12 @@ class NET_EXPORT_PRIVATE SimpleEntryImpl : public Entry, // a single entry reader that reads serially through the entire file. // Extending this to multiple readers is possible, but isn't currently worth // it; see http://crbug.com/488076#c3 for details. - int32_t crc32s_end_offset_[kSimpleEntryStreamCount]; - uint32_t crc32s_[kSimpleEntryStreamCount]; + std::array crc32s_end_offset_; + std::array crc32s_; // If |have_written_[index]| is true, we have written to the file that // contains stream |index|. - bool have_written_[kSimpleEntryStreamCount]; + std::array have_written_; // The |synchronous_entry_| is the worker thread object that performs IO on // entries. It's owned by this SimpleEntryImpl whenever |executing_operation_| diff --git a/naiveproxy/src/net/disk_cache/simple/simple_file_tracker.cc b/naiveproxy/src/net/disk_cache/simple/simple_file_tracker.cc index eceabacf98..347b4af117 100644 --- a/naiveproxy/src/net/disk_cache/simple/simple_file_tracker.cc +++ b/naiveproxy/src/net/disk_cache/simple/simple_file_tracker.cc @@ -30,6 +30,12 @@ void RecordFileDescripterLimiterOp(FileDescriptorLimiterOp op) { } // namespace +bool SimpleFileTracker::TrackedFiles::InLRUList() const { + // Either both should be set, or neither. + DCHECK((next() && previous()) || (!next() && !previous())); + return next(); +} + SimpleFileTracker::SimpleFileTracker(int file_limit) : file_limit_(file_limit) {} @@ -37,6 +43,11 @@ SimpleFileTracker::~SimpleFileTracker() { DCHECK(lru_.empty()); DCHECK(tracked_files_.empty()); } +void SimpleFileTracker::TrackedFiles::RemoveIfLinked() { + if (InLRUList()) { + RemoveFromList(); + } +} void SimpleFileTracker::Register(const SimpleSynchronousEntry* owner, SubFile subfile, @@ -240,8 +251,7 @@ std::unique_ptr SimpleFileTracker::PrepareClose( auto iter = tracked_files_.find(owners_files->key.entry_hash); for (auto i = iter->second.begin(); i != iter->second.end(); ++i) { if ((*i).get() == owners_files) { - if (owners_files->in_lru) - lru_.erase(owners_files->position_in_lru); + owners_files->RemoveIfLinked(); iter->second.erase(i); break; } @@ -256,32 +266,30 @@ std::unique_ptr SimpleFileTracker::PrepareClose( void SimpleFileTracker::CloseFilesIfTooManyOpen( std::vector>* files_to_close) { - auto i = lru_.end(); - while (open_files_ > file_limit_ && i != lru_.begin()) { - --i; // Point to the actual entry. - TrackedFiles* tracked_files = *i; - DCHECK(tracked_files->in_lru); + TrackedFiles* node = lru_.tail()->value(); + while (open_files_ > file_limit_ && node != lru_.end()) { + // Grab the previous node *before* we possibly remove |node| from the list. + TrackedFiles* previous = node->previous()->value(); + DCHECK(node->InLRUList()); + // Close TF_REGISTERED subfiles for this node. for (int j = 0; j < kSimpleEntryTotalFileCount; ++j) { - if (tracked_files->state[j] == TrackedFiles::TF_REGISTERED && - tracked_files->files[j] != nullptr) { - files_to_close->push_back(std::move(tracked_files->files[j])); + if (node->state[j] == TrackedFiles::TF_REGISTERED && + node->files[j] != nullptr) { + files_to_close->push_back(std::move(node->files[j])); --open_files_; RecordFileDescripterLimiterOp(FD_LIMIT_CLOSE_FILE); } } - if (!tracked_files->HasOpenFiles()) { + if (!node->HasOpenFiles()) { // If there is nothing here that can possibly be closed, remove this from // LRU for now so we don't have to rescan it next time we are here. If the // files get re-opened (in Acquire), it will get added back in. - DCHECK_EQ(*tracked_files->position_in_lru, tracked_files); - DCHECK(i == tracked_files->position_in_lru); - // Note that we're erasing at i, which would make it invalid, so go back - // one element ahead to we can decrement from that on next iteration. - ++i; - lru_.erase(tracked_files->position_in_lru); - tracked_files->in_lru = false; + DCHECK(node->InLRUList()); + node->RemoveIfLinked(); } + // Move to the previous item in the list + node = previous; } } @@ -307,14 +315,17 @@ void SimpleFileTracker::ReopenFile(BackendFileOperations* file_operations, } void SimpleFileTracker::EnsureInFrontOfLRU(TrackedFiles* owners_files) { - if (!owners_files->in_lru) { - lru_.push_front(owners_files); - owners_files->position_in_lru = lru_.begin(); - owners_files->in_lru = true; - } else if (owners_files->position_in_lru != lru_.begin()) { - lru_.splice(lru_.begin(), lru_, owners_files->position_in_lru); + if (lru_.head() == owners_files) { + return; } - DCHECK_EQ(*owners_files->position_in_lru, owners_files); + owners_files->RemoveIfLinked(); + if (lru_.empty()) { + lru_.Append(owners_files); + } else { + auto* head = lru_.head()->value(); + owners_files->InsertBefore(head); + } + DCHECK_EQ(lru_.head(), owners_files); } SimpleFileTracker::FileHandle::FileHandle() = default; diff --git a/naiveproxy/src/net/disk_cache/simple/simple_file_tracker.h b/naiveproxy/src/net/disk_cache/simple/simple_file_tracker.h index 7d8e622636..1c03e13bb7 100644 --- a/naiveproxy/src/net/disk_cache/simple/simple_file_tracker.h +++ b/naiveproxy/src/net/disk_cache/simple/simple_file_tracker.h @@ -14,6 +14,7 @@ #include #include +#include "base/containers/linked_list.h" #include "base/files/file.h" #include "base/memory/raw_ptr.h" #include "base/synchronization/lock.h" @@ -140,7 +141,7 @@ class NET_EXPORT_PRIVATE SimpleFileTracker { bool IsEmptyForTesting(); private: - struct TrackedFiles { + struct TrackedFiles : public base::LinkNode { // We can potentially run through this state machine multiple times for // FILE_1, as that's often missing, so SimpleSynchronousEntry can sometimes // close and remove the file for an empty stream, then re-open it on actual @@ -163,6 +164,8 @@ class NET_EXPORT_PRIVATE SimpleFileTracker { // is still relevant. bool HasOpenFiles() const; + bool InLRUList() const; + void RemoveIfLinked(); // We use pointers to SimpleSynchronousEntry two ways: // 1) As opaque keys. This is handy as it avoids having to compare paths in // case multiple backends use the same key. Since we access the @@ -182,12 +185,6 @@ class NET_EXPORT_PRIVATE SimpleFileTracker { std::array, kSimpleEntryTotalFileCount> files; std::array state; - std::list>::iterator position_in_lru; - - // true if position_in_lru is valid. For entries where we closed everything, - // we try not to keep them in the LRU so that we don't have to constantly - // rescan them. - bool in_lru = false; }; // Marks the file that was previously returned by Acquire as eligible for @@ -219,10 +216,13 @@ class NET_EXPORT_PRIVATE SimpleFileTracker { base::Lock lock_; std::unordered_map>> tracked_files_; - std::list> lru_; - + // base::LinkedList (an intrusive linked list) is used instead of std::list to + // avoid allocating a separate node object for each TrackedFiles. In an + // intrusive list, the next/previous pointers are stored directly in + // TrackedFiles (via base::LinkNode), reducing overhead and improving + // performance for LRU operations. + base::LinkedList lru_; int file_limit_; - // How many actually open files we are using. // Note that when a thread commits to closing a file, but hasn't actually // executed the close yet, the file is no longer counted as open here, so this diff --git a/naiveproxy/src/net/disk_cache/simple/simple_index.cc b/naiveproxy/src/net/disk_cache/simple/simple_index.cc index 7c415cc269..dc6abd4934 100644 --- a/naiveproxy/src/net/disk_cache/simple/simple_index.cc +++ b/naiveproxy/src/net/disk_cache/simple/simple_index.cc @@ -612,10 +612,10 @@ void SimpleIndex::MergeInitializingSet( entries_set_.size(), 0, 100000, 50); SIMPLE_CACHE_UMA( MEMORY_KB, "CacheSizeOnInit", cache_type_, - static_cast(cache_size_ / kBytesInKb)); + static_cast(cache_size_ / kBytesInKb)); SIMPLE_CACHE_UMA( MEMORY_KB, "MaxCacheSizeOnInit", cache_type_, - static_cast(max_size_ / kBytesInKb)); + static_cast(max_size_ / kBytesInKb)); // Run all callbacks waiting for the index to come up. for (auto& callback : to_run_when_initialized_) { diff --git a/naiveproxy/src/net/disk_cache/simple/simple_synchronous_entry.cc b/naiveproxy/src/net/disk_cache/simple/simple_synchronous_entry.cc index 2de1be2084..e059943b26 100644 --- a/naiveproxy/src/net/disk_cache/simple/simple_synchronous_entry.cc +++ b/naiveproxy/src/net/disk_cache/simple/simple_synchronous_entry.cc @@ -9,6 +9,7 @@ #include "net/disk_cache/simple/simple_synchronous_entry.h" +#include #include #include #include @@ -26,7 +27,6 @@ #include "base/metrics/histogram_macros_local.h" #include "base/numerics/checked_math.h" #include "base/numerics/safe_conversions.h" -#include "base/ranges/algorithm.h" #include "base/task/sequenced_task_runner.h" #include "base/timer/elapsed_timer.h" #include "crypto/secure_hash.h" @@ -246,15 +246,15 @@ int GetSimpleCacheTrailerPrefetchSize(int hint_size) { return kSimpleCacheTrailerPrefetchSpeculativeBytes.Get(); } -SimpleEntryStat::SimpleEntryStat(base::Time last_used, - base::Time last_modified, - const int32_t data_size[], - const int32_t sparse_data_size) +SimpleEntryStat::SimpleEntryStat( + base::Time last_used, + base::Time last_modified, + const std::array& data_size, + const int32_t sparse_data_size) : last_used_(last_used), last_modified_(last_modified), - sparse_data_size_(sparse_data_size) { - memcpy(data_size_, data_size, sizeof(data_size_)); -} + data_size_(data_size), + sparse_data_size_(sparse_data_size) {} // These size methods all assume the presence of the SHA256 on stream zero, // since this version of the cache always writes it. In the read case, it may @@ -585,7 +585,7 @@ int SimpleSynchronousEntry::DeleteEntrySetFiles( std::unique_ptr unbound_file_operations) { auto file_operations = unbound_file_operations->Bind( base::SequencedTaskRunner::GetCurrentDefault()); - const size_t did_delete_count = base::ranges::count_if( + const size_t did_delete_count = std::ranges::count_if( *key_hashes, [&path, &file_operations](const uint64_t& key_hash) { return SimpleSynchronousEntry::DeleteFilesForEntryHash( path, key_hash, file_operations.get()); @@ -777,7 +777,7 @@ void SimpleSynchronousEntry::ReadSparseData(const SparseRequest& in_entry_op, char* buf = out_buf->data(); int read_so_far = 0; - if (!sparse_file_open()) { + if (!sparse_file_open() || !buf_len) { *out_result = 0; return; } @@ -1442,7 +1442,7 @@ bool SimpleSynchronousEntry::CheckHeaderAndKey(base::File* file, int SimpleSynchronousEntry::InitializeForOpen( BackendFileOperations* file_operations, SimpleEntryStat* out_entry_stat, - SimpleStreamPrefetchData stream_prefetch_data[2]) { + std::array& stream_prefetch_data) { DCHECK(!initialized_); if (!OpenFiles(file_operations, out_entry_stat)) { DLOG(WARNING) << "Could not open platform files for entry."; @@ -1582,7 +1582,7 @@ int SimpleSynchronousEntry::ReadAndValidateStream0AndMaybe1( BackendFileOperations* file_operations, int file_size, SimpleEntryStat* out_entry_stat, - SimpleStreamPrefetchData stream_prefetch_data[2]) { + std::array& stream_prefetch_data) { SimpleFileTracker::FileHandle file = file_tracker_->Acquire(file_operations, this, SubFileForFileIndex(0)); if (!file.IsOK()) diff --git a/naiveproxy/src/net/disk_cache/simple/simple_synchronous_entry.h b/naiveproxy/src/net/disk_cache/simple/simple_synchronous_entry.h index f28b0b46a3..1c09d002f5 100644 --- a/naiveproxy/src/net/disk_cache/simple/simple_synchronous_entry.h +++ b/naiveproxy/src/net/disk_cache/simple/simple_synchronous_entry.h @@ -2,17 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifdef UNSAFE_BUFFERS_BUILD -// TODO(crbug.com/40284755): Remove this and spanify to fix the errors. -#pragma allow_unsafe_buffers -#endif - #ifndef NET_DISK_CACHE_SIMPLE_SIMPLE_SYNCHRONOUS_ENTRY_H_ #define NET_DISK_CACHE_SIMPLE_SIMPLE_SYNCHRONOUS_ENTRY_H_ #include #include +#include #include #include #include @@ -65,7 +61,7 @@ class NET_EXPORT_PRIVATE SimpleEntryStat { public: SimpleEntryStat(base::Time last_used, base::Time last_modified, - const int32_t data_size[], + const std::array& data_size, const int32_t sparse_data_size); int GetOffsetInFile(size_t key_length, int offset, int stream_index) const; @@ -93,7 +89,7 @@ class NET_EXPORT_PRIVATE SimpleEntryStat { private: base::Time last_used_; base::Time last_modified_; - int32_t data_size_[kSimpleEntryStreamCount]; + std::array data_size_; int32_t sparse_data_size_; }; @@ -114,7 +110,7 @@ struct SimpleEntryCreationResults { std::unique_ptr unbound_file_operations; // Expectation is that [0] will always be filled in, but [1] might not be. - SimpleStreamPrefetchData stream_prefetch_data[2]; + std::array stream_prefetch_data; SimpleEntryStat entry_stat; int32_t computed_trailer_prefetch_size = -1; @@ -376,9 +372,10 @@ class SimpleSynchronousEntry { bool CheckHeaderAndKey(base::File* file, int file_index); // Returns a net error, i.e. net::OK on success. - int InitializeForOpen(BackendFileOperations* file_operations, - SimpleEntryStat* out_entry_stat, - SimpleStreamPrefetchData stream_prefetch_data[2]); + int InitializeForOpen( + BackendFileOperations* file_operations, + SimpleEntryStat* out_entry_stat, + std::array& stream_prefetch_data); // Writes the header and key to a newly-created stream file. |index| is the // index of the stream. Returns true on success; returns false and failure. @@ -396,7 +393,7 @@ class SimpleSynchronousEntry { BackendFileOperations* file_operations, int file_size, SimpleEntryStat* out_entry_stat, - SimpleStreamPrefetchData stream_prefetch_data[2]); + std::array& stream_prefetch_data); // Reads the EOF record located at |file_offset| in file |file_index|, // with |file_0_prefetch| potentially having prefetched file 0 content. diff --git a/naiveproxy/src/net/disk_cache/simple/simple_version_upgrade.cc b/naiveproxy/src/net/disk_cache/simple/simple_version_upgrade.cc index 6f0f6d223b..f37ee2b5f7 100644 --- a/naiveproxy/src/net/disk_cache/simple/simple_version_upgrade.cc +++ b/naiveproxy/src/net/disk_cache/simple/simple_version_upgrade.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "net/disk_cache/simple/simple_version_upgrade.h" #include diff --git a/naiveproxy/src/net/dns/address_info.h b/naiveproxy/src/net/dns/address_info.h index d3a044a89b..0ea4ce3886 100644 --- a/naiveproxy/src/net/dns/address_info.h +++ b/naiveproxy/src/net/dns/address_info.h @@ -20,10 +20,26 @@ namespace net { class AddressList; -class AddrInfoGetter; using FreeAddrInfoFunc = void (*)(addrinfo*); +// Encapsulates calls to getaddrinfo and freeaddrinfo for tests. +class NET_EXPORT_PRIVATE AddrInfoGetter { + public: + AddrInfoGetter(); + + AddrInfoGetter(const AddrInfoGetter&) = delete; + AddrInfoGetter& operator=(const AddrInfoGetter&) = delete; + + // Virtual for tests. + virtual ~AddrInfoGetter(); + virtual std::unique_ptr getaddrinfo( + const std::string& host, + const addrinfo* hints, + int* out_os_error, + handles::NetworkHandle network); +}; + // AddressInfo -- this encapsulates the system call to getaddrinfo and the // data structure that it populates and returns. class NET_EXPORT_PRIVATE AddressInfo { @@ -92,23 +108,6 @@ class NET_EXPORT_PRIVATE AddressInfo { std::unique_ptr getter_; }; -// Encapsulates calls to getaddrinfo and freeaddrinfo for tests. -class NET_EXPORT_PRIVATE AddrInfoGetter { - public: - AddrInfoGetter(); - - AddrInfoGetter(const AddrInfoGetter&) = delete; - AddrInfoGetter& operator=(const AddrInfoGetter&) = delete; - - // Virtual for tests. - virtual ~AddrInfoGetter(); - virtual std::unique_ptr getaddrinfo( - const std::string& host, - const addrinfo* hints, - int* out_os_error, - handles::NetworkHandle network); -}; - } // namespace net #endif // NET_DNS_ADDRESS_INFO_H_ diff --git a/naiveproxy/src/net/dns/dns_client.cc b/naiveproxy/src/net/dns/dns_client.cc index f62a4bcdc7..476be5d74c 100644 --- a/naiveproxy/src/net/dns/dns_client.cc +++ b/naiveproxy/src/net/dns/dns_client.cc @@ -4,6 +4,7 @@ #include "net/dns/dns_client.h" +#include #include #include #include @@ -14,7 +15,6 @@ #include "base/memory/raw_ptr.h" #include "base/metrics/histogram_macros.h" #include "base/rand_util.h" -#include "base/ranges/algorithm.h" #include "base/values.h" #include "net/base/ip_address.h" #include "net/base/ip_endpoint.h" @@ -184,7 +184,7 @@ class DnsClientImpl : public DnsClient { if (!session_) return std::nullopt; const auto& servers = session_->config().doh_config.servers(); - auto it = base::ranges::find_if(servers, [&](const auto& server) { + auto it = std::ranges::find_if(servers, [&](const auto& server) { std::string uri; bool valid = uri_template::Expand(server.server_template(), {}, &uri); // Server templates are validated before being allowed into the config. diff --git a/naiveproxy/src/net/dns/dns_config_service_win.cc b/naiveproxy/src/net/dns/dns_config_service_win.cc index daa785caf0..e4536b33a3 100644 --- a/naiveproxy/src/net/dns/dns_config_service_win.cc +++ b/naiveproxy/src/net/dns/dns_config_service_win.cc @@ -6,6 +6,7 @@ #include +#include #include #include #include @@ -23,7 +24,6 @@ #include "base/memory/raw_ptr.h" #include "base/memory/weak_ptr.h" #include "base/metrics/histogram_functions.h" -#include "base/ranges/algorithm.h" #include "base/sequence_checker.h" #include "base/strings/strcat.h" #include "base/strings/string_number_conversions.h" @@ -304,7 +304,7 @@ void ConfigureSuffixSearch(const WinDnsSystemSettings& settings, // behavior (see also ParseSearchList). If a suffix is not valid, it will be // discarded when the fully-qualified name is converted to DNS format. - unsigned num_dots = base::ranges::count(primary_suffix, '.'); + unsigned num_dots = std::ranges::count(primary_suffix, '.'); for (size_t offset = 0; num_dots >= devolution.level.value(); --num_dots) { offset = primary_suffix.find('.', offset + 1); diff --git a/naiveproxy/src/net/dns/dns_query.cc b/naiveproxy/src/net/dns/dns_query.cc index 6fa0c25a6f..9fd31558c4 100644 --- a/naiveproxy/src/net/dns/dns_query.cc +++ b/naiveproxy/src/net/dns/dns_query.cc @@ -73,8 +73,8 @@ std::unique_ptr AddPaddingIfNecessary( std::unique_ptr merged_opt_rdata; if (opt_rdata) { - merged_opt_rdata = OptRecordRdata::Create( - std::string_view(opt_rdata->buf().data(), opt_rdata->buf().size())); + merged_opt_rdata = + OptRecordRdata::Create(base::as_byte_span(opt_rdata->buf())); } else { merged_opt_rdata = std::make_unique(); } diff --git a/naiveproxy/src/net/dns/dns_response_result_extractor.cc b/naiveproxy/src/net/dns/dns_response_result_extractor.cc index c9f4784f79..4e14f79ea4 100644 --- a/naiveproxy/src/net/dns/dns_response_result_extractor.cc +++ b/naiveproxy/src/net/dns/dns_response_result_extractor.cc @@ -7,6 +7,7 @@ #include #include +#include #include #include #include @@ -26,7 +27,6 @@ #include "base/numerics/checked_math.h" #include "base/numerics/ostream_operators.h" #include "base/rand_util.h" -#include "base/ranges/algorithm.h" #include "base/strings/string_util.h" #include "base/time/clock.h" #include "base/time/time.h" @@ -598,8 +598,8 @@ ResultsOrError ExtractHttpsResults(const DnsResponse& response, // Ignore all records if any are an alias record. Chrome does not yet support // alias records, but aliases take precedence over any other records. - if (base::ranges::any_of(https_records.value(), &RecordIsAlias, - &UnwrapRecordPtr)) { + if (std::ranges::any_of(https_records.value(), &RecordIsAlias, + &UnwrapRecordPtr)) { metadatas.clear(); } diff --git a/naiveproxy/src/net/dns/dns_task_results_manager.cc b/naiveproxy/src/net/dns/dns_task_results_manager.cc index 00f1c86d4f..a83ac6c7ec 100644 --- a/naiveproxy/src/net/dns/dns_task_results_manager.cc +++ b/naiveproxy/src/net/dns/dns_task_results_manager.cc @@ -20,6 +20,7 @@ #include "net/base/features.h" #include "net/base/ip_endpoint.h" #include "net/base/net_errors.h" +#include "net/dns/dns_alias_utility.h" #include "net/dns/host_resolver.h" #include "net/dns/host_resolver_dns_task.h" #include "net/dns/host_resolver_internal_result.h" @@ -144,8 +145,13 @@ void DnsTaskResultsManager::ProcessDnsTransactionResults( } } + // Track whether new aliases are added. + bool aliases_updated = false; + for (const auto& result : results) { - aliases_.insert(result->domain_name()); + auto [unused_1_, updated_domain_name] = + aliases_.insert(result->domain_name()); + aliases_updated |= updated_domain_name; switch (result->type()) { case HostResolverInternalResult::Type::kData: { @@ -183,10 +189,13 @@ void DnsTaskResultsManager::ProcessDnsTransactionResults( break; } - case net::HostResolverInternalResult::Type::kAlias: - aliases_.insert(result->AsAlias().alias_target()); + case net::HostResolverInternalResult::Type::kAlias: { + auto [unused_2_, updated_alias] = + aliases_.insert(result->AsAlias().alias_target()); + aliases_updated |= updated_alias; break; + } case net::HostResolverInternalResult::Type::kError: // Need to update endpoints when AAAA response is NODATA but A response // has at least one valid address. @@ -210,6 +219,11 @@ void DnsTaskResultsManager::ProcessDnsTransactionResults( } } + // Only fix up aliases if new ones were added. + if (aliases_updated) { + aliases_ = dns_alias_utility::FixUpDnsAliases(aliases_); + } + const bool waiting_for_aaaa_response = query_types_.Has(DnsQueryType::AAAA) && !aaaa_response_received_; if (waiting_for_aaaa_response) { @@ -284,7 +298,7 @@ void DnsTaskResultsManager::UpdateEndpoints() { endpoint.ipv6_endpoints = per_domain_result->ipv6_endpoints; new_endpoints.emplace_back(std::move(endpoint)); } else { - for (const auto& [_, metadata] : per_domain_result->metadatas) { + for (const auto& [unused_, metadata] : per_domain_result->metadatas) { ServiceEndpoint endpoint; endpoint.ipv4_endpoints = per_domain_result->ipv4_endpoints; endpoint.ipv6_endpoints = per_domain_result->ipv6_endpoints; @@ -334,7 +348,7 @@ void DnsTaskResultsManager::UpdateEndpoints() { } bool DnsTaskResultsManager::HasIpv4Addresses() { - for (const auto& [_, per_domain_result] : per_domain_results_) { + for (const auto& [unused_, per_domain_result] : per_domain_results_) { if (!per_domain_result->ipv4_endpoints.empty()) { return true; } diff --git a/naiveproxy/src/net/dns/dns_test_util.cc b/naiveproxy/src/net/dns/dns_test_util.cc index af754f233c..5c6389b86f 100644 --- a/naiveproxy/src/net/dns/dns_test_util.cc +++ b/naiveproxy/src/net/dns/dns_test_util.cc @@ -11,6 +11,7 @@ #include +#include #include #include #include @@ -23,7 +24,6 @@ #include "base/location.h" #include "base/numerics/byte_conversions.h" #include "base/numerics/safe_conversions.h" -#include "base/ranges/algorithm.h" #include "base/strings/strcat.h" #include "base/sys_byteorder.h" #include "base/task/single_thread_task_runner.h" @@ -212,7 +212,7 @@ std::pair BuildTestHttpsServiceEchConfigParam( std::pair BuildTestHttpsServiceMandatoryParam( std::vector param_key_list) { - base::ranges::sort(param_key_list); + std::ranges::sort(param_key_list); std::string value; for (uint16_t param_key : param_key_list) { diff --git a/naiveproxy/src/net/dns/dns_transaction.cc b/naiveproxy/src/net/dns/dns_transaction.cc index f9d4c3f873..6597830c64 100644 --- a/naiveproxy/src/net/dns/dns_transaction.cc +++ b/naiveproxy/src/net/dns/dns_transaction.cc @@ -6,6 +6,7 @@ #include +#include #include #include #include @@ -30,7 +31,6 @@ #include "base/metrics/histogram_macros.h" #include "base/numerics/byte_conversions.h" #include "base/rand_util.h" -#include "base/ranges/algorithm.h" #include "base/strings/stringprintf.h" #include "base/task/sequenced_task_runner.h" #include "base/task/single_thread_task_runner.h" @@ -1704,10 +1704,10 @@ class DnsTransactionImpl final : public DnsTransaction { } bool AnyAttemptPending() { - return base::ranges::any_of(attempts_, - [](std::unique_ptr& attempt) { - return attempt->IsPending(); - }); + return std::ranges::any_of(attempts_, + [](std::unique_ptr& attempt) { + return attempt->IsPending(); + }); } void OnFallbackPeriodExpired() { diff --git a/naiveproxy/src/net/dns/dns_udp_tracker.cc b/naiveproxy/src/net/dns/dns_udp_tracker.cc index 2be2059d6a..fbdc460b33 100644 --- a/naiveproxy/src/net/dns/dns_udp_tracker.cc +++ b/naiveproxy/src/net/dns/dns_udp_tracker.cc @@ -4,11 +4,11 @@ #include "net/dns/dns_udp_tracker.h" +#include #include #include "base/metrics/histogram_macros.h" #include "base/numerics/safe_conversions.h" -#include "base/ranges/algorithm.h" #include "base/time/tick_clock.h" #include "net/base/net_errors.h" @@ -64,7 +64,7 @@ void DnsUdpTracker::RecordQuery(uint16_t port, uint16_t query_id) { PurgeOldRecords(); int reused_port_count = base::checked_cast( - base::ranges::count(recent_queries_, port, &QueryData::port)); + std::ranges::count(recent_queries_, port, &QueryData::port)); if (reused_port_count >= kPortReuseThreshold && !low_entropy_) { low_entropy_ = true; @@ -126,7 +126,7 @@ void DnsUdpTracker::SaveIdMismatch(uint16_t id) { base::TimeTicks now = tick_clock_->NowTicks(); base::TimeTicks time_cutoff = now - kMaxRecognizedIdAge; bool is_recognized = - base::ranges::any_of(recent_queries_, [&](const auto& recent_query) { + std::ranges::any_of(recent_queries_, [&](const auto& recent_query) { return recent_query.query_id == id && recent_query.time >= time_cutoff; }); diff --git a/naiveproxy/src/net/dns/dns_util.cc b/naiveproxy/src/net/dns/dns_util.cc index c479f6fb50..40c1833c60 100644 --- a/naiveproxy/src/net/dns/dns_util.cc +++ b/naiveproxy/src/net/dns/dns_util.cc @@ -8,6 +8,7 @@ #include #include +#include #include #include #include @@ -20,7 +21,6 @@ #include "base/metrics/field_trial.h" #include "base/metrics/histogram_macros.h" #include "base/numerics/byte_conversions.h" -#include "base/ranges/algorithm.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_split.h" #include "build/build_config.h" @@ -176,16 +176,16 @@ std::vector GetDohUpgradeServersFromNameservers( const auto entries = GetDohProviderEntriesFromNameservers(dns_servers); std::vector doh_servers; doh_servers.reserve(entries.size()); - base::ranges::transform(entries, std::back_inserter(doh_servers), - &DohProviderEntry::doh_server_config); + std::ranges::transform(entries, std::back_inserter(doh_servers), + &DohProviderEntry::doh_server_config); return doh_servers; } std::string GetDohProviderIdForHistogramFromServerConfig( const DnsOverHttpsServerConfig& doh_server) { const auto& entries = DohProviderEntry::GetList(); - const auto it = base::ranges::find(entries, doh_server, - &DohProviderEntry::doh_server_config); + const auto it = std::ranges::find(entries, doh_server, + &DohProviderEntry::doh_server_config); return it != entries.end() ? std::string((*it)->provider) : "Other"; } diff --git a/naiveproxy/src/net/dns/host_cache.cc b/naiveproxy/src/net/dns/host_cache.cc index 75b433f015..040c1a789d 100644 --- a/naiveproxy/src/net/dns/host_cache.cc +++ b/naiveproxy/src/net/dns/host_cache.cc @@ -319,7 +319,7 @@ HostCache::Entry::Entry( // Any errors should be an ignorable ERR_NAME_NOT_RESOLVED from a single // transaction. - CHECK(base::ranges::all_of( + CHECK(std::ranges::all_of( error_results, [](const HostResolverInternalResult* error_result) { return error_result->query_type() != DnsQueryType::UNSPECIFIED && error_result->AsError().error() == ERR_NAME_NOT_RESOLVED; diff --git a/naiveproxy/src/net/dns/host_resolver.cc b/naiveproxy/src/net/dns/host_resolver.cc index b9953b6d89..85216f5de6 100644 --- a/naiveproxy/src/net/dns/host_resolver.cc +++ b/naiveproxy/src/net/dns/host_resolver.cc @@ -4,6 +4,7 @@ #include "net/dns/host_resolver.h" +#include #include #include #include @@ -15,7 +16,6 @@ #include "base/functional/bind.h" #include "base/no_destructor.h" #include "base/notreached.h" -#include "base/ranges/algorithm.h" #include "base/strings/string_number_conversions.h" #include "base/time/time_delta_from_string.h" #include "base/values.h" @@ -134,6 +134,12 @@ class FailingServiceEndpointRequestImpl return ResolveErrorInfo(error_); } + const HostCache::EntryStaleness* GetStaleInfo() const override { + return nullptr; + } + + bool IsStaleWhileRefresing() const override { return false; } + void ChangeRequestPriority(RequestPriority priority) override {} private: @@ -322,6 +328,13 @@ std::unique_ptr HostResolver::Factory::CreateStandaloneResolver( HostResolver::ResolveHostParameters::ResolveHostParameters() = default; +HostResolver::ResolveHostParameters::ResolveHostParameters( + const ResolveHostParameters&) = default; + +HostResolver::ResolveHostParameters& +HostResolver::ResolveHostParameters::operator=(const ResolveHostParameters&) = + default; + HostResolver::~HostResolver() = default; std::unique_ptr @@ -534,7 +547,7 @@ AddressList HostResolver::EndpointResultToAddressList( AddressList list; auto non_protocol_endpoint = - base::ranges::find_if(endpoints, &EndpointResultIsNonProtocol); + std::ranges::find_if(endpoints, &EndpointResultIsNonProtocol); if (non_protocol_endpoint == endpoints.end()) return list; diff --git a/naiveproxy/src/net/dns/host_resolver.h b/naiveproxy/src/net/dns/host_resolver.h index 739fbd442f..762e2bb606 100644 --- a/naiveproxy/src/net/dns/host_resolver.h +++ b/naiveproxy/src/net/dns/host_resolver.h @@ -228,8 +228,9 @@ class NET_EXPORT HostResolver { // synchronously, and GetEndpointResults() will return finalized results. virtual int Start(Delegate* delegate) = 0; - // The current available service endpoints. These can be changed over time - // while resolution is still ongoing. Changes are signaled by a call to the + // The current available service endpoints. May return stale results when + // the cache usage is ALLOWED. These can be changed over time while + // resolution is still ongoing. Changes are signaled by a call to the // delegate's OnServiceEndpointsUpdated(). Results are finalized when // Start() finished synchronously (returning other than ERR_IO_PENDING), or // delegate's OnServiceEndpointRequestFinished() is called. @@ -256,6 +257,20 @@ class NET_EXPORT HostResolver { // after resolution completed. virtual ResolveErrorInfo GetResolveErrorInfo() = 0; + // Staleness about the current endpoint results. Only available if results + // were received from the host cache, otherwise returns nullptr. + // This can be changed over time while resolution is still ongoing, e.g., + // clearing to nullptr if the cached results were intermediate stale results + // and these are replaced with fresh results. + virtual const HostCache::EntryStaleness* GetStaleInfo() const = 0; + + // True when the current endpoints are a stale result returned only as a + // preliminary results while the resolver retrieves fresh results. This is + // equivalent to checking the staleness from GetStaleInfo() while the + // request isn't final. This can be changed over time while resolution is + // still ongoing. + virtual bool IsStaleWhileRefresing() const = 0; + // Change the priority of this request. virtual void ChangeRequestPriority(RequestPriority priority) = 0; }; @@ -368,6 +383,9 @@ class NET_EXPORT HostResolver { struct NET_EXPORT ResolveHostParameters { ResolveHostParameters(); + ResolveHostParameters(const ResolveHostParameters&); + ResolveHostParameters& operator=(const ResolveHostParameters&); + // Requested DNS query type. If UNSPECIFIED, the resolver will select a set // of queries automatically. It will select A, AAAA, or both as the address // queries, depending on IPv4/IPv6 settings and reachability. It may also @@ -385,13 +403,23 @@ class NET_EXPORT HostResolver { HostResolverSource source = HostResolverSource::ANY; enum class CacheUsage { - // Results may come from the host cache if non-stale. + // For ResolveHostRequest, results may come from the host cache if + // non-stale. + // + // For ServiceEndpointRequest, stale results may come from the host cache + // only as intermediate results (not the final results). Final results + // may come from the host cache if non-stale, or may be fresh responses + // from resolvers. + // TODO(crbug.com/384204936): The name is confusing. Figure out better + // name for this mode. ALLOWED, // Results may come from the host cache even if stale (by expiration or // network changes). In secure dns AUTOMATIC mode, the cache is checked // for both secure and insecure results prior to any secure DNS lookups to // minimize response time. + // + // For ServiceEndpointRequest, final results could be stale. STALE_ALLOWED, // Results will not come from the host cache. diff --git a/naiveproxy/src/net/dns/host_resolver_dns_task.cc b/naiveproxy/src/net/dns/host_resolver_dns_task.cc index bafd9e9bb6..4d27b54802 100644 --- a/naiveproxy/src/net/dns/host_resolver_dns_task.cc +++ b/naiveproxy/src/net/dns/host_resolver_dns_task.cc @@ -4,12 +4,12 @@ #include "net/dns/host_resolver_dns_task.h" +#include #include #include "base/metrics/histogram_functions.h" #include "base/metrics/histogram_macros.h" #include "base/not_fatal_until.h" -#include "base/ranges/algorithm.h" #include "base/time/tick_clock.h" #include "base/types/optional_util.h" #include "net/base/features.h" @@ -135,7 +135,7 @@ std::vector ExtractAddressResultsForSort( // To simplify processing, assume no more than one result per address query // type. CHECK_LE( - base::ranges::count_if( + std::ranges::count_if( results, [](const std::unique_ptr& result) { return (result->type() == HostResolverInternalResult::Type::kData || @@ -145,7 +145,7 @@ std::vector ExtractAddressResultsForSort( }), 1); CHECK_LE( - base::ranges::count_if( + std::ranges::count_if( results, [](const std::unique_ptr& result) { return (result->type() == HostResolverInternalResult::Type::kData || @@ -155,13 +155,13 @@ std::vector ExtractAddressResultsForSort( }), 1); - auto a_result_it = base::ranges::find_if( + auto a_result_it = std::ranges::find_if( results, [](const std::unique_ptr& result) { return (result->type() == HostResolverInternalResult::Type::kData || result->type() == HostResolverInternalResult::Type::kError) && result->query_type() == DnsQueryType::A; }); - auto aaaa_result_it = base::ranges::find_if( + auto aaaa_result_it = std::ranges::find_if( results, [](const std::unique_ptr& result) { return (result->type() == HostResolverInternalResult::Type::kData || result->type() == HostResolverInternalResult::Type::kError) && @@ -212,14 +212,14 @@ std::vector ExtractAddressResultsForSort( } // Expect no more data types after removed address results. - CHECK(!base::ranges::any_of( + CHECK(!std::ranges::any_of( results, [](const std::unique_ptr& result) { return result->type() == HostResolverInternalResult::Type::kData; })); // Expect no UNSPECIFIED-type error result to ensure the one we're about to // create can be easily found. - CHECK(!base::ranges::any_of( + CHECK(!std::ranges::any_of( results, [](const std::unique_ptr& result) { return result->type() == HostResolverInternalResult::Type::kError && result->query_type() == DnsQueryType::UNSPECIFIED; @@ -607,7 +607,7 @@ void HostResolverDnsTask::OnDnsTransactionComplete( if (httpssvc_metrics_) { if (transaction_info.type == DnsQueryType::HTTPS) { - bool has_compatible_https = base::ranges::any_of( + bool has_compatible_https = std::ranges::any_of( results.value(), [](const std::unique_ptr& result) { return result->type() == @@ -716,7 +716,7 @@ void HostResolverDnsTask::SortTransactionAndHandleResults( TransactionInfo transaction_info, Results transaction_results) { // Expect at most 1 data result in an individual transaction. - CHECK_LE(base::ranges::count_if( + CHECK_LE(std::ranges::count_if( transaction_results, [](const std::unique_ptr& result) { return result->type() == @@ -724,7 +724,7 @@ void HostResolverDnsTask::SortTransactionAndHandleResults( }), 1); - auto data_result_it = base::ranges::find_if( + auto data_result_it = std::ranges::find_if( transaction_results, [](const std::unique_ptr& result) { return result->type() == HostResolverInternalResult::Type::kData; @@ -775,13 +775,13 @@ void HostResolverDnsTask::OnTransactionSorted( std::move(transactions_in_progress_.extract(transaction_info_it).value()); // Expect exactly one data result. - auto data_result_it = base::ranges::find_if( + auto data_result_it = std::ranges::find_if( transaction_results, [](const std::unique_ptr& result) { return result->type() == HostResolverInternalResult::Type::kData; }); CHECK(data_result_it != transaction_results.end()); - DCHECK_EQ(base::ranges::count_if( + DCHECK_EQ(std::ranges::count_if( transaction_results, [](const std::unique_ptr& result) { return result->type() == @@ -849,12 +849,12 @@ void HostResolverDnsTask::HandleTransactionResults( // Failures other than ERR_NAME_NOT_RESOLVED cannot be merged with other // transactions. - auto failure_result_it = base::ranges::find_if( + auto failure_result_it = std::ranges::find_if( transaction_results, [](const std::unique_ptr& result) { return result->type() == HostResolverInternalResult::Type::kError; }); - DCHECK_LE(base::ranges::count_if( + DCHECK_LE(std::ranges::count_if( transaction_results, [](const std::unique_ptr& result) { return result->type() == @@ -943,7 +943,7 @@ void HostResolverDnsTask::OnSortComplete(base::TimeTicks sort_start_time, // Find the merged error result that was created by // ExtractAddressResultsForSort(). - auto merged_error_it = base::ranges::find_if( + auto merged_error_it = std::ranges::find_if( results, [](const std::unique_ptr& result) { return result->type() == HostResolverInternalResult::Type::kError && result->query_type() == DnsQueryType::UNSPECIFIED && @@ -969,11 +969,10 @@ bool HostResolverDnsTask::AnyPotentiallyFatalTransactionsRemain() { return behavior == TransactionErrorBehavior::kFatalOrEmpty; }; - return base::ranges::any_of(transactions_needed_, is_fatal_or_empty_error, - &TransactionInfo::error_behavior) || - base::ranges::any_of(transactions_in_progress_, - is_fatal_or_empty_error, - &TransactionInfo::error_behavior); + return std::ranges::any_of(transactions_needed_, is_fatal_or_empty_error, + &TransactionInfo::error_behavior) || + std::ranges::any_of(transactions_in_progress_, is_fatal_or_empty_error, + &TransactionInfo::error_behavior); } void HostResolverDnsTask::CancelNonFatalTransactions() { @@ -1054,17 +1053,17 @@ bool HostResolverDnsTask::AnyOfTypeTransactionsRemain( DCHECK(!transactions_needed_.empty() || !transactions_in_progress_.empty()); // Check running transactions. - if (base::ranges::find_first_of(transactions_in_progress_, types, - /*pred=*/{}, - /*proj1=*/&TransactionInfo::type) != + if (std::ranges::find_first_of(transactions_in_progress_, types, + /*pred=*/{}, + /*proj1=*/&TransactionInfo::type) != transactions_in_progress_.end()) { return true; } // Check queued transactions, in case it ever becomes possible to get here // without the transactions being started first. - return base::ranges::find_first_of(transactions_needed_, types, /*pred=*/{}, - /*proj1=*/&TransactionInfo::type) != + return std::ranges::find_first_of(transactions_needed_, types, /*pred=*/{}, + /*proj1=*/&TransactionInfo::type) != transactions_needed_.end(); } @@ -1154,7 +1153,7 @@ bool HostResolverDnsTask::ShouldTriggerHttpToHttpsUpgrade( return false; } - return base::ranges::any_of( + return std::ranges::any_of( results, [](const std::unique_ptr& result) { return result->type() == HostResolverInternalResult::Type::kMetadata; }); diff --git a/naiveproxy/src/net/dns/host_resolver_internal_result.cc b/naiveproxy/src/net/dns/host_resolver_internal_result.cc index 56e988cf92..b8fbaee25c 100644 --- a/naiveproxy/src/net/dns/host_resolver_internal_result.cc +++ b/naiveproxy/src/net/dns/host_resolver_internal_result.cc @@ -101,8 +101,8 @@ std::optional QueryTypeFromValue(const base::Value& value) { if (!query_type_string) return std::nullopt; const auto query_type_it = - base::ranges::find(kDnsQueryTypes, *query_type_string, - &decltype(kDnsQueryTypes)::value_type::second); + std::ranges::find(kDnsQueryTypes, *query_type_string, + &decltype(kDnsQueryTypes)::value_type::second); if (query_type_it == kDnsQueryTypes.end()) return std::nullopt; @@ -282,8 +282,8 @@ bool HostResolverInternalResult::ValidateValueBaseDict( if (!query_type_string) return false; const auto query_type_it = - base::ranges::find(kDnsQueryTypes, *query_type_string, - &decltype(kDnsQueryTypes)::value_type::second); + std::ranges::find(kDnsQueryTypes, *query_type_string, + &decltype(kDnsQueryTypes)::value_type::second); if (query_type_it == kDnsQueryTypes.end()) return false; diff --git a/naiveproxy/src/net/dns/host_resolver_manager.cc b/naiveproxy/src/net/dns/host_resolver_manager.cc index 692320b247..744a570a55 100644 --- a/naiveproxy/src/net/dns/host_resolver_manager.cc +++ b/naiveproxy/src/net/dns/host_resolver_manager.cc @@ -4,6 +4,7 @@ #include "net/dns/host_resolver_manager.h" +#include #include #include #include @@ -44,7 +45,6 @@ #include "base/not_fatal_until.h" #include "base/numerics/safe_conversions.h" #include "base/observer_list.h" -#include "base/ranges/algorithm.h" #include "base/sequence_checker.h" #include "base/strings/strcat.h" #include "base/strings/string_number_conversions.h" @@ -263,12 +263,11 @@ std::vector FilterAddresses(std::vector addresses, return addresses; // Keep only the endpoints that match `want_family`. - addresses.erase( - base::ranges::remove_if( - addresses, - [want_family](AddressFamily family) { return family != want_family; }, - &IPEndPoint::GetFamily), - addresses.end()); + auto removed = std::ranges::remove_if( + addresses, + [want_family](AddressFamily family) { return family != want_family; }, + &IPEndPoint::GetFamily); + addresses.erase(removed.begin(), removed.end()); return addresses; } @@ -1109,10 +1108,10 @@ std::optional HostResolverManager::ServeFromHosts( // If got only loopback addresses and the family was restricted, resolve // again, without restrictions. See SystemHostResolverCall for rationale. if (default_family_due_to_no_ipv6 && - base::ranges::all_of(addresses, &IPAddress::IsIPv4, - &IPEndPoint::address) && - base::ranges::all_of(addresses, &IPAddress::IsLoopback, - &IPEndPoint::address)) { + std::ranges::all_of(addresses, &IPAddress::IsIPv4, + &IPEndPoint::address) && + std::ranges::all_of(addresses, &IPAddress::IsLoopback, + &IPEndPoint::address)) { query_types.Put(DnsQueryType::AAAA); return ServeFromHosts(hostname, query_types, false, tasks); } @@ -1198,9 +1197,9 @@ bool HostResolverManager::ShouldForceSystemResolverDueToTestOverride() const { if (HostResolverProc::GetDefault() && system_resolver_disabled_for_testing_) { DCHECK(dns_client_); DCHECK(dns_client_->GetEffectiveConfig()); - DCHECK(base::ranges::none_of(dns_client_->GetEffectiveConfig()->nameservers, - &IPAddress::IsPubliclyRoutable, - &IPEndPoint::address)) + DCHECK(std::ranges::none_of(dns_client_->GetEffectiveConfig()->nameservers, + &IPAddress::IsPubliclyRoutable, + &IPEndPoint::address)) << "Test could query a publicly-routable address."; } return !host_resolver_system_params_.resolver_proc && @@ -1274,7 +1273,7 @@ void HostResolverManager::PushDnsTasks(bool system_task_allowed, constexpr TaskType kWantTasks[] = {TaskType::DNS, TaskType::SECURE_DNS}; const bool no_dns_or_secure_tasks = - base::ranges::find_first_of(*out_tasks, kWantTasks) == out_tasks->end(); + std::ranges::find_first_of(*out_tasks, kWantTasks) == out_tasks->end(); // The system resolver can be used as a fallback for a non-existent or // failing DnsTask if allowed by the request parameters. if (system_task_allowed && @@ -1380,8 +1379,8 @@ void HostResolverManager::CreateTaskSequence( // `HOST_RESOLVER_CANONNAME` is only supported through system resolution. if (job_key.flags & HOST_RESOLVER_CANONNAME) { - DCHECK(base::ranges::find(*out_tasks, TaskType::DNS) == out_tasks->end()); - DCHECK(base::ranges::find(*out_tasks, TaskType::MDNS) == out_tasks->end()); + DCHECK(std::ranges::find(*out_tasks, TaskType::DNS) == out_tasks->end()); + DCHECK(std::ranges::find(*out_tasks, TaskType::MDNS) == out_tasks->end()); } } @@ -1639,9 +1638,9 @@ void HostResolverManager::OnSystemDnsConfigChanged( // that we are not at risk of sending queries beyond the local network. if (HostResolverProc::GetDefault() && system_resolver_disabled_for_testing_ && config.has_value()) { - DCHECK(base::ranges::none_of(config->nameservers, - &IPAddress::IsPubliclyRoutable, - &IPEndPoint::address)) + DCHECK(std::ranges::none_of(config->nameservers, + &IPAddress::IsPubliclyRoutable, + &IPEndPoint::address)) << "Test could query a publicly-routable address."; } diff --git a/naiveproxy/src/net/dns/host_resolver_manager_service_endpoint_request_impl.cc b/naiveproxy/src/net/dns/host_resolver_manager_service_endpoint_request_impl.cc index 78cc965917..bd1666da9f 100644 --- a/naiveproxy/src/net/dns/host_resolver_manager_service_endpoint_request_impl.cc +++ b/naiveproxy/src/net/dns/host_resolver_manager_service_endpoint_request_impl.cc @@ -11,6 +11,7 @@ #include "net/base/net_errors.h" #include "net/dns/dns_alias_utility.h" #include "net/dns/dns_task_results_manager.h" +#include "net/dns/host_cache.h" #include "net/dns/host_resolver.h" #include "net/dns/host_resolver_manager.h" #include "net/dns/public/resolve_error_info.h" @@ -87,6 +88,20 @@ int HostResolverManager::ServiceEndpointRequestImpl::Start(Delegate* delegate) { return DoLoop(OK); } +const HostCache::EntryStaleness* +HostResolverManager::ServiceEndpointRequestImpl::GetStaleInfo() const { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + return base::OptionalToPtr(stale_info_); +} + +bool HostResolverManager::ServiceEndpointRequestImpl::IsStaleWhileRefresing() + const { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + return parameters_.cache_usage == + ResolveHostParameters::CacheUsage::ALLOWED && + stale_info_.has_value() && stale_info_.value().is_stale(); +} + const std::vector& HostResolverManager::ServiceEndpointRequestImpl::GetEndpointResults() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); @@ -95,6 +110,15 @@ HostResolverManager::ServiceEndpointRequestImpl::GetEndpointResults() { return finalized_result_->endpoints; } + // There are two cases where `stale_endpoints_` is empty: + // * No stale results received yet. + // * The stale result is negative. + // In either case, providing stale results isn't useful, so provide stale + // results only if it's not empty. + if (!stale_endpoints_.empty()) { + return stale_endpoints_; + } + if (job_ && job_.value()->dns_task_results_manager()) { return job_.value()->dns_task_results_manager()->GetCurrentEndpoints(); } @@ -112,7 +136,6 @@ HostResolverManager::ServiceEndpointRequestImpl::GetDnsAliasResults() { } if (job_ && job_.value()->dns_task_results_manager()) { - // TODO(crbug.com/41493696): Call dns_alias_utility::FixUpDnsAliases(). return job_.value()->dns_task_results_manager()->GetAliases(); } @@ -165,6 +188,7 @@ void HostResolverManager::ServiceEndpointRequestImpl::OnJobCompleted( job_.reset(); SetFinalizedResultFromLegacyResults(results); + MaybeClearStaleResults(); const bool is_secure_network_error = obtained_securely && results.error() != OK; @@ -202,6 +226,10 @@ void HostResolverManager::ServiceEndpointRequestImpl:: return; } + // There are fresh endpoints available. Clear stale endpoints and info if this + // request allows stale results while refreshing. + MaybeClearStaleResults(); + CHECK(job_); CHECK(delegate_); delegate_->OnServiceEndpointsUpdated(); @@ -274,14 +302,74 @@ int HostResolverManager::ServiceEndpointRequestImpl::DoResolveLocally() { manager_->InitializeJobKeyAndIPAddress( network_anonymization_key_, parameters_, net_log_, *job_key_, ip_address); - // Try to resolve locally first. - std::optional stale_info; + // Use STALE_ALLOWED when the parameter's cache usage is ALLOWED and the + // source is not LOCAL_ONLY, to provide stale results as intermediate results. + ResolveHostParameters::CacheUsage cache_usage = parameters_.cache_usage; + if (parameters_.cache_usage == ResolveHostParameters::CacheUsage::ALLOWED && + parameters_.source != HostResolverSource::LOCAL_ONLY) { + cache_usage = ResolveHostParameters::CacheUsage::STALE_ALLOWED; + } + const bool only_ipv6_reachable = false; + HostCache::Entry results = manager_->ResolveLocally( - /*only_ipv6_reachable=*/false, *job_key_, ip_address, - parameters_.cache_usage, parameters_.secure_dns_policy, - parameters_.source, net_log_, host_cache(), &tasks_, &stale_info); - if (results.error() != ERR_DNS_CACHE_MISS || - parameters_.source == HostResolverSource::LOCAL_ONLY || tasks_.empty()) { + only_ipv6_reachable, *job_key_, ip_address, cache_usage, + parameters_.secure_dns_policy, parameters_.source, net_log_, host_cache(), + &tasks_, &stale_info_); + bool is_stale = results.error() == OK && stale_info_.has_value() && + stale_info_->is_stale(); + + if (is_stale && + parameters_.cache_usage == ResolveHostParameters::CacheUsage::ALLOWED) { + // When a stale result is found, ResolveLocally() returns the stale result + // without executing the remaining tasks, including local tasks such as + // INSECURE_CACHE_LOOKUP and HOSTS. These tasks may be able to provide a + // fresh result, and are always expected to be tried (and removed from + // `tasks_`) before starting an async Job. Call ResolveLocally() again with + // CacheUsage::ALLOWED to see we can get a fresh result. + // TODO(crbug.com/383174960): Consider refactoring ResolveLocally() so that + // we don't have to call ResolveLocally() twice. + CHECK_EQ(cache_usage, ResolveHostParameters::CacheUsage::STALE_ALLOWED); + tasks_.clear(); + std::optional maybe_fresh_info; + HostCache::Entry maybe_non_stale_results = manager_->ResolveLocally( + only_ipv6_reachable, *job_key_, ip_address, + ResolveHostParameters::CacheUsage::ALLOWED, + parameters_.secure_dns_policy, parameters_.source, net_log_, + host_cache(), &tasks_, &maybe_fresh_info); + CHECK(!maybe_fresh_info.has_value() || !maybe_fresh_info->is_stale()); + if (maybe_non_stale_results.error() != ERR_DNS_CACHE_MISS || + tasks_.empty()) { + stale_info_ = maybe_fresh_info; + results = std::move(maybe_non_stale_results); + is_stale = false; + } + CHECK(parameters_.source != HostResolverSource::LOCAL_ONLY); + } + + if (parameters_.cache_usage == ResolveHostParameters::CacheUsage::ALLOWED && + is_stale) { + stale_endpoints_ = results.ConvertToServiceEndpoints(host_.GetPort()); + if (!stale_endpoints_.empty()) { + net_log_.AddEvent( + NetLogEventType::HOST_RESOLVER_SERVICE_ENDPOINTS_STALE_RESULTS, [&] { + base::Value::List endpoints; + for (const auto& endpoint : stale_endpoints_) { + endpoints.Append(endpoint.ToValue()); + } + return base::Value::Dict().Set("endpoints", std::move(endpoints)); + }); + + // Notify delegate of stale results asynchronously because notifying + // delegate may delete `this`. + base::SequencedTaskRunner::GetCurrentDefault()->PostTask( + FROM_HERE, + base::BindOnce(&ServiceEndpointRequestImpl::NotifyDelegateOfUpdated, + weak_ptr_factory_.GetWeakPtr())); + } + CHECK(!tasks_.empty()); + } else if (results.error() != ERR_DNS_CACHE_MISS || + parameters_.source == HostResolverSource::LOCAL_ONLY || + tasks_.empty()) { SetFinalizedResultFromLegacyResults(results); error_info_ = ResolveErrorInfo(results.error()); return results.error(); @@ -315,11 +403,33 @@ void HostResolverManager::ServiceEndpointRequestImpl:: } } +void HostResolverManager::ServiceEndpointRequestImpl::MaybeClearStaleResults() { + if (parameters_.cache_usage == ResolveHostParameters::CacheUsage::ALLOWED && + stale_info_.has_value()) { + stale_endpoints_.clear(); + stale_info_.reset(); + } +} + void HostResolverManager::ServiceEndpointRequestImpl::LogCancelRequest() { net_log_.AddEvent(NetLogEventType::CANCELLED); net_log_.EndEvent(NetLogEventType::HOST_RESOLVER_MANAGER_REQUEST); } +void HostResolverManager::ServiceEndpointRequestImpl:: + NotifyDelegateOfUpdated() { + // This method is called asynchronously via a posted task. `job_` could + // be completed or cancelled before executing the task. + if (finalized_result_.has_value()) { + return; + } + + CHECK(job_); + CHECK(delegate_); + delegate_->OnServiceEndpointsUpdated(); + // Do not add code below. `this` may be deleted at this point. +} + ClientSocketFactory* HostResolverManager::ServiceEndpointRequestImpl::GetClientSocketFactory() { if (resolve_context_->url_request_context()) { diff --git a/naiveproxy/src/net/dns/host_resolver_manager_service_endpoint_request_impl.h b/naiveproxy/src/net/dns/host_resolver_manager_service_endpoint_request_impl.h index dcb427ac8f..6881984df0 100644 --- a/naiveproxy/src/net/dns/host_resolver_manager_service_endpoint_request_impl.h +++ b/naiveproxy/src/net/dns/host_resolver_manager_service_endpoint_request_impl.h @@ -54,6 +54,8 @@ class HostResolverManager::ServiceEndpointRequestImpl const std::set& GetDnsAliasResults() override; bool EndpointsCryptoReady() override; ResolveErrorInfo GetResolveErrorInfo() override; + const HostCache::EntryStaleness* GetStaleInfo() const override; + bool IsStaleWhileRefresing() const override; void ChangeRequestPriority(RequestPriority priority) override; // These should only be called from HostResolver::Job. @@ -94,8 +96,12 @@ class HostResolverManager::ServiceEndpointRequestImpl void SetFinalizedResultFromLegacyResults(const HostCache::Entry& results); + void MaybeClearStaleResults(); + void LogCancelRequest(); + void NotifyDelegateOfUpdated(); + ClientSocketFactory* GetClientSocketFactory(); State next_state_ = State::kNone; @@ -133,6 +139,12 @@ class HostResolverManager::ServiceEndpointRequestImpl std::optional job_key_; std::deque tasks_; + // These fields are set when the cache has stale results and `this` allows to + // lookup the cache. Cleared upon receiving fresh results if `this` allows + // stale results while refreshing. + std::optional stale_info_; + std::vector stale_endpoints_; + // Set when a job is associated with `this`. Must be valid unless // `resolve_context_` becomes invalid. Cleared when the endpoints are // finalized to ensure that `job_` doesn't become a dangling pointer. diff --git a/naiveproxy/src/net/dns/host_resolver_manager_unittest.h b/naiveproxy/src/net/dns/host_resolver_manager_unittest.h index 5dfd7e8a93..d90a1b19d3 100644 --- a/naiveproxy/src/net/dns/host_resolver_manager_unittest.h +++ b/naiveproxy/src/net/dns/host_resolver_manager_unittest.h @@ -100,6 +100,8 @@ class HostResolverManagerTest : public TestWithTaskEnvironment { bool GetLastIpv6ProbeResult(); void PopulateCache(const HostCache::Key& key, IPEndPoint endpoint); + void PopulateCache(const HostCache::Key& key, + std::vector endpoints); const std::pair* GetCacheHit( const HostCache::Key& key); diff --git a/naiveproxy/src/net/dns/host_resolver_mdns_task.cc b/naiveproxy/src/net/dns/host_resolver_mdns_task.cc index c5518ff186..b16599019c 100644 --- a/naiveproxy/src/net/dns/host_resolver_mdns_task.cc +++ b/naiveproxy/src/net/dns/host_resolver_mdns_task.cc @@ -4,6 +4,7 @@ #include "net/dns/host_resolver_mdns_task.h" +#include #include #include "base/check_op.h" @@ -11,7 +12,6 @@ #include "base/location.h" #include "base/memory/raw_ptr.h" #include "base/notreached.h" -#include "base/ranges/algorithm.h" #include "base/strings/string_util.h" #include "base/task/sequenced_task_runner.h" #include "net/base/ip_endpoint.h" @@ -170,11 +170,10 @@ HostCache::Entry HostResolverMdnsTask::GetResults() const { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(!transactions_.empty()); DCHECK(!completion_closure_); - DCHECK(base::ranges::all_of(transactions_, - [](const Transaction& t) { return t.IsDone(); })); + DCHECK(std::ranges::all_of(transactions_, + [](const Transaction& t) { return t.IsDone(); })); - auto found_error = - base::ranges::find_if(transactions_, &Transaction::IsError); + auto found_error = std::ranges::find_if(transactions_, &Transaction::IsError); if (found_error != transactions_.end()) { return found_error->results(); } @@ -235,14 +234,14 @@ void HostResolverMdnsTask::CheckCompletion(bool post_needed) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); // Finish immediately if any transactions completed with an error. - if (base::ranges::any_of(transactions_, - [](const Transaction& t) { return t.IsError(); })) { + if (std::ranges::any_of(transactions_, + [](const Transaction& t) { return t.IsError(); })) { Complete(post_needed); return; } - if (base::ranges::all_of(transactions_, - [](const Transaction& t) { return t.IsDone(); })) { + if (std::ranges::all_of(transactions_, + [](const Transaction& t) { return t.IsDone(); })) { Complete(post_needed); return; } diff --git a/naiveproxy/src/net/dns/mdns_client_impl.cc b/naiveproxy/src/net/dns/mdns_client_impl.cc index 88901fcbf6..8bff7d7417 100644 --- a/naiveproxy/src/net/dns/mdns_client_impl.cc +++ b/naiveproxy/src/net/dns/mdns_client_impl.cc @@ -17,7 +17,6 @@ #include "base/metrics/histogram_functions.h" #include "base/not_fatal_until.h" #include "base/observer_list.h" -#include "base/ranges/algorithm.h" #include "base/strings/string_util.h" #include "base/task/single_thread_task_runner.h" #include "base/time/clock.h" @@ -71,10 +70,10 @@ void RecordQueryMetric(mdnsQueryType query_type, std::string_view host) { if (host.ends_with("_googlecast._tcp.local")) { base::UmaHistogramEnumeration("Network.Mdns.Googlecast", query_type); - } else if (base::ranges::any_of(kPrintScanServices, - [&host](std::string_view service) { - return host.ends_with(service); - })) { + } else if (std::ranges::any_of(kPrintScanServices, + [&host](std::string_view service) { + return host.ends_with(service); + })) { base::UmaHistogramEnumeration("Network.Mdns.PrintScan", query_type); } else { base::UmaHistogramEnumeration("Network.Mdns.Other", query_type); diff --git a/naiveproxy/src/net/dns/mock_host_resolver.cc b/naiveproxy/src/net/dns/mock_host_resolver.cc index 79bee6357d..cefc44d972 100644 --- a/naiveproxy/src/net/dns/mock_host_resolver.cc +++ b/naiveproxy/src/net/dns/mock_host_resolver.cc @@ -453,6 +453,12 @@ class MockHostResolverBase::ServiceEndpointRequestImpl return resolve_error_info_; } + const HostCache::EntryStaleness* GetStaleInfo() const override { + return nullptr; + } + + bool IsStaleWhileRefresing() const override { return false; } + void ChangeRequestPriority(RequestPriority priority) override { priority_ = priority; } @@ -779,7 +785,7 @@ void MockHostResolverBase::RuleResolver::AddIPLiteralRuleWithDnsAliases( std::string_view ip_literal, std::set dns_aliases) { std::vector aliases_vector; - base::ranges::move(dns_aliases, std::back_inserter(aliases_vector)); + std::ranges::move(dns_aliases, std::back_inserter(aliases_vector)); AddIPLiteralRuleWithDnsAliases(hostname_pattern, ip_literal, std::move(aliases_vector)); diff --git a/naiveproxy/src/net/dns/mock_mdns_socket_factory.cc b/naiveproxy/src/net/dns/mock_mdns_socket_factory.cc index 66ea2d692d..90cd128c0a 100644 --- a/naiveproxy/src/net/dns/mock_mdns_socket_factory.cc +++ b/naiveproxy/src/net/dns/mock_mdns_socket_factory.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "net/dns/mock_mdns_socket_factory.h" #include diff --git a/naiveproxy/src/net/dns/opt_record_rdata.cc b/naiveproxy/src/net/dns/opt_record_rdata.cc index f100faeb61..df6dccae1b 100644 --- a/naiveproxy/src/net/dns/opt_record_rdata.cc +++ b/naiveproxy/src/net/dns/opt_record_rdata.cc @@ -168,14 +168,16 @@ uint16_t OptRecordRdata::PaddingOpt::GetCode() const { OptRecordRdata::UnknownOpt::~UnknownOpt() = default; std::unique_ptr -OptRecordRdata::UnknownOpt::CreateForTesting(uint16_t code, std::string data) { +OptRecordRdata::UnknownOpt::CreateForTesting(uint16_t code, + base::span data) { CHECK_IS_TEST(); return base::WrapUnique( new OptRecordRdata::UnknownOpt(code, std::move(data))); } -OptRecordRdata::UnknownOpt::UnknownOpt(uint16_t code, std::string data) - : Opt(std::move(data)), code_(code) { +OptRecordRdata::UnknownOpt::UnknownOpt(uint16_t code, + base::span data) + : Opt(std::string(base::as_string_view(data))), code_(code) { CHECK(!base::Contains(kOptsWithDedicatedClasses, code)); } @@ -196,7 +198,8 @@ bool OptRecordRdata::operator!=(const OptRecordRdata& other) const { } // static -std::unique_ptr OptRecordRdata::Create(std::string_view data) { +std::unique_ptr OptRecordRdata::Create( + base::span data) { auto rdata = std::make_unique(); rdata->buf_.assign(data.begin(), data.end()); @@ -204,7 +207,6 @@ std::unique_ptr OptRecordRdata::Create(std::string_view data) { while (reader.remaining() > 0u) { uint16_t opt_code, opt_data_size; base::span opt_data; - if (!reader.ReadU16BigEndian(opt_code) || !reader.ReadU16BigEndian(opt_data_size) || !base::OptionalUnwrapTo(reader.Read(opt_data_size), opt_data)) { @@ -228,8 +230,10 @@ std::unique_ptr OptRecordRdata::Create(std::string_view data) { std::string(base::as_string_view(opt_data))); break; default: - opt = base::WrapUnique(new OptRecordRdata::UnknownOpt( - opt_code, std::string(base::as_string_view(opt_data)))); + // base::span opt_data_span = + // base::as_byte_span(opt_data); + opt = base::WrapUnique( + new OptRecordRdata::UnknownOpt(opt_code, opt_data)); break; } diff --git a/naiveproxy/src/net/dns/opt_record_rdata.h b/naiveproxy/src/net/dns/opt_record_rdata.h index 129c84fb3e..52d8ce4ae5 100644 --- a/naiveproxy/src/net/dns/opt_record_rdata.h +++ b/naiveproxy/src/net/dns/opt_record_rdata.h @@ -22,7 +22,7 @@ namespace net { // OPT record format (https://tools.ietf.org/html/rfc6891): class NET_EXPORT_PRIVATE OptRecordRdata : public RecordRdata { public: - static std::unique_ptr Create(std::string_view data); + static std::unique_ptr Create(base::span data); class NET_EXPORT_PRIVATE Opt { public: @@ -152,18 +152,19 @@ class NET_EXPORT_PRIVATE OptRecordRdata : public RecordRdata { // This method must purely be used for testing. // Only the parser can instantiate an UnknownOpt object (via friend // classes). - static std::unique_ptr CreateForTesting(uint16_t code, - std::string data); + static std::unique_ptr CreateForTesting( + uint16_t code, + base::span data); uint16_t GetCode() const override; private: - UnknownOpt(uint16_t code, std::string data); + UnknownOpt(uint16_t code, base::span data); uint16_t code_; friend std::unique_ptr OptRecordRdata::Create( - std::string_view data); + base::span data); }; static constexpr uint16_t kOptsWithDedicatedClasses[] = { diff --git a/naiveproxy/src/net/dns/public/dns_over_https_config.cc b/naiveproxy/src/net/dns/public/dns_over_https_config.cc index e5ace37635..3a209769b1 100644 --- a/naiveproxy/src/net/dns/public/dns_over_https_config.cc +++ b/naiveproxy/src/net/dns/public/dns_over_https_config.cc @@ -4,6 +4,7 @@ #include "net/dns/public/dns_over_https_config.h" +#include #include #include #include @@ -12,7 +13,6 @@ #include "base/json/json_reader.h" #include "base/json/json_writer.h" -#include "base/ranges/algorithm.h" #include "base/strings/string_split.h" #include "base/strings/string_util.h" #include "base/values.h" @@ -33,7 +33,7 @@ std::vector> ParseTemplates( std::vector templates) { std::vector> parsed; parsed.reserve(templates.size()); - base::ranges::transform(templates, std::back_inserter(parsed), [](auto& s) { + std::ranges::transform(templates, std::back_inserter(parsed), [](auto& s) { return DnsOverHttpsServerConfig::FromString(std::move(s)); }); return parsed; @@ -60,10 +60,11 @@ std::optional FromValue(base::Value::Dict value) { } std::optional FromJson(std::string_view json) { - std::optional value = base::JSONReader::Read(json); - if (!value || !value->is_dict()) + std::optional value = base::JSONReader::ReadDict(json); + if (!value) { return std::nullopt; - return FromValue(std::move(*value).TakeDict()); + } + return FromValue(std::move(*value)); } } // namespace @@ -133,12 +134,12 @@ bool DnsOverHttpsConfig::operator==(const DnsOverHttpsConfig& other) const { } std::string DnsOverHttpsConfig::ToString() const { - if (base::ranges::all_of(servers(), &DnsOverHttpsServerConfig::IsSimple)) { + if (std::ranges::all_of(servers(), &DnsOverHttpsServerConfig::IsSimple)) { // Return the templates on separate lines. std::vector strings; strings.reserve(servers().size()); - base::ranges::transform(servers(), std::back_inserter(strings), - &DnsOverHttpsServerConfig::server_template_piece); + std::ranges::transform(servers(), std::back_inserter(strings), + &DnsOverHttpsServerConfig::server_template_piece); return base::JoinString(std::move(strings), "\n"); } std::string json; diff --git a/naiveproxy/src/net/dns/public/doh_provider_entry.cc b/naiveproxy/src/net/dns/public/doh_provider_entry.cc index 910a0c91aa..f79af28e8d 100644 --- a/naiveproxy/src/net/dns/public/doh_provider_entry.cc +++ b/naiveproxy/src/net/dns/public/doh_provider_entry.cc @@ -4,6 +4,7 @@ #include "net/dns/public/doh_provider_entry.h" +#include #include #include @@ -11,7 +12,6 @@ #include "base/containers/to_vector.h" #include "base/feature_list.h" #include "base/no_destructor.h" -#include "base/ranges/algorithm.h" #include "net/dns/public/dns_over_https_server_config.h" #include "net/dns/public/util.h" diff --git a/naiveproxy/src/net/dns/public/scoped_res_state.cc b/naiveproxy/src/net/dns/public/scoped_res_state.cc index f8bef3e377..89e8640a36 100644 --- a/naiveproxy/src/net/dns/public/scoped_res_state.cc +++ b/naiveproxy/src/net/dns/public/scoped_res_state.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "net/dns/public/scoped_res_state.h" #include diff --git a/naiveproxy/src/net/dns/record_parsed.cc b/naiveproxy/src/net/dns/record_parsed.cc index 2aed186353..dc0c48412b 100644 --- a/naiveproxy/src/net/dns/record_parsed.cc +++ b/naiveproxy/src/net/dns/record_parsed.cc @@ -40,6 +40,7 @@ std::unique_ptr RecordParsed::CreateFrom( if (!parser->ReadRecord(&record)) return nullptr; + base::span rdata_span = base::as_byte_span(record.rdata); bool unrecognized_type = false; switch (record.type) { case ARecordRdata::kType: @@ -64,7 +65,7 @@ std::unique_ptr RecordParsed::CreateFrom( rdata = NsecRecordRdata::Create(record.rdata, *parser); break; case OptRecordRdata::kType: - rdata = OptRecordRdata::Create(record.rdata); + rdata = OptRecordRdata::Create(rdata_span); break; case HttpsRecordRdata::kType: rdata = HttpsRecordRdata::Parse(record.rdata); diff --git a/naiveproxy/src/net/dns/resolve_context.cc b/naiveproxy/src/net/dns/resolve_context.cc index c33c25f7ab..b3bd3558eb 100644 --- a/naiveproxy/src/net/dns/resolve_context.cc +++ b/naiveproxy/src/net/dns/resolve_context.cc @@ -4,6 +4,7 @@ #include "net/dns/resolve_context.h" +#include #include #include #include @@ -19,7 +20,6 @@ #include "base/no_destructor.h" #include "base/numerics/safe_conversions.h" #include "base/observer_list.h" -#include "base/ranges/algorithm.h" #include "base/strings/stringprintf.h" #include "base/time/clock.h" #include "base/time/tick_clock.h" @@ -55,7 +55,7 @@ const size_t kRttBucketCount = 350; // Target percentile in the RTT histogram used for fallback period. const int kRttPercentile = 99; // Number of samples to seed the histogram with. -const base::HistogramBase::Count kNumSeeds = 2; +const base::HistogramBase::Count32 kNumSeeds = 2; DohProviderEntry::List FindDohProvidersMatchingServerConfig( DnsOverHttpsServerConfig server_config) { @@ -98,7 +98,7 @@ class RttBuckets : public base::BucketRanges { RttBuckets() : base::BucketRanges(kRttBucketCount + 1) { base::Histogram::InitializeBucketRanges( 1, - base::checked_cast( + base::checked_cast( kRttMax.InMilliseconds()), this); } @@ -114,7 +114,7 @@ static std::unique_ptr GetRttHistogram( std::unique_ptr histogram = std::make_unique(GetRttBuckets()); // Seed histogram with 2 samples at |rtt_estimate|. - histogram->Accumulate(base::checked_cast( + histogram->Accumulate(base::checked_cast( rtt_estimate.InMilliseconds()), kNumSeeds); return histogram; @@ -164,7 +164,7 @@ ResolveContext::ResolveContext(URLRequestContext* url_request_context, host_cache_(CreateHostCache(enable_caching)), host_resolver_cache_( CreateHostResolverCache(enable_caching, clock, tick_clock)), - isolation_info_(IsolationInfo::CreateTransient()) { + isolation_info_(IsolationInfo::CreateTransient(/*nonce=*/std::nullopt)) { max_fallback_period_ = GetMaxFallbackPeriod(); } @@ -206,8 +206,8 @@ size_t ResolveContext::NumAvailableDohServers(const DnsSession* session) const { if (!IsCurrentSession(session)) return 0; - return base::ranges::count_if(doh_server_stats_, - &ServerStatsToDohAvailability); + return std::ranges::count_if(doh_server_stats_, + &ServerStatsToDohAvailability); } void ResolveContext::RecordServerFailure(size_t server_index, @@ -295,7 +295,7 @@ void ResolveContext::RecordRtt(size_t server_index, // Histogram-based method. stats->rtt_histogram->Accumulate( - base::saturated_cast(rtt.InMilliseconds()), + base::saturated_cast(rtt.InMilliseconds()), 1); } @@ -496,14 +496,14 @@ base::TimeDelta ResolveContext::NextFallbackPeriodHelper( if (initial_fallback_period_ > max_fallback_period_) return initial_fallback_period_; - static_assert(std::numeric_limits::is_signed, + static_assert(std::numeric_limits::is_signed, "histogram base count assumed to be signed"); // Use fixed percentile of observed samples. const base::SampleVector& samples = *server_stats->rtt_histogram; - base::HistogramBase::Count total = samples.TotalCount(); - base::HistogramBase::Count remaining_count = kRttPercentile * total / 100; + base::HistogramBase::Count32 total = samples.TotalCount(); + base::HistogramBase::Count32 remaining_count = kRttPercentile * total / 100; size_t index = 0; while (remaining_count > 0 && index < GetRttBuckets()->size()) { remaining_count -= samples.GetCountAtIndex(index); diff --git a/naiveproxy/src/net/dns/stale_host_resolver.h b/naiveproxy/src/net/dns/stale_host_resolver.h index 97d2a33eb4..77b825a50e 100644 --- a/naiveproxy/src/net/dns/stale_host_resolver.h +++ b/naiveproxy/src/net/dns/stale_host_resolver.h @@ -16,6 +16,7 @@ #include "net/base/completion_once_callback.h" #include "net/base/net_export.h" #include "net/base/network_anonymization_key.h" +#include "net/dns/context_host_resolver.h" #include "net/dns/host_resolver.h" #include "net/log/net_log_with_source.h" #include "url/scheme_host_port.h" @@ -25,7 +26,6 @@ class TickClock; } // namespace base namespace net { -class ContextHostResolver; namespace { class StaleHostResolverTest; diff --git a/naiveproxy/src/net/docs/code-reviews.md b/naiveproxy/src/net/docs/code-reviews.md new file mode 100644 index 0000000000..9aa1e172bc --- /dev/null +++ b/naiveproxy/src/net/docs/code-reviews.md @@ -0,0 +1,127 @@ +# //net Code Reviews + +This page documents responsibilities of //net code reviewers. For the general +guidelines, see [Code Reviews](/docs/code_reviews.md). + +## New features and behavior changes + +*See*: +[The general flag guarding guidelines](/docs/flag_guarding_guidelines.md). + +Changes that introduce new features or non-trivial behavior should be controlled +by a feature flag defined in [net/base/features.h](../base/features.h). This +allows us to disable the feature or revert to the previous behavior if serious +issues arise, without requiring an emergency fix or reverting CLs. + +The term "non-trivial behavior changes" is ambiguous, and it is difficult to +define it clearly. Whether to add a flag should be determined on a case-by-case +basis. For example, when changing the interpretation of an HTTP header, it would +be necessary to add a flag. + +Code whose behavior is influenced by the feature flag should be tested +both with and without the flag enabled, using +[INSTANTIATE_TEST_SUITE_P](https://google.github.io/googletest/reference/testing.html#INSTANTIATE_TEST_SUITE_P). + +## Code coverage requirements + +Code in //net is also used in Cronet which runs the code in very different +configurations to Chrome. This creates a risk that a configuration that is +untested in Chrome could cause breakage in an Android app. As one way to +mitigate this risk, //net has higher code coverage requirements than most of +Chrome. + +Our aim is to have 100% unit test coverage of non-trivial reachable code paths. +Look for coverage gaps in Gerrit amd request additional tests if appropriate +while respecting the code author's time. + +*See also*: [Code Coverage in Chromium](/docs/testing/code_coverage.md) + +## Use of appropriate types + +As in the rest of Chrome, `std::string` should be used for UTF-8 text and +`std::vector` should be used for binary data. `net::IOBuffer` can +also be used for binary data, but use the newer +[spanified interfaces](/base/containers/span.h) and not the legacy interfaces +based on char* pointers. + +A large amount of legacy code in //net uses `std::string` for binary data. +Try to avoid spreading this usage any further. + +## Web exposing features + +*See*: +[Launching Features](https://www.chromium.org/blink/launching-features/). + +If the changes affect web API behavior or could have potential impacts for +Web developers, make sure to ask the authors to follow the guidelines +outlined on the "Launching Features" page. + +[TLS Encrypted ClientHello](https://groups.google.com/a/chromium.org/g/blink-dev/c/CmlXjQeNWDI/m/hx-_4lNBAQAJ) +is an example that needed to follow the +guidelines, even though it didn't involve explicit changes in web exposed APIs. + +## Standards + +We do not implement standards just because they exist. If a CL implements +a standard that is not implemented in other browsers, make sure there is +an explainer that clearly describes the user benefit. + +We implement standards from the WHATWG, W3C and IETF. Where they contradict, +we attempt to align with other browsers. + +New HTTP headers should be using +[structured fields](https://datatracker.ietf.org/doc/html/rfc8941), or have a +good reason not to. + +Try to verify that the implementation matches the standard. + +We deviate from standards for privacy, security and iteroperability reasons. +Be careful of CLs that improve standards compliance at the cost of other +factors. + +## Security + +//net has access to sensitive user data. Every parser should have a +fuzzer. + +Parsers should operate on `std::string_view` or `base::span`. + +## Performance + +Most of the code in //net is user-visible performance critical. Look out +for common performance pitfalls + +* Unnecessary copying and allocation. + * Unnecessary string copies are common. + * Beware of functions taking `const std::string&` parameters. Unless all + current and future callers already have a string, this will result in + silent string copies. Usually `std::string_view` is a better choice. + * Using `std::vector::push_back()` without `reserve()` is a common source of + unnecessary copies and allocations. Use `base::ToVector()` where + appropriate. +* Duplicate work. + * Is the same thing parsed multiple times? +* Algorithmic complexity + * Could this O(N^2) algorithm be O(N log N)? Could this O(N) algorithm be + O(1)? + +## Dependencies and layering + +Because of Cronet's strict size restrictions, the bar for adding new +dependencies to //net is very high. + +Do not add a dependency on mojo. + +//net is an implementation of the lower levels of +[the Fetch specification](https://fetch.spec.whatwg.org/), very roughly +corresponding to +[HTTP-network-or-cache fetch](https://fetch.spec.whatwg.org/#http-network-or-cache-fetch). +It should not know or care about higher-level concepts like +[windows](https://html.spec.whatwg.org/#window), +[frames](https://html.spec.whatwg.org/#frame) or +[CORS](https://fetch.spec.whatwg.org/#http-cors-protocol). This rule is +frequently bent for pragmatic reasons, but be cautious of CLs that talk about +higher-level Web Platform features. + +Another way to answer the question "does it belong in //net?" is to ask +"Would an Android application using Cronet need this?" diff --git a/naiveproxy/src/net/docs/filter.md b/naiveproxy/src/net/docs/filter.md index 3aa1fc1f42..94ec6a8a7a 100644 --- a/naiveproxy/src/net/docs/filter.md +++ b/naiveproxy/src/net/docs/filter.md @@ -4,6 +4,7 @@ bytes from a URLRequestJob. Currently, the following streams are implemented: * gzip (handling "deflate" and "gzip" Content-Encodings) * brotli (handling "br" Content-Encoding) +* zstd (handling "zstd" Content-Encoding) Source streams conceptually form a chain, with the URLRequestJob as both the beginning and end of the chain, meaning the URLRequestJob produces raw bytes at @@ -33,3 +34,6 @@ This function can return either synchronously or asynchronously via the supplied callback. The source stream chain is "pull-based", in that data does not propagate through the chain until requested by the final consumer of the filtered data. + +Shared dictionary decompression for encodings "dcb" and "dcz" is handled by a +different mechanism. See the SharedDictionaryNetworkTransaction class. diff --git a/naiveproxy/src/net/extras/sqlite/sqlite_persistent_cookie_store.cc b/naiveproxy/src/net/extras/sqlite/sqlite_persistent_cookie_store.cc index 2b199a891e..b3a2e8303e 100644 --- a/naiveproxy/src/net/extras/sqlite/sqlite_persistent_cookie_store.cc +++ b/naiveproxy/src/net/extras/sqlite/sqlite_persistent_cookie_store.cc @@ -36,6 +36,7 @@ #include "net/cookies/canonical_cookie.h" #include "net/cookies/cookie_constants.h" #include "net/cookies/cookie_util.h" +#include "net/cookies/unique_cookie_key.h" #include "net/extras/sqlite/cookie_crypto_delegate.h" #include "net/extras/sqlite/sqlite_persistent_store_backend_base.h" #include "net/log/net_log.h" @@ -488,8 +489,7 @@ class SQLitePersistentCookieStore::Backend } typedef std::list> PendingOperationsForKey; - typedef std::map + typedef std::map PendingOperationsMap; PendingOperationsMap pending_ GUARDED_BY(lock_); PendingOperationsMap::size_type num_pending_ GUARDED_BY(lock_) = 0; diff --git a/naiveproxy/src/net/extras/sqlite/sqlite_persistent_store_backend_base.cc b/naiveproxy/src/net/extras/sqlite/sqlite_persistent_store_backend_base.cc index 535a3b5cf7..4a4af5b5b5 100644 --- a/naiveproxy/src/net/extras/sqlite/sqlite_persistent_store_backend_base.cc +++ b/naiveproxy/src/net/extras/sqlite/sqlite_persistent_store_backend_base.cc @@ -94,9 +94,9 @@ bool SQLitePersistentStoreBackendBase::InitializeDatabase() { // TODO(crbug.com/40262972): Remove explicit_locking = false. This currently // needs to be set to false because of several failing MigrationTests. db_ = std::make_unique( - sql::DatabaseOptions{ - .exclusive_locking = false, - .exclusive_database_file_lock = enable_exclusive_access_}, + sql::DatabaseOptions() + .set_exclusive_locking(false) + .set_exclusive_database_file_lock(enable_exclusive_access_), histogram_tag_); // base::Unretained is safe because |this| owns (and therefore outlives) the diff --git a/naiveproxy/src/net/filter/filter_source_stream.cc b/naiveproxy/src/net/filter/filter_source_stream.cc index 8c5e355349..074876220a 100644 --- a/naiveproxy/src/net/filter/filter_source_stream.cc +++ b/naiveproxy/src/net/filter/filter_source_stream.cc @@ -16,6 +16,8 @@ #include "base/strings/string_util.h" #include "net/base/io_buffer.h" #include "net/base/net_errors.h" +#include "net/base/trace_constants.h" +#include "net/base/tracing.h" namespace net { @@ -154,17 +156,23 @@ int FilterSourceStream::DoFilterData() { DCHECK(drainable_input_buffer_); size_t consumed_bytes = 0; + const int bytes_remaining = drainable_input_buffer_->BytesRemaining(); + TRACE_EVENT_BEGIN2(NetTracingCategory(), "FilterSourceStream::FilterData", + "remaining", bytes_remaining, "upstream_end_reached", + upstream_end_reached_); base::expected bytes_output = FilterData( output_buffer_.get(), output_buffer_size_, drainable_input_buffer_.get(), - drainable_input_buffer_->BytesRemaining(), &consumed_bytes, - upstream_end_reached_); + bytes_remaining, &consumed_bytes, upstream_end_reached_); + TRACE_EVENT_END2(NetTracingCategory(), "FilterSourceStream::FilterData", + "consumed_bytes", consumed_bytes, "output_or_error", + bytes_output.has_value() + ? base::checked_cast(bytes_output.value()) + : bytes_output.error()); - const auto bytes_remaining = - base::checked_cast(drainable_input_buffer_->BytesRemaining()); if (bytes_output.has_value() && bytes_output.value() == 0) { - DCHECK_EQ(consumed_bytes, bytes_remaining); + DCHECK_EQ(consumed_bytes, base::checked_cast(bytes_remaining)); } else { - DCHECK_LE(consumed_bytes, bytes_remaining); + DCHECK_LE(consumed_bytes, base::checked_cast(bytes_remaining)); } // FilterData() is not allowed to return ERR_IO_PENDING. if (!bytes_output.has_value()) diff --git a/naiveproxy/src/net/filter/gzip_source_stream.cc b/naiveproxy/src/net/filter/gzip_source_stream.cc index d4375b54c8..d5f4d537cf 100644 --- a/naiveproxy/src/net/filter/gzip_source_stream.cc +++ b/naiveproxy/src/net/filter/gzip_source_stream.cc @@ -10,6 +10,7 @@ #include "net/filter/gzip_source_stream.h" #include +#include #include #include @@ -254,8 +255,8 @@ base::expected GzipSourceStream::FilterData( } bool GzipSourceStream::InsertZlibHeader() { - char dummy_header[] = {0x78, 0x01}; - char dummy_output[4]; + auto dummy_header = std::to_array({0x78, 0x01}); + std::array dummy_output; inflateReset(zlib_stream_.get()); zlib_stream_.get()->next_in = reinterpret_cast(&dummy_header[0]); diff --git a/naiveproxy/src/net/filter/source_stream.h b/naiveproxy/src/net/filter/source_stream.h index 5c90ea8db6..1a7454750d 100644 --- a/naiveproxy/src/net/filter/source_stream.h +++ b/naiveproxy/src/net/filter/source_stream.h @@ -7,9 +7,7 @@ #include -#include "base/functional/callback.h" #include "net/base/completion_once_callback.h" -#include "net/base/net_errors.h" #include "net/base/net_export.h" namespace net { diff --git a/naiveproxy/src/net/first_party_sets/first_party_sets_validator.cc b/naiveproxy/src/net/first_party_sets/first_party_sets_validator.cc index 64c013ddcb..790c0c5f3f 100644 --- a/naiveproxy/src/net/first_party_sets/first_party_sets_validator.cc +++ b/naiveproxy/src/net/first_party_sets/first_party_sets_validator.cc @@ -4,7 +4,8 @@ #include "net/first_party_sets/first_party_sets_validator.h" -#include "base/ranges/algorithm.h" +#include + #include "net/base/schemeful_site.h" namespace net { @@ -36,7 +37,7 @@ void FirstPartySetsValidator::Update(const SchemefulSite& site, } bool FirstPartySetsValidator::IsValid() const { - return base::ranges::all_of(primary_states_, [](const auto& pair) -> bool { + return std::ranges::all_of(primary_states_, [](const auto& pair) -> bool { return pair.second.IsValid(); }); } diff --git a/naiveproxy/src/net/first_party_sets/global_first_party_sets.cc b/naiveproxy/src/net/first_party_sets/global_first_party_sets.cc index 4386f0238d..4086e4ca4b 100644 --- a/naiveproxy/src/net/first_party_sets/global_first_party_sets.cc +++ b/naiveproxy/src/net/first_party_sets/global_first_party_sets.cc @@ -4,6 +4,7 @@ #include "net/first_party_sets/global_first_party_sets.h" +#include #include #include #include @@ -16,7 +17,6 @@ #include "base/containers/flat_set.h" #include "base/functional/function_ref.h" #include "base/not_fatal_until.h" -#include "base/ranges/algorithm.h" #include "base/types/optional_ref.h" #include "net/base/schemeful_site.h" #include "net/first_party_sets/addition_overlaps_union_find.h" @@ -88,7 +88,7 @@ GlobalFirstPartySets::GlobalFirstPartySets( CHECK(aliases_.empty()); } - CHECK(base::ranges::all_of(aliases_, [&](const auto& pair) { + CHECK(std::ranges::all_of(aliases_, [&](const auto& pair) { return entries_.contains(pair.second); })); CHECK(IsValid(), base::NotFatalUntil::M130) << "Sets must be valid"; @@ -299,8 +299,8 @@ GlobalFirstPartySets::FindPrimariesAffectedByReplacements( FirstPartySetsContextConfig GlobalFirstPartySets::ComputeConfig( const SetsMutation& mutation) const { - if (base::ranges::all_of(mutation.replacements(), &SingleSet::empty) && - base::ranges::all_of(mutation.additions(), &SingleSet::empty)) { + if (std::ranges::all_of(mutation.replacements(), &SingleSet::empty) && + std::ranges::all_of(mutation.additions(), &SingleSet::empty)) { // Nothing to do. return FirstPartySetsContextConfig(); } @@ -312,10 +312,10 @@ FirstPartySetsContextConfig GlobalFirstPartySets::ComputeConfig( // Maps a site to its override. std::vector> site_to_override; - base::ranges::transform(replacements, std::back_inserter(site_to_override), - SiteAndEntryToSiteAndOverride); - base::ranges::transform(additions, std::back_inserter(site_to_override), - SiteAndEntryToSiteAndOverride); + std::ranges::transform(replacements, std::back_inserter(site_to_override), + SiteAndEntryToSiteAndOverride); + std::ranges::transform(additions, std::back_inserter(site_to_override), + SiteAndEntryToSiteAndOverride); // Maps old primary site to new entry. const base::flat_map @@ -399,7 +399,7 @@ std::vector> GlobalFirstPartySets::NormalizeAdditionSets( const std::vector>& addition_sets) const { - if (base::ranges::all_of(addition_sets, &SingleSet::empty)) { + if (std::ranges::all_of(addition_sets, &SingleSet::empty)) { // Nothing to do. return {}; } diff --git a/naiveproxy/src/net/first_party_sets/local_set_declaration.cc b/naiveproxy/src/net/first_party_sets/local_set_declaration.cc index e86933593a..b947d813a8 100644 --- a/naiveproxy/src/net/first_party_sets/local_set_declaration.cc +++ b/naiveproxy/src/net/first_party_sets/local_set_declaration.cc @@ -4,7 +4,8 @@ #include "net/first_party_sets/local_set_declaration.h" -#include "base/ranges/algorithm.h" +#include + #include "net/base/schemeful_site.h" #include "net/first_party_sets/first_party_set_entry.h" @@ -17,7 +18,7 @@ LocalSetDeclaration::LocalSetDeclaration( base::flat_map aliases) : entries_(std::move(set_entries)), aliases_(std::move(aliases)) { // Every alias must map to some canonical site in `entries_`. - CHECK(base::ranges::all_of( + CHECK(std::ranges::all_of( aliases_, [&](const auto& p) { return entries_.contains(p.second); })); if (!entries_.empty()) { @@ -27,7 +28,7 @@ LocalSetDeclaration::LocalSetDeclaration( // All provided entries must have the same primary site. I.e., there must // only be one set. const SchemefulSite& primary = entries_.begin()->second.primary(); - CHECK(base::ranges::all_of( + CHECK(std::ranges::all_of( entries_, [&](const std::pair& pair) { return pair.second.primary() == primary; diff --git a/naiveproxy/src/net/first_party_sets/sets_mutation.cc b/naiveproxy/src/net/first_party_sets/sets_mutation.cc index 368f013031..6521a08079 100644 --- a/naiveproxy/src/net/first_party_sets/sets_mutation.cc +++ b/naiveproxy/src/net/first_party_sets/sets_mutation.cc @@ -4,10 +4,10 @@ #include "net/first_party_sets/sets_mutation.h" +#include #include #include -#include "base/ranges/algorithm.h" #include "net/base/schemeful_site.h" #include "net/first_party_sets/first_party_set_entry.h" @@ -32,10 +32,10 @@ SetsMutation::SetsMutation( site_counts[site]++; } } - CHECK(base::ranges::all_of(site_counts, - [](const std::pair& p) { - return p.second == 1; - })); + CHECK(std::ranges::all_of(site_counts, + [](const std::pair& p) { + return p.second == 1; + })); } SetsMutation::SetsMutation() = default; diff --git a/naiveproxy/src/net/http/http_auth.cc b/naiveproxy/src/net/http/http_auth.cc index a61596fed5..9d7e9a45d6 100644 --- a/naiveproxy/src/net/http/http_auth.cc +++ b/naiveproxy/src/net/http/http_auth.cc @@ -2,14 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifdef UNSAFE_BUFFERS_BUILD -// TODO(crbug.com/40284755): Remove this and spanify to fix the errors. -#pragma allow_unsafe_buffers -#endif - #include "net/http/http_auth.h" #include +#include #include #include @@ -31,9 +27,14 @@ namespace net { namespace { -const char* const kSchemeNames[] = {kBasicAuthScheme, kDigestAuthScheme, - kNtlmAuthScheme, kNegotiateAuthScheme, - kSpdyProxyAuthScheme, kMockAuthScheme}; +const auto kSchemeNames = std::to_array({ + kBasicAuthScheme, + kDigestAuthScheme, + kNtlmAuthScheme, + kNegotiateAuthScheme, + kSpdyProxyAuthScheme, + kMockAuthScheme, +}); } // namespace HttpAuth::Identity::Identity() = default; diff --git a/naiveproxy/src/net/http/http_auth_cache.cc b/naiveproxy/src/net/http/http_auth_cache.cc index cdd77cc1af..10a11db6f3 100644 --- a/naiveproxy/src/net/http/http_auth_cache.cc +++ b/naiveproxy/src/net/http/http_auth_cache.cc @@ -304,14 +304,14 @@ bool HttpAuthCache::Remove( return false; } -void HttpAuthCache::ClearEntriesAddedBetween( +bool HttpAuthCache::ClearEntriesAddedBetween( base::Time begin_time, base::Time end_time, base::RepeatingCallback url_matcher) { if (begin_time.is_min() && end_time.is_max() && !url_matcher) { - ClearAllEntries(); - return; + return ClearAllEntries(); } + const size_t num_entries_before = entries_.size(); std::erase_if(entries_, [begin_time, end_time, url_matcher]( const EntryMap::value_type& entry_map_pair) { const Entry& entry = entry_map_pair.second; @@ -320,10 +320,15 @@ void HttpAuthCache::ClearEntriesAddedBetween( (url_matcher ? url_matcher.Run(entry.scheme_host_port().GetURL()) : true); }); + return entries_.size() != num_entries_before; } -void HttpAuthCache::ClearAllEntries() { +bool HttpAuthCache::ClearAllEntries() { + if (entries_.empty()) { + return false; + } entries_.clear(); + return true; } bool HttpAuthCache::UpdateStaleChallenge( diff --git a/naiveproxy/src/net/http/http_auth_cache.h b/naiveproxy/src/net/http/http_auth_cache.h index 960b957603..1fbbbc4b2c 100644 --- a/naiveproxy/src/net/http/http_auth_cache.h +++ b/naiveproxy/src/net/http/http_auth_cache.h @@ -205,13 +205,14 @@ class NET_EXPORT HttpAuthCache { // Clears cache entries added between |begin_time| inclusively and |end_time| // exclusively. Clears all entries if |begin_time| and |end_time| are equal to // base::Time::Min() and base::Time::Max() respectively. - void ClearEntriesAddedBetween( + // Returns true if any entries were cleared. + bool ClearEntriesAddedBetween( base::Time begin_time, base::Time end_time, base::RepeatingCallback url_matcher); - // Clears all added entries. - void ClearAllEntries(); + // Clears all added entries. Returns true if any entries were cleared. + bool ClearAllEntries(); // Updates a stale digest entry on server |scheme_host_port| for realm |realm| // and scheme |scheme|. The cached auth challenge is replaced with diff --git a/naiveproxy/src/net/http/http_cache.cc b/naiveproxy/src/net/http/http_cache.cc index 0c24ffb882..a39d3e8fb9 100644 --- a/naiveproxy/src/net/http/http_cache.cc +++ b/naiveproxy/src/net/http/http_cache.cc @@ -9,6 +9,7 @@ #include "net/http/http_cache.h" +#include #include #include #include @@ -32,7 +33,6 @@ #include "base/not_fatal_until.h" #include "base/numerics/safe_conversions.h" #include "base/pickle.h" -#include "base/ranges/algorithm.h" #include "base/strings/strcat.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" @@ -409,6 +409,12 @@ HttpCache::HttpCache(std::unique_ptr network_layer, keys_marked_no_store_( features::kAvoidEntryCreationForNoStoreCacheSize.Get()) { g_init_cache = true; + if (base::FeatureList::IsEnabled(features::kHttpCacheNoVarySearch)) { + size_t max_entries = features::kHttpCacheNoVarySearchCacheMaxEntries.Get(); + if (max_entries) { + no_vary_search_cache_.emplace(static_cast(max_entries)); + } + } HttpNetworkSession* session = network_layer_->GetSession(); // Session may be NULL in unittests. // TODO(mmenke): Seems like tests could be changed to provide a session, @@ -613,6 +619,9 @@ std::string HttpCache::GetResourceURLFromHttpCacheKey(const std::string& key) { // static bool HttpCache::CanGenerateCacheKeyForRequest(const HttpRequestInfo* request) { + // WARNING: If this function is changed to look at `request->url` in future, + // it will break GenerateCacheKeyForRequestWithAlternateURL(). Add an extra + // `url` parameter instead. if (IsSplitCacheEnabled()) { if (request->network_isolation_key.IsTransient()) { return false; @@ -767,6 +776,14 @@ HttpCache::ExperimentMode HttpCache::GetExperimentMode() { // static std::optional HttpCache::GenerateCacheKeyForRequest( const HttpRequestInfo* request) { + return GenerateCacheKeyForRequestWithAlternateURL(request, request->url); +} + +// static +std::optional +HttpCache::GenerateCacheKeyForRequestWithAlternateURL( + const HttpRequestInfo* request, + const GURL& url) { CHECK(request); if (!CanGenerateCacheKeyForRequest(request)) { @@ -777,7 +794,7 @@ std::optional HttpCache::GenerateCacheKeyForRequest( request->upload_data_stream ? request->upload_data_stream->identifier() : int64_t(0); return GenerateCacheKey( - request->url, request->load_flags, request->network_isolation_key, + url, request->load_flags, request->network_isolation_key, upload_data_identifier, request->is_subframe_document_resource, request->is_main_frame_navigation, request->initiator); } @@ -1173,7 +1190,7 @@ void HttpCache::DoneWithEntry(scoped_refptr& entry, } // Transaction is waiting in the done_headers_queue. - auto it = base::ranges::find(entry->done_headers_queue(), transaction); + auto it = std::ranges::find(entry->done_headers_queue(), transaction); if (it != entry->done_headers_queue().end()) { entry->done_headers_queue().erase(it); diff --git a/naiveproxy/src/net/http/http_cache.h b/naiveproxy/src/net/http/http_cache.h index c946b9ddb4..0924f12139 100644 --- a/naiveproxy/src/net/http/http_cache.h +++ b/naiveproxy/src/net/http/http_cache.h @@ -43,6 +43,7 @@ #include "net/base/request_priority.h" #include "net/disk_cache/disk_cache.h" #include "net/http/http_transaction_factory.h" +#include "net/http/no_vary_search_cache.h" class GURL; @@ -266,6 +267,13 @@ class NET_EXPORT HttpCache : public HttpTransactionFactory { static std::optional GenerateCacheKeyForRequest( const HttpRequestInfo* request); + // Generates the cache key for a request, but using a different URL. This is + // more efficient than copying the HttpRequestInfo object and changing the + // URL. + static std::optional GenerateCacheKeyForRequestWithAlternateURL( + const HttpRequestInfo* request, + const GURL& url); + enum class ExperimentMode { // No additional partitioning is done for top-level navigations. kStandard, @@ -803,6 +811,11 @@ class NET_EXPORT HttpCache : public HttpTransactionFactory { // Used to track which keys led to a no-store response. base::LRUCacheSet keys_marked_no_store_; + // Set if the kHttpCacheNoVarySearch feature is enabled. Translates the URL in + // the request into the URL of a previous response that is equivalent + // according to the rules of the No-Vary-Search header in the response. + std::optional no_vary_search_cache_; + THREAD_CHECKER(thread_checker_); base::WeakPtrFactory weak_factory_{this}; diff --git a/naiveproxy/src/net/http/http_cache_transaction.cc b/naiveproxy/src/net/http/http_cache_transaction.cc index f2fcc3f914..e211a8a4e4 100644 --- a/naiveproxy/src/net/http/http_cache_transaction.cc +++ b/naiveproxy/src/net/http/http_cache_transaction.cc @@ -9,6 +9,8 @@ #include "net/http/http_cache_transaction.h" +#include + #include "base/time/time.h" #include "build/build_config.h" // For IS_POSIX @@ -23,6 +25,8 @@ #include #include "base/auto_reset.h" +#include "base/check.h" +#include "base/check_op.h" #include "base/compiler_specific.h" #include "base/containers/fixed_flat_set.h" #include "base/containers/span.h" @@ -44,6 +48,7 @@ #include "net/base/features.h" #include "net/base/load_flags.h" #include "net/base/load_timing_info.h" +#include "net/base/net_errors.h" #include "net/base/trace_constants.h" #include "net/base/tracing.h" #include "net/base/transport_info.h" @@ -60,6 +65,7 @@ #include "net/http/http_response_headers.h" #include "net/http/http_status_code.h" #include "net/http/http_util.h" +#include "net/http/no_vary_search_cache.h" #include "net/log/net_log_event_type.h" #include "net/ssl/ssl_cert_request_info.h" #include "net/ssl/ssl_config_service.h" @@ -123,10 +129,10 @@ struct ValidationHeaderInfo { const char* related_response_header_name; }; -constexpr ValidationHeaderInfo kValidationHeaders[] = { +constexpr auto kValidationHeaders = std::to_array({ {"if-modified-since", "last-modified"}, {"if-none-match", "etag"}, -}; +}); // If the request includes one of these request headers, then avoid reusing // our cached copy if any. @@ -163,6 +169,13 @@ bool HeaderMatches(const HttpRequestHeaders& headers, return false; } +// Methods other than "GET" or "HEAD" can have request bodies, which causes +// problems for the request matching. +// TODO(https://crbug.com/390459312): Consider supporting additional methods. +bool MethodUsesNoVarySearch(const std::string& method) { + return method == "GET" || method == "HEAD"; +} + } // namespace #define CACHE_STATUS_HISTOGRAMS(type) \ @@ -177,7 +190,8 @@ bool HeaderMatches(const HttpRequestHeaders& headers, HttpCache::Transaction::Transaction(RequestPriority priority, HttpCache* cache) : trace_id_(GetNextTraceId(cache)), priority_(priority), - cache_(cache->GetWeakPtr()) { + cache_(cache->GetWeakPtr()), + read_no_vary_search_cache_(cache->no_vary_search_cache_) { static_assert(HttpCache::Transaction::kNumValidationHeaders == std::size(kValidationHeaders), "invalid number of validation headers"); @@ -1144,7 +1158,7 @@ int HttpCache::Transaction::DoGetBackendComplete(int result) { if (mode_ == NONE) { if (partial_) { - partial_->RestoreHeaders(&custom_request_->extra_headers); + partial_->RestoreHeaders(&mutable_request_->extra_headers); partial_.reset(); } TransitionToState(STATE_SEND_REQUEST); @@ -1178,6 +1192,11 @@ int HttpCache::Transaction::DoInitEntry() { return OK; } + if ((mode_ & READ) && read_no_vary_search_cache_ && + IsNoVarySearchApplicable()) { + no_vary_search_use_result_ = LookupRequestInNoVarySearchCache(); + } + TransitionToState(STATE_OPEN_OR_CREATE_ENTRY); return OK; } @@ -1252,6 +1271,15 @@ int HttpCache::Transaction::DoOpenOrCreateEntry() { return cache_->OpenEntry(cache_key_, &new_entry_, this); } + if (IsUsingURLFromNoVarySearchCache()) { + // We should never create a new entry with the original URL. + if (entry_not_suitable) { + return ERR_CACHE_ENTRY_NOT_SUITABLE; + } + + return cache_->OpenEntry(cache_key_, &new_entry_, this); + } + return cache_->OpenOrCreateEntry(cache_key_, &new_entry_, this); } @@ -1298,6 +1326,8 @@ int HttpCache::Transaction::DoOpenOrCreateEntryComplete(int result) { base::TimeTicks::Now() - first_cache_access_since_); } + CHECK(!IsUsingURLFromNoVarySearchCache()); + // Entry was created so mode changes to WRITE. mode_ = WRITE; } @@ -1311,6 +1341,21 @@ int HttpCache::Transaction::DoOpenOrCreateEntryComplete(int result) { return OK; } + // This handles the case where opening the disk cache entry failed, or it was + // found to be unusable due to in-memory flags. + if (IsUsingURLFromNoVarySearchCache()) { + if (result == ERR_CACHE_ENTRY_NOT_SUITABLE) { + // If a future request had the LOAD_SKIP_CACHE_VALIDATION flag the entry + // would be usable, so don't delete it. + return RestartWithoutNoVarySearchCache( + RestartCacheEntryAction::kDontErase, + NoVarySearchUseResult::kNotSuitable); + } else { + return RestartWithoutNoVarySearchCache( + RestartCacheEntryAction::kErase, NoVarySearchUseResult::kNotOpenable); + } + } + if (ShouldOpenOnlyMethods() || result == ERR_CACHE_ENTRY_NOT_SUITABLE) { // Bypassing the cache. mode_ = NONE; @@ -1318,9 +1363,9 @@ int HttpCache::Transaction::DoOpenOrCreateEntryComplete(int result) { return OK; } - // Since the operation failed, what we do next depends on the mode_ which can - // be the following: READ, READ_WRITE, or UPDATE. Note: mode_ cannot be WRITE - // or NONE at this point as DoInitEntry() handled those cases. + // Since the operation failed, what we do next depends on the mode_ which + // can be the following: READ, READ_WRITE, or UPDATE. Note: mode_ cannot be + // WRITE or NONE at this point as DoInitEntry() handled those cases. switch (mode_) { case READ: @@ -1333,7 +1378,7 @@ int HttpCache::Transaction::DoOpenOrCreateEntryComplete(int result) { // cache entry and read from the network directly. mode_ = NONE; if (partial_) { - partial_->RestoreHeaders(&custom_request_->extra_headers); + partial_->RestoreHeaders(&mutable_request_->extra_headers); } TransitionToState(STATE_SEND_REQUEST); break; @@ -1414,7 +1459,7 @@ int HttpCache::Transaction::DoCreateEntryComplete(int result) { mode_ = NONE; if (!done_headers_create_new_entry_) { if (partial_) { - partial_->RestoreHeaders(&custom_request_->extra_headers); + partial_->RestoreHeaders(&mutable_request_->extra_headers); } TransitionToState(STATE_SEND_REQUEST); return OK; @@ -1558,7 +1603,7 @@ int HttpCache::Transaction::DoAddToEntryComplete(int result) { mode_ = NONE; TransitionToState(STATE_SEND_REQUEST); if (partial_) { - partial_->RestoreHeaders(&custom_request_->extra_headers); + partial_->RestoreHeaders(&mutable_request_->extra_headers); partial_.reset(); } return OK; @@ -1577,7 +1622,7 @@ int HttpCache::Transaction::DoAddToEntryComplete(int result) { if (mode_ == WRITE) { if (partial_) { - partial_->RestoreHeaders(&custom_request_->extra_headers); + partial_->RestoreHeaders(&mutable_request_->extra_headers); } TransitionToState(STATE_SEND_REQUEST); } else { @@ -1837,7 +1882,7 @@ int HttpCache::Transaction::DoCompletePartialCacheValidation(int result) { } partial_->PrepareCacheValidation(entry_->GetEntry(), - &custom_request_->extra_headers); + &mutable_request_->extra_headers); if (reading_ && partial_->IsCurrentRangeCached()) { // We're about to read a range of bytes from the cache. Signal it to the @@ -1914,6 +1959,14 @@ int HttpCache::Transaction::DoSendRequest() { websocket_handshake_stream_base_create_helper_); } + if (IsUsingURLFromNoVarySearchCache()) { + // If we are using the NoVarySearchCache, double-check that the network + // request we are about to send is conditionalized and not a range request. + CHECK_EQ(mode_, READ_WRITE); + CHECK(!couldnt_conditionalize_request_); + CHECK(!partial_); + } + TransitionToState(STATE_SEND_REQUEST_COMPLETE); rv = network_trans_->Start(request_, io_callback_, net_log_); if (rv != ERR_IO_PENDING && waiting_for_cache_io_) { @@ -2019,7 +2072,7 @@ int HttpCache::Transaction::DoSuccessfulSendRequest() { if (!ValidatePartialResponse() && !auth_response_.headers.get()) { // Something went wrong with this request and we have to restart it. // If we have an authentication response, we are exposed to weird things - // hapenning if the user cancels the authentication before we receive + // happening if the user cancels the authentication before we receive // the new response. net_log_.AddEvent(NetLogEventType::HTTP_CACHE_RE_SEND_PARTIAL_REQUEST); UpdateCacheEntryStatus(CacheEntryStatus::ENTRY_OTHER); @@ -2076,6 +2129,14 @@ int HttpCache::Transaction::DoSuccessfulSendRequest() { return OK; } + // If we get here we are going to write or update the cache entry, possibly + // with a new No-Vary-Search response header, so insert into the NoVarySearch + // cache if appropriate. + if (cache_->no_vary_search_cache_ && IsNoVarySearchApplicable()) { + cache_->no_vary_search_cache_->MaybeInsert(*request_, + *new_response_->headers); + } + // Are we expecting a response to a conditional query? if (mode_ == READ_WRITE || mode_ == UPDATE) { if (new_response->headers->response_code() == HTTP_NOT_MODIFIED || @@ -2599,7 +2660,8 @@ void HttpCache::Transaction::SetRequest(const NetLogWithSource& net_log) { partial_.reset(); request_ = initial_request_; - custom_request_.reset(); + mutable_request_.reset(); + no_vary_search_cache_erase_handle_.reset(); effective_load_flags_ = request_->load_flags; method_ = request_->method; @@ -2687,12 +2749,11 @@ void HttpCache::Transaction::SetRequest(const NetLogWithSource& net_log) { if (method_ == "GET" && partial_->Init(request_->extra_headers)) { // We will be modifying the actual range requested to the server, so // let's remove the header here. - // Note that custom_request_ is a shallow copy so will keep the same + // Note that mutable_request_ is a shallow copy so will keep the same // pointer to upload data stream as in the original request. - custom_request_ = std::make_unique(*request_); - custom_request_->extra_headers.RemoveHeader(HttpRequestHeaders::kRange); - request_ = custom_request_.get(); - partial_->SetHeaders(custom_request_->extra_headers); + EnsureMutableRequest(); + mutable_request_->extra_headers.RemoveHeader(HttpRequestHeaders::kRange); + partial_->SetHeaders(mutable_request_->extra_headers); } else { // The range is invalid or we cannot handle it properly. VLOG(1) << "Invalid byte range found."; @@ -2743,6 +2804,13 @@ int HttpCache::Transaction::BeginCacheRead() { } if (RequiresValidation() != VALIDATION_NONE) { + if (IsUsingURLFromNoVarySearchCache()) { + // A future transaction that is not read-only may be able to use this + // entry, so don't remove it from the cache. + return RestartWithoutNoVarySearchCache( + RestartCacheEntryAction::kDontErase, + NoVarySearchUseResult::kReadOnlyNeedsValidation); + } TransitionToState(STATE_FINISH_HEADERS); return ERR_CACHE_MISS; } @@ -2762,6 +2830,15 @@ int HttpCache::Transaction::BeginCacheValidation() { bool skip_validation = (required_validation == VALIDATION_NONE); bool needs_stale_while_revalidate_cache_update = false; + const bool incomplete_body = + truncated_ || response_.headers->response_code() == HTTP_PARTIAL_CONTENT; + + if (IsUsingURLFromNoVarySearchCache() && incomplete_body) { + // Avoid using the No-Vary-Search cache in partial content situations. + return RestartWithoutNoVarySearchCache( + RestartCacheEntryAction::kErase, + NoVarySearchUseResult::kIncompleteBody); + } if ((effective_load_flags_ & LOAD_SUPPORT_ASYNC_REVALIDATION) && required_validation == VALIDATION_ASYNCHRONOUS) { @@ -2772,8 +2849,7 @@ int HttpCache::Transaction::BeginCacheValidation() { response_.stale_revalidate_timeout.is_null(); } - if (method_ == "HEAD" && (truncated_ || response_.headers->response_code() == - HTTP_PARTIAL_CONTENT)) { + if (method_ == "HEAD" && incomplete_body) { DCHECK(!partial_); if (skip_validation) { DCHECK(!reading_); @@ -2837,6 +2913,15 @@ int HttpCache::Transaction::BeginCacheValidation() { if (partial_) { return DoRestartPartialRequest(); } + if (IsUsingURLFromNoVarySearchCache()) { + // We shouldn't send an unconditional request for the original URL, so + // restart the transaction. However, don't remove the cache entry, as it + // might still be usable by a future request with the + // LOAD_SKIP_CACHE_VALIDATION flag. + RestartWithoutNoVarySearchCache( + RestartCacheEntryAction::kDontErase, + NoVarySearchUseResult::kCouldntConditionalize); + } DCHECK_NE(HTTP_PARTIAL_CONTENT, response_.headers->response_code()); } @@ -2864,10 +2949,7 @@ int HttpCache::Transaction::BeginPartialCacheValidation() { partial_ = std::make_unique(); partial_->SetHeaders(request_->extra_headers); - if (!custom_request_.get()) { - custom_request_ = std::make_unique(*request_); - request_ = custom_request_.get(); - } + EnsureMutableRequest(); } TransitionToState(STATE_CACHE_QUERY_DATA); @@ -3108,12 +3190,9 @@ bool HttpCache::Transaction::ConditionalizeRequest() { } } - if (!partial_) { - // Need to customize the request, so this forces us to allocate :( - custom_request_ = std::make_unique(*request_); - request_ = custom_request_.get(); - } - DCHECK(custom_request_.get()); + // We will need to modify `request_` to change the headers, so allocate + // `mutable_request_` if it has not been allocated already. + EnsureMutableRequest(); bool use_if_range = partial_ && !partial_->IsCurrentRangeCached() && !invalid_range_; @@ -3122,11 +3201,11 @@ bool HttpCache::Transaction::ConditionalizeRequest() { if (use_if_range) { // We don't want to switch to WRITE mode if we don't have this block of a // byte-range request because we may have other parts cached. - custom_request_->extra_headers.SetHeader(HttpRequestHeaders::kIfRange, - etag_value); + mutable_request_->extra_headers.SetHeader(HttpRequestHeaders::kIfRange, + etag_value); } else { - custom_request_->extra_headers.SetHeader(HttpRequestHeaders::kIfNoneMatch, - etag_value); + mutable_request_->extra_headers.SetHeader( + HttpRequestHeaders::kIfNoneMatch, etag_value); } // For byte-range requests, make sure that we use only one way to validate // the request. @@ -3137,10 +3216,10 @@ bool HttpCache::Transaction::ConditionalizeRequest() { if (!last_modified_value.empty()) { if (use_if_range) { - custom_request_->extra_headers.SetHeader(HttpRequestHeaders::kIfRange, - last_modified_value); + mutable_request_->extra_headers.SetHeader(HttpRequestHeaders::kIfRange, + last_modified_value); } else { - custom_request_->extra_headers.SetHeader( + mutable_request_->extra_headers.SetHeader( HttpRequestHeaders::kIfModifiedSince, last_modified_value); } } @@ -3602,7 +3681,7 @@ int HttpCache::Transaction::OnCacheReadError(int result, bool restart) { // when the HttpResponseInfo couldn't even be read, at which point it's // too early for range info in |partial_| to have changed. if (partial_) { - partial_->RestoreHeaders(&custom_request_->extra_headers); + partial_->RestoreHeaders(&mutable_request_->extra_headers); } partial_.reset(); TransitionToState(STATE_GET_BACKEND); @@ -3684,7 +3763,7 @@ int HttpCache::Transaction::DoRestartPartialRequest() { } void HttpCache::Transaction::ResetPartialState(bool delete_object) { - partial_->RestoreHeaders(&custom_request_->extra_headers); + partial_->RestoreHeaders(&mutable_request_->extra_headers); DoomPartialEntry(delete_object); if (!delete_object) { @@ -3692,9 +3771,9 @@ void HttpCache::Transaction::ResetPartialState(bool delete_object) { partial_ = std::make_unique(); // Reset the range header to the original value (http://crbug.com/820599). - custom_request_->extra_headers.RemoveHeader(HttpRequestHeaders::kRange); + mutable_request_->extra_headers.RemoveHeader(HttpRequestHeaders::kRange); if (partial_->Init(initial_request_->extra_headers)) { - partial_->SetHeaders(custom_request_->extra_headers); + partial_->SetHeaders(mutable_request_->extra_headers); } else { partial_.reset(); } @@ -3907,6 +3986,17 @@ void HttpCache::Transaction::RecordHistograms() { (cache_entry_status_ == CacheEntryStatus::ENTRY_USED || cache_entry_status_ == CacheEntryStatus::ENTRY_CANT_CONDITIONALIZE))); + if (no_vary_search_use_result_ == NoVarySearchUseResult::kUsed && + did_send_request) { + no_vary_search_use_result_ = + cache_entry_status_ == CacheEntryStatus::ENTRY_VALIDATED + ? NoVarySearchUseResult::kValidated + : NoVarySearchUseResult::kUpdated; + } + + UMA_HISTOGRAM_ENUMERATION("HttpCache.NoVarySearch.UseResult", + no_vary_search_use_result_); + if (!did_send_request) { if (cache_entry_status_ == CacheEntryStatus::ENTRY_USED) { UMA_HISTOGRAM_CUSTOM_TIMES("HttpCache.AccessToDone2.Used", total_time, @@ -4130,4 +4220,63 @@ void HttpCache::Transaction::RecordEntrySizeHistograms( 100); } +bool HttpCache::Transaction::IsNoVarySearchApplicable() const { + return !partial_ && MethodUsesNoVarySearch(method_); +} + +bool HttpCache::Transaction::IsUsingURLFromNoVarySearchCache() const { + return no_vary_search_cache_erase_handle_.has_value(); +} + +HttpCache::Transaction::NoVarySearchUseResult +HttpCache::Transaction::LookupRequestInNoVarySearchCache() { + std::optional maybe_result = + cache_->no_vary_search_cache_->Lookup(*request_); + if (!maybe_result) { + return NoVarySearchUseResult::kNoMatch; + } + if (maybe_result->original_url == request_->url) { + return NoVarySearchUseResult::kURLUnchanged; + } + NoVarySearchCache::LookupResult result = std::move(maybe_result).value(); + EnsureMutableRequest(); + mutable_request_->url = std::move(result.original_url); + no_vary_search_cache_erase_handle_ = std::move(result.erase_handle); + + // Regenerate the cache key with the modified URL. + std::optional cache_key = + HttpCache::GenerateCacheKeyForRequest(request_); + // NoVarySearchCache should never rewrite a URL that has a valid cache key to + // one that doesn't. + CHECK(cache_key); + cache_key_ = cache_key.value(); + + // May be updated to a different value later. + return NoVarySearchUseResult::kUsed; +} + +int HttpCache::Transaction::RestartWithoutNoVarySearchCache( + RestartCacheEntryAction entry_action, + NoVarySearchUseResult restart_reason) { + no_vary_search_use_result_ = restart_reason; + if (entry_action == RestartCacheEntryAction::kErase) { + cache_->no_vary_search_cache_->Erase( + std::move(no_vary_search_cache_erase_handle_.value())); + } + no_vary_search_cache_erase_handle_ = std::nullopt; + // Don't try to use the NoVarySearchCache next time around. + read_no_vary_search_cache_ = false; + // This will reset this object and send us back to the beginning of the + // state machine to try again without using the NoVarySearchCache. + TransitionToState(STATE_HEADERS_PHASE_CANNOT_PROCEED); + return OK; +} + +void HttpCache::Transaction::EnsureMutableRequest() { + if (!mutable_request_) { + mutable_request_ = std::make_unique(*request_); + request_ = mutable_request_.get(); + } +} + } // namespace net diff --git a/naiveproxy/src/net/http/http_cache_transaction.h b/naiveproxy/src/net/http/http_cache_transaction.h index 19e7d9c384..be82b8d322 100644 --- a/naiveproxy/src/net/http/http_cache_transaction.h +++ b/naiveproxy/src/net/http/http_cache_transaction.h @@ -295,6 +295,35 @@ class NET_EXPORT_PRIVATE HttpCache::Transaction : public HttpTransaction { STATE_NETWORK_READ_COMPLETE, }; + // Action to take when restarting a transaction after a No-Vary-Search + // failure. + enum class RestartCacheEntryAction { + kDontErase, // Leave the entry in the NoVarySearchCache. + kErase, // Erase the entry from the NoVarySearchCache. + }; + + // Result of trying to apply No-Vary-Search to request. + // + // These values are persisted to logs. Entries should not be renumbered and + // numeric values should never be reused. + // + // LINT.IfChange(NoVarySearchUseResult) + enum class NoVarySearchUseResult : uint8_t { + kNotApplied = 0, // Request unsuitable, or feature disabled. + kNoMatch = 1, // Not found in NoVarySearchCache. + kURLUnchanged = 2, // There was a match, but the URL was identical. + kUsed = 3, // Original URL was used. + kNotSuitable = 4, // Unusable according to in-memory hints. + kNotOpenable = 5, // Cache entry doesn't exist or couldn't be opened. + kReadOnlyNeedsValidation = 6, // Validation required but write not allowed. + kIncompleteBody = 7, // Cached response body was incomplete. + kCouldntConditionalize = 8, // Couldn't send conditional request. + kValidated = 9, // Original URL response was revalidated. + kUpdated = 10, // Original URL response was updated. + kMaxValue = kUpdated, + }; + // LINT.ThenChange(//tools/metrics/histograms/metadata/net/enums.xml:NoVarySearchUseResult) + // Runs the state transition loop. Resets and calls |callback_| on exit, // unless the return value is ERR_IO_PENDING. int DoLoop(int result); @@ -470,7 +499,7 @@ class NET_EXPORT_PRIVATE HttpCache::Transaction : public HttpTransaction { // resumed or not. void DoneWithEntry(bool entry_is_complete); - // Dooms the given entry so that it will not be re-used for other requests, + // Dooms the given entry so that it will not be reused for other requests, // then calls `DoneWithEntry()`. // // This happens when network conditions have changed since the entry was @@ -504,7 +533,7 @@ class NET_EXPORT_PRIVATE HttpCache::Transaction : public HttpTransaction { // between the byte range request and the cached entry. int DoRestartPartialRequest(); - // Resets the relavant internal state to remove traces of internal processing + // Resets the relevant internal state to remove traces of internal processing // related to range requests. Deletes |partial_| if |delete_object| is true. void ResetPartialState(bool delete_object); @@ -585,6 +614,29 @@ class NET_EXPORT_PRIVATE HttpCache::Transaction : public HttpTransaction { void RecordEntrySizeHistograms(const disk_cache::Entry& entry); + // Returns true if the current transaction is in-scope for No-Vary-Search + // treatment. + bool IsNoVarySearchApplicable() const; + + // Returns true if the current transaction is using a URL that was rewritten + // by the NoVarySearchCache. + bool IsUsingURLFromNoVarySearchCache() const; + + // Checks for a matching entry in the NoVarySearchCache. If one is found, and + // the URL is different, modifies `request_` to use the matching entry, and + // returns kUsed. Otherwise returns kNoMatch or KURLUnchanged. + NoVarySearchUseResult LookupRequestInNoVarySearchCache(); + + // Removes the used NoVarySearchCache entry from the NoVarySearchCache, sets + // `use_no_vary_search_cache_` to false, and restarts the transaction from the + // beginning. + int RestartWithoutNoVarySearchCache(RestartCacheEntryAction entry_action, + NoVarySearchUseResult restart_reason); + + // If `mutable_request_` has not been initialized, initialize it by making a + // shallow copy of `request_`, and then modify `request_` to point to it. + void EnsureMutableRequest(); + State next_state_{STATE_NONE}; // Set when a HTTPCache transaction is pending in parallel with other IO. @@ -601,11 +653,14 @@ class NET_EXPORT_PRIVATE HttpCache::Transaction : public HttpTransaction { // Initial request with which Start() was invoked. raw_ptr initial_request_ = nullptr; - // `custom_request_` is assigned to `request_` after allocation. It must be + // `mutable_request_` is assigned to `request_` after allocation. It must be // declared before `request_` so that it will be destroyed afterwards to // prevent that pointer from dangling. - std::unique_ptr custom_request_; + std::unique_ptr mutable_request_; + // The request this transaction is currently processing. Always points either + // to `initial_request_` or `mutable_request_`. Is set back to + // `initial_request_` when the transaction is restarted. raw_ptr request_ = nullptr; std::string method_; @@ -707,6 +762,23 @@ class NET_EXPORT_PRIVATE HttpCache::Transaction : public HttpTransaction { // statistics. bool moved_network_transaction_to_writers_ = false; + // True if we should look up the URL in the NoVarySearchCache. Starts true if + // the kHttpCacheNoVarySearch feature is enabled. Set to false if the + // transaction needs to be restarted because the URL returned by the + // NoVarySearchCache was not usable. + bool read_no_vary_search_cache_; + + // The result of applying the No-Vary-Search to the request. For UMA. + NoVarySearchUseResult no_vary_search_use_result_ = + NoVarySearchUseResult::kNotApplied; + + // If an entry in the NoVarySearchCache was found to be unhelpful, this + // handle can be used to erase it. Only set if an entry was found in the + // NoVerySearchCache and hasn't been erased already. This is also used as a + // flag to indicate we are using a URL provided by the NoVarySearchCache. + std::optional + no_vary_search_cache_erase_handle_; + // The helper object to use to create WebSocketHandshakeStreamBase // objects. Only relevant when establishing a WebSocket connection. // This is passed to the underlying network transaction. It is stored here in diff --git a/naiveproxy/src/net/http/http_cache_writers.cc b/naiveproxy/src/net/http/http_cache_writers.cc index 6081f3d3be..37fa269822 100644 --- a/naiveproxy/src/net/http/http_cache_writers.cc +++ b/naiveproxy/src/net/http/http_cache_writers.cc @@ -4,6 +4,11 @@ #include "net/http/http_cache_writers.h" +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include #include diff --git a/naiveproxy/src/net/http/http_chunked_decoder.cc b/naiveproxy/src/net/http/http_chunked_decoder.cc index 2ebba806ec..83739e35d6 100644 --- a/naiveproxy/src/net/http/http_chunked_decoder.cc +++ b/naiveproxy/src/net/http/http_chunked_decoder.cc @@ -49,7 +49,6 @@ #include "base/logging.h" #include "base/numerics/safe_conversions.h" -#include "base/ranges/algorithm.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" #include "net/base/net_errors.h" @@ -195,7 +194,7 @@ bool HttpChunkedDecoder::ParseChunkSize(base::span buf, // Be more restrictive than HexStringToInt64; // don't allow inputs with leading "-", "+", "0x", "0X" std::string_view chunk_size = base::as_string_view(buf); - if (!base::ranges::all_of(chunk_size, base::IsHexDigit)) { + if (!std::ranges::all_of(chunk_size, base::IsHexDigit)) { return false; } diff --git a/naiveproxy/src/net/http/http_cookie_indices.cc b/naiveproxy/src/net/http/http_cookie_indices.cc index 0ae7f9016e..9683a1169a 100644 --- a/naiveproxy/src/net/http/http_cookie_indices.cc +++ b/naiveproxy/src/net/http/http_cookie_indices.cc @@ -4,11 +4,11 @@ #include "net/http/http_cookie_indices.h" +#include #include #include "base/containers/span.h" #include "base/pickle.h" -#include "base/ranges/algorithm.h" #include "crypto/sha2.h" #include "net/cookies/parsed_cookie.h" #include "net/http/http_response_headers.h" @@ -96,13 +96,13 @@ std::optional> ParseCookieIndices( CookieIndicesHash HashCookieIndices( base::span cookie_indices, base::span> cookies) { - CHECK(base::ranges::adjacent_find(cookie_indices, std::greater_equal<>()) == + CHECK(std::ranges::adjacent_find(cookie_indices, std::greater_equal<>()) == cookie_indices.end()) << "cookie indices must be sorted and unique"; std::vector> cookies_sorted( cookies.begin(), cookies.end()); - base::ranges::sort(cookies_sorted); + std::ranges::sort(cookies_sorted); base::Pickle pickle; auto cookies_it = cookies_sorted.begin(); diff --git a/naiveproxy/src/net/http/http_no_vary_search_data.cc b/naiveproxy/src/net/http/http_no_vary_search_data.cc index 234546c7b4..8acc1dd050 100644 --- a/naiveproxy/src/net/http/http_no_vary_search_data.cc +++ b/naiveproxy/src/net/http/http_no_vary_search_data.cc @@ -110,7 +110,7 @@ HttpNoVarySearchData::ParseFromHeaders( std::optional normalized_header = response_headers.GetNormalizedHeader("No-Vary-Search"); if (!normalized_header) { - // This means there is no No-Vary-Search header. Return nullopt. + // This means there is no No-Vary-Search header. return base::unexpected(ParseErrorEnum::kOk); } @@ -124,6 +124,11 @@ HttpNoVarySearchData::ParseFromHeaders( return ParseNoVarySearchDictionary(dict.value()); } +bool HttpNoVarySearchData::operator==(const HttpNoVarySearchData& rhs) const = + default; +std::strong_ordering HttpNoVarySearchData::operator<=>( + const HttpNoVarySearchData& rhs) const = default; + const base::flat_set& HttpNoVarySearchData::no_vary_params() const { return no_vary_params_; @@ -155,7 +160,7 @@ HttpNoVarySearchData::ParseNoVarySearchDictionary( bool vary_by_default = true; // If the dictionary contains unknown keys, maybe fail parsing. - const bool has_unrecognized_keys = !base::ranges::all_of( + const bool has_unrecognized_keys = !std::ranges::all_of( dict, [&](const auto& pair) { return base::Contains(kValidKeys, pair.first); }); diff --git a/naiveproxy/src/net/http/http_no_vary_search_data.h b/naiveproxy/src/net/http/http_no_vary_search_data.h index 96252d86b7..6b13cfcd94 100644 --- a/naiveproxy/src/net/http/http_no_vary_search_data.h +++ b/naiveproxy/src/net/http/http_no_vary_search_data.h @@ -24,7 +24,7 @@ class HttpResponseHeaders; class NET_EXPORT_PRIVATE HttpNoVarySearchData { public: enum class ParseErrorEnum { - kOk, // Parsing is correct. Also returned if there is no header. + kOk, // There is no No-Vary-Search header. kDefaultValue, // Parsing is correct but led to default value - the header // could be removed. kNotDictionary, // Header value is not a dictionary. @@ -56,6 +56,11 @@ class NET_EXPORT_PRIVATE HttpNoVarySearchData { HttpNoVarySearchData::ParseErrorEnum> ParseFromHeaders(const HttpResponseHeaders& response_headers); + bool operator==(const HttpNoVarySearchData& rhs) const; + + // HttpNoVarySearchData objects can be used as a key in a map. + std::strong_ordering operator<=>(const HttpNoVarySearchData& rhs) const; + bool AreEquivalent(const GURL& a, const GURL& b) const; const base::flat_set& no_vary_params() const; diff --git a/naiveproxy/src/net/http/http_response_headers.cc b/naiveproxy/src/net/http/http_response_headers.cc index e58de7c031..34ef2be441 100644 --- a/naiveproxy/src/net/http/http_response_headers.cc +++ b/naiveproxy/src/net/http/http_response_headers.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + // The rules for header parsing were borrowed from Firefox: // http://lxr.mozilla.org/seamonkey/source/netwerk/protocol/http/src/nsHttpResponseHead.cpp // The rules for parsing content-types were also borrowed from Firefox: @@ -20,7 +25,6 @@ #include "base/logging.h" #include "base/metrics/histogram_macros.h" #include "base/pickle.h" -#include "base/ranges/algorithm.h" #include "base/strings/escape.h" #include "base/strings/strcat.h" #include "base/strings/string_number_conversions.h" @@ -301,7 +305,7 @@ HttpResponseHeaders::HttpResponseHeaders( // It's okay if we over-estimate the size of `parsed_`, so treat all ',' // characters as if they might split the value to avoid parsing the value // carefully here. - const size_t comma_count = base::ranges::count(value, ',') + 1; + const size_t comma_count = std::ranges::count(value, ',') + 1; expected_parsed_size += comma_count; header_contains_comma.push_back(comma_count); } @@ -642,7 +646,7 @@ void HttpResponseHeaders::Parse(const std::string& raw_input) { // ParseStatusLine adds a normalized status line to raw_headers_ std::string::const_iterator line_begin = raw_input.begin(); - std::string::const_iterator line_end = base::ranges::find(raw_input, '\0'); + std::string::const_iterator line_end = std::ranges::find(raw_input, '\0'); // has_headers = true, if there is any data following the status line. // Used by ParseStatusLine() to decide if a HTTP/0.9 is really a HTTP/1.0. bool has_headers = @@ -725,7 +729,7 @@ std::string HttpResponseHeaders::GetStatusText() const { // ' SP SP '. std::string status_text = GetStatusLine(); // Seek to beginning of . - std::string::const_iterator begin = base::ranges::find(status_text, ' '); + std::string::const_iterator begin = std::ranges::find(status_text, ' '); std::string::const_iterator end = status_text.end(); CHECK(begin != end); ++begin; @@ -1146,7 +1150,7 @@ bool HttpResponseHeaders::HasStorageAccessRetryHeader( if (!item || !item->item.is_token() || item->item.GetString() != "retry") { return false; } - return base::ranges::any_of( + return std::ranges::any_of( item->params, [&](const auto& key_and_value) -> bool { const auto [key, value] = key_and_value; if (key != "allowed-origin") { diff --git a/naiveproxy/src/net/http/http_response_info.cc b/naiveproxy/src/net/http/http_response_info.cc index 73ac2fba09..c579aba2af 100644 --- a/naiveproxy/src/net/http/http_response_info.cc +++ b/naiveproxy/src/net/http/http_response_info.cc @@ -380,6 +380,13 @@ bool HttpResponseInfo::InitFromPickle(const base::Pickle& pickle, void HttpResponseInfo::Persist(base::Pickle* pickle, bool skip_transient_headers, bool response_truncated) const { + // Pre-reserve memory for the Pickle contents to reduce allocations and + // copies. This doesn't affect the size of the data that is written to disk. + // The Pickle object only lives long enough to be written to disk, so it + // doesn't matter if we briefly overallocate memory. 10,900 bytes is enough to + // cover 99% percentile of HttpResponseInfo pickle sizes based on Dev/Canary + // data from 2025-01-20 (the mean is 4,773). + pickle->Reserve(10900); int flags = RESPONSE_INFO_VERSION; int extra_flags = 0; if (ssl_info.is_valid()) { diff --git a/naiveproxy/src/net/http/http_stream_parser.cc b/naiveproxy/src/net/http/http_stream_parser.cc index f02436d87a..0b31927d01 100644 --- a/naiveproxy/src/net/http/http_stream_parser.cc +++ b/naiveproxy/src/net/http/http_stream_parser.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "net/http/http_stream_parser.h" #include diff --git a/naiveproxy/src/net/http/http_stream_pool.cc b/naiveproxy/src/net/http/http_stream_pool.cc index 6447c7bc44..64acc49a7f 100644 --- a/naiveproxy/src/net/http/http_stream_pool.cc +++ b/naiveproxy/src/net/http/http_stream_pool.cc @@ -74,6 +74,14 @@ constexpr base::FeatureParam HttpStreamPool::kConnectionAttemptDelayParamName.data(), HttpStreamPool::kDefaultConnectionAttemptDelay}; +constexpr base::FeatureParam + kStreamAttemptDelayBehavior{ + &features::kHappyEyeballsV3, + HttpStreamPool::kStreamAttemptDelayBehaviorParamName.data(), + HttpStreamPool::StreamAttemptDelayBehavior:: + kStartTimerOnFirstQuicAttempt, + HttpStreamPool::kStreamAttemptDelayBehaviorOptions}; + constexpr base::FeatureParam kVerboseNetLog{ &features::kHappyEyeballsV3, HttpStreamPool::kVerboseNetLogParamName.data(), false}; @@ -119,6 +127,12 @@ base::TimeDelta HttpStreamPool::GetConnectionAttemptDelay() { return kHttpStreamPoolConnectionAttemptDelay.Get(); } +// static +HttpStreamPool::StreamAttemptDelayBehavior +HttpStreamPool::GetStreamAttemptDelayBehavior() { + return kStreamAttemptDelayBehavior.Get(); +} + // static bool HttpStreamPool::VerboseNetLog() { return kVerboseNetLog.Get(); diff --git a/naiveproxy/src/net/http/http_stream_pool.h b/naiveproxy/src/net/http/http_stream_pool.h index bb7c1419fb..5af6440adc 100644 --- a/naiveproxy/src/net/http/http_stream_pool.h +++ b/naiveproxy/src/net/http/http_stream_pool.h @@ -16,6 +16,7 @@ #include "base/time/time.h" #include "base/values.h" #include "net/base/completion_once_callback.h" +#include "net/base/features.h" #include "net/base/net_export.h" #include "net/base/network_anonymization_key.h" #include "net/base/network_change_notifier.h" @@ -51,6 +52,16 @@ class NET_EXPORT_PRIVATE HttpStreamPool kIgnore, }; + // Specify when to start the stream attempt delay timer. + enum class StreamAttemptDelayBehavior { + // Starts the stream attempt delay timer on the first service endpoint + // update. + kStartTimerOnFirstEndpointUpdate, + // Start the stream attempt delay timer when the first QUIC endpoint is + // attempted. + kStartTimerOnFirstQuicAttempt, + }; + // Observes events on the HttpStreamPool and may intercept preconnects. Used // only for tests. class NET_EXPORT_PRIVATE TestDelegate { @@ -105,19 +116,30 @@ class NET_EXPORT_PRIVATE HttpStreamPool "max_stream_per_group"; static constexpr std::string_view kConnectionAttemptDelayParamName = "connection_attempt_delay"; + static constexpr std::string_view kStreamAttemptDelayBehaviorParamName = + "stream_attempt_delay_behavior"; static constexpr std::string_view kVerboseNetLogParamName = "verbose_netlog"; static constexpr std::string_view kConsistencyCheckParamName = "consistency_check"; + static constexpr inline auto kStreamAttemptDelayBehaviorOptions = + std::to_array::Option>( + {{StreamAttemptDelayBehavior::kStartTimerOnFirstEndpointUpdate, + "first_endpoint_update"}, + {StreamAttemptDelayBehavior::kStartTimerOnFirstQuicAttempt, + "first_quic_attempt"}}); + class NET_EXPORT_PRIVATE Job; class NET_EXPORT_PRIVATE JobController; class NET_EXPORT_PRIVATE Group; class NET_EXPORT_PRIVATE AttemptManager; - class NET_EXPORT_PRIVATE QuicTask; // The time to wait between connection attempts. static base::TimeDelta GetConnectionAttemptDelay(); + // Returns when to start the stream attempt delay timer. + static StreamAttemptDelayBehavior GetStreamAttemptDelayBehavior(); + explicit HttpStreamPool(HttpNetworkSession* http_network_session, bool cleanup_on_ip_address_change = true); diff --git a/naiveproxy/src/net/http/http_stream_pool_attempt_manager.cc b/naiveproxy/src/net/http/http_stream_pool_attempt_manager.cc index 8da759fe8d..0d9ac6b494 100644 --- a/naiveproxy/src/net/http/http_stream_pool_attempt_manager.cc +++ b/naiveproxy/src/net/http/http_stream_pool_attempt_manager.cc @@ -28,10 +28,10 @@ #include "net/http/http_network_session.h" #include "net/http/http_server_properties.h" #include "net/http/http_stream_key.h" +#include "net/http/http_stream_pool_attempt_manager_quic_task.h" #include "net/http/http_stream_pool_group.h" #include "net/http/http_stream_pool_handle.h" #include "net/http/http_stream_pool_job.h" -#include "net/http/http_stream_pool_quic_task.h" #include "net/log/net_log_with_source.h" #include "net/quic/quic_http_stream.h" #include "net/quic/quic_session_alias_key.h" @@ -82,6 +82,18 @@ bool GetSupportsSpdy(HttpNetworkSession* session, return false; } +base::Value::Dict GetServiceEndpointRequestAsValue( + HostResolver::ServiceEndpointRequest* request) { + base::Value::Dict dict; + base::Value::List endpoints; + for (const auto& endpoint : request->GetEndpointResults()) { + endpoints.Append(endpoint.ToValue()); + } + dict.Set("endpoints", std::move(endpoints)); + dict.Set("endpoints_crypto_ready", request->EndpointsCryptoReady()); + return dict; +} + } // namespace // Represents an in-flight stream attempt. @@ -149,6 +161,12 @@ class HttpStreamPool::AttemptManager::InFlightAttempt int WaitForSSLConfigReady(CompletionOnceCallback callback) override { int rv = manager_->WaitForSSLConfigReady(); if (rv == ERR_IO_PENDING) { + // TODO(crbug.com/383220402): Remove the timer when the cause of the bug + // is fixed. + ssl_config_waiting_timeout_timer_.Start( + FROM_HERE, base::Seconds(6), + base::BindOnce(&InFlightAttempt::OnWaitingSSLConfigTimedout, + base::Unretained(this))); ssl_config_waiting_callback_ = std::move(callback); } return rv; @@ -164,6 +182,7 @@ class HttpStreamPool::AttemptManager::InFlightAttempt } CompletionOnceCallback TakeSSLConfigWaitingCallback() { + ssl_config_waiting_timeout_timer_.Stop(); return std::move(ssl_config_waiting_callback_); } @@ -194,6 +213,12 @@ class HttpStreamPool::AttemptManager::InFlightAttempt } private: + void OnWaitingSSLConfigTimedout() { + std::string manager_info = manager_->GetInfoAsValue().DebugString(); + DEBUG_ALIAS_FOR_CSTR(aliased_info, manager_info.c_str(), 512); + CHECK(false) << manager_info; + } + const raw_ptr manager_; std::unique_ptr attempt_; base::TimeTicks start_time_; @@ -208,6 +233,9 @@ class HttpStreamPool::AttemptManager::InFlightAttempt // handle ECH failure. bool is_aborted_ = false; CompletionOnceCallback ssl_config_waiting_callback_; + + // TODO(crbug.com/383220402): Remove this when the cause of the bug is fixed. + base::OneShotTimer ssl_config_waiting_timeout_timer_; }; // Represents a preconnect request. @@ -283,6 +311,11 @@ HttpStreamPool::AttemptManager::AttemptManager(Group* group, NetLog* net_log) stream_attempt_delay_(GetStreamAttemptDelay()), should_block_stream_attempt_(!stream_attempt_delay_.is_zero()) { CHECK(group_); + + if (group_->force_quic()) { + allowed_alpns_.RemoveAll(kTcpBasedProtocols); + } + net_log_.BeginEvent( NetLogEventType::HTTP_STREAM_POOL_ATTEMPT_MANAGER_ALIVE, [&] { base::Value::Dict dict; @@ -359,7 +392,16 @@ void HttpStreamPool::AttemptManager::StartJob( // HttpStreamPool should check the existing QUIC/SPDY sessions before calling // this method. DCHECK(!CanUseExistingQuicSession()); - CHECK(!spdy_session_); + // TODO(crbug.com/385563837): Change to use CHECK(!spdy_session_) once we + // identified the cause of the issue. + if (spdy_session_) { + std::string stream_key_string = stream_key().ToString(); + std::string spdy_session_string = + spdy_session_->GetInfoAsValue().DebugString(); + DEBUG_ALIAS_FOR_CSTR(stream_key_cstr, stream_key_string.c_str(), 128); + DEBUG_ALIAS_FOR_CSTR(spdy_session_cstr, spdy_session_string.c_str(), 512); + CHECK(false); + } DCHECK(!spdy_session_pool()->FindAvailableSession( spdy_session_key(), IsIpBasedPoolingEnabled(), /*is_websocket=*/false, request_net_log)); @@ -432,12 +474,14 @@ int HttpStreamPool::AttemptManager::Preconnect( } void HttpStreamPool::AttemptManager::OnServiceEndpointsUpdated() { - // For plain HTTP request, we need to wait for HTTPS RR because we could - // trigger HTTP -> HTTPS upgrade when HTTPS RR is received during the endpoint - // resolution. - if (UsingTls() || service_endpoint_request_->EndpointsCryptoReady()) { - ProcessServiceEndpointChanges(); - } + net_log().AddEvent( + NetLogEventType::HTTP_STREAM_POOL_ATTEMPT_MANAGER_DNS_RESOLUTION_UPDATED, + [&] { + return GetServiceEndpointRequestAsValue( + service_endpoint_request_.get()); + }); + + ProcessServiceEndpointChanges(); } void HttpStreamPool::AttemptManager::OnServiceEndpointRequestFinished(int rv) { @@ -451,18 +495,18 @@ void HttpStreamPool::AttemptManager::OnServiceEndpointRequestFinished(int rv) { net_log().AddEvent( NetLogEventType::HTTP_STREAM_POOL_ATTEMPT_MANAGER_DNS_RESOLUTION_FINISHED, [&] { - base::Value::Dict dict; + base::Value::Dict dict = + GetServiceEndpointRequestAsValue(service_endpoint_request_.get()); dict.Set("result", ErrorToString(rv)); dict.Set("resolve_error", resolve_error_info_.error); return dict; }); if (rv != OK) { - final_error_to_notify_jobs_ = rv; // If service endpoint resolution failed, record an empty endpoint and the // result. connection_attempts_.emplace_back(IPEndPoint(), rv); - NotifyFailure(); + HandleFinalError(rv); return; } @@ -552,16 +596,20 @@ void HttpStreamPool::AttemptManager::ProcessPendingJob() { void HttpStreamPool::AttemptManager::CancelInFlightAttempts( StreamSocketCloseReason reason) { + if (in_flight_attempts_.empty()) { + return; + } + const size_t num_cancel_attempts = in_flight_attempts_.size(); for (auto& attempt : in_flight_attempts_) { attempt->SetCancelReason(reason); } - pool()->DecrementTotalConnectingStreamCount(in_flight_attempts_.size()); + pool()->DecrementTotalConnectingStreamCount(num_cancel_attempts); in_flight_attempts_.clear(); slow_attempt_count_ = 0; base::UmaHistogramCounts100( - base::StrCat({"Net.HttpStreamPool.AttemptCancelCount.", + base::StrCat({"Net.HttpStreamPool.StreamAttemptCancelCount.", StreamSocketCloseReasonToString(reason)}), num_cancel_attempts); @@ -597,9 +645,15 @@ void HttpStreamPool::AttemptManager::OnJobComplete(Job* job) { } void HttpStreamPool::AttemptManager::CancelJobs(int error) { - final_error_to_notify_jobs_ = error; is_canceling_jobs_ = true; - NotifyFailure(); + HandleFinalError(error); +} + +void HttpStreamPool::AttemptManager::CancelQuicTask(int error) { + if (quic_task_) { + quic_task_result_ = error; + quic_task_.reset(); + } } size_t HttpStreamPool::AttemptManager::PendingJobCount() const { @@ -739,8 +793,7 @@ bool HttpStreamPool::AttemptManager::IsStalledByPoolLimit() { void HttpStreamPool::AttemptManager::OnRequiredHttp11() { if (spdy_session_) { spdy_session_.reset(); - is_failing_ = true; - final_error_to_notify_jobs_ = ERR_HTTP_1_1_REQUIRED; + HandleFinalError(ERR_HTTP_1_1_REQUIRED); } } @@ -750,6 +803,15 @@ void HttpStreamPool::AttemptManager::OnQuicTaskComplete( CHECK(!quic_task_result_.has_value()); quic_task_result_ = rv; net_error_details_ = std::move(details); + + // Record completion time only when QuicTask actually attempted QUIC. + if (rv != ERR_DNS_NO_MATCHING_SUPPORTED_ALPN) { + base::UmaHistogramTimes( + base::StrCat({"Net.HttpStreamPool.QuicTaskTime.", + rv == OK ? "Success" : "Failure"}), + base::TimeTicks::Now() - quic_task_->attempt_start_time()); + } + quic_task_.reset(); net_log().AddEvent( @@ -776,27 +838,25 @@ void HttpStreamPool::AttemptManager::OnQuicTaskComplete( MaybeMarkQuicBroken(); - const bool has_jobs = !jobs_.empty() || !notified_jobs_.empty(); - if (rv == OK) { HandleQuicSessionReady(StreamSocketCloseReason::kQuicSessionCreated); - if (has_jobs) { + if (!jobs_.empty()) { CreateQuicStreamAndNotify(); - return; + } else { + MaybeCompleteLater(); } - } - - if (rv != OK && - (tcp_based_attempt_state_ == TcpBasedAttemptState::kAllEndpointsFailed || - group_->force_quic() || !CanUseTcpBasedProtocols())) { - final_error_to_notify_jobs_ = rv; - NotifyFailure(); return; } - if (has_jobs && (rv != OK || should_block_stream_attempt_)) { - should_block_stream_attempt_ = false; - stream_attempt_delay_timer_.Stop(); + if (tcp_based_attempt_state_ == TcpBasedAttemptState::kAllEndpointsFailed || + !CanUseTcpBasedProtocols()) { + CancelStreamAttemptDelayTimer(); + HandleFinalError(rv); + return; + } + + if (should_block_stream_attempt_) { + CancelStreamAttemptDelayTimer(); MaybeAttemptConnection(); } else { MaybeCompleteLater(); @@ -818,6 +878,12 @@ base::Value::Dict HttpStreamPool::AttemptManager::GetInfoAsValue() const { dict.Set("in_flight_attempt_count", static_cast(InFlightAttemptCount())); dict.Set("slow_attempt_count", static_cast(slow_attempt_count_)); dict.Set("is_failing", is_failing_); + if (final_error_to_notify_jobs_.has_value()) { + dict.Set("final_error_to_notify_job", *final_error_to_notify_jobs_); + } + if (most_recent_tcp_error_.has_value()) { + dict.Set("most_recent_tcp_error", *most_recent_tcp_error_); + } dict.Set("can_attempt_connection", CanAttemptResultToString(CanAttemptConnection())); dict.Set("service_endpoint_request_finished", @@ -915,11 +981,8 @@ void HttpStreamPool::AttemptManager::RestrictAllowedProtocols( } if (!CanUseQuic()) { - if (quic_task_) { - // TODO(crbug.com/346835898): Use other error code? - quic_task_result_ = ERR_ABORTED; - quic_task_.reset(); - } + // TODO(crbug.com/346835898): Use other error code? + CancelQuicTask(ERR_ABORTED); UpdateStreamAttemptState(); } } @@ -932,60 +995,94 @@ void HttpStreamPool::AttemptManager:: } void HttpStreamPool::AttemptManager::ProcessServiceEndpointChanges() { - if (CanUseExistingSessionAfterEndpointChanges()) { - // TODO(crbug.com/383220402): Remove GetInfoAsValue() once we found the root - // cause of the associated bug. - std::string info = GetInfoAsValue().DebugString(); - DEBUG_ALIAS_FOR_CSTR(aliased_info, info.c_str(), 512); - CHECK(in_flight_attempts_.empty()) << info; + // For plain HTTP request, we need to wait for HTTPS RR because we could + // trigger HTTP -> HTTPS upgrade when HTTPS RR is received during the endpoint + // resolution. + if (!UsingTls() && !service_endpoint_request_->EndpointsCryptoReady() && + !service_endpoint_request_finished_) { return; } - MaybeRunStreamAttemptDelayTimer(); + + // Try to calculate SSLConfig before checking existing SPDY/QUIC sessions, + // since `this` may make TCP attempts even after using an existing session + // as the session could become inactive later. MaybeCalculateSSLConfig(); + + if (CanUseExistingQuicSessionAfterEndpointChanges()) { + CHECK(in_flight_attempts_.empty()); + return; + } + + if (CanUseExistingSpdySessionAfterEndpointChanges()) { + CHECK(in_flight_attempts_.empty()); + return; + } + + if (GetStreamAttemptDelayBehavior() == + StreamAttemptDelayBehavior::kStartTimerOnFirstEndpointUpdate) { + MaybeRunStreamAttemptDelayTimer(); + } + MaybeNotifySSLConfigReady(); MaybeAttemptQuic(); MaybeAttemptConnection(); } bool HttpStreamPool::AttemptManager:: - CanUseExistingSessionAfterEndpointChanges() { - CHECK(service_endpoint_request_); - - if (!UsingTls()) { + CanUseExistingQuicSessionAfterEndpointChanges() { + if (!CanUseQuic()) { return false; } if (CanUseExistingQuicSession()) { + CancelQuicTask(OK); return true; } - if (CanUseQuic()) { - for (const auto& endpoint : - service_endpoint_request_->GetEndpointResults()) { - if (quic_session_pool()->HasMatchingIpSessionForServiceEndpoint( - quic_session_alias_key(), endpoint, - service_endpoint_request_->GetDnsAliasResults(), true)) { - if (quic_task_) { - quic_task_result_ = OK; - quic_task_.reset(); - } - HandleQuicSessionReady( - StreamSocketCloseReason::kUsingExistingQuicSession); - // Use PostTask() because we could reach here from RequestStream() - // synchronously when the DNS resolution finishes immediately. - base::SequencedTaskRunner::GetCurrentDefault()->PostTask( - FROM_HERE, - base::BindOnce(&AttemptManager::CreateQuicStreamAndNotify, - weak_ptr_factory_.GetWeakPtr())); - return true; - } + for (const auto& endpoint : service_endpoint_request_->GetEndpointResults()) { + if (!quic_session_pool()->HasMatchingIpSessionForServiceEndpoint( + quic_session_alias_key(), endpoint, + service_endpoint_request_->GetDnsAliasResults(), true)) { + continue; } + + CancelQuicTask(OK); + + net_log_.AddEvent( + NetLogEventType:: + HTTP_STREAM_POOL_ATTEMPT_MANAGER_EXISTING_QUIC_SESSION_MATCHED, + [&] { + base::Value::Dict dict; + QuicChromiumClientSession* quic_session = + quic_session_pool()->FindExistingSession( + quic_session_alias_key().session_key(), + quic_session_alias_key().destination()); + CHECK(quic_session); + quic_session->net_log().source().AddToEventParameters(dict); + return dict; + }); + base::UmaHistogramTimes( + "Net.HttpStreamPool.ExistingQuicSessionFoundTime", + base::TimeTicks::Now() - dns_resolution_start_time_); + + HandleQuicSessionReady(StreamSocketCloseReason::kUsingExistingQuicSession); + // Use PostTask() because we could reach here from RequestStream() + // synchronously when the DNS resolution finishes immediately. + base::SequencedTaskRunner::GetCurrentDefault()->PostTask( + FROM_HERE, base::BindOnce(&AttemptManager::CreateQuicStreamAndNotify, + weak_ptr_factory_.GetWeakPtr())); + return true; } + return false; +} + +bool HttpStreamPool::AttemptManager:: + CanUseExistingSpdySessionAfterEndpointChanges() { if (spdy_session_) { return true; } - if (!IsIpBasedPoolingEnabled()) { + if (!IsIpBasedPoolingEnabled() || !UsingTls()) { return false; } @@ -994,33 +1091,35 @@ bool HttpStreamPool::AttemptManager:: spdy_session_pool()->FindMatchingIpSessionForServiceEndpoint( spdy_session_key(), endpoint, service_endpoint_request_->GetDnsAliasResults()); - if (spdy_session_) { - HandleSpdySessionReady( - StreamSocketCloseReason::kUsingExistingSpdySession); - // Use PostTask() because we could reach here from RequestStream() - // synchronously when the DNS resolution finishes immediately. - base::SequencedTaskRunner::GetCurrentDefault()->PostTask( - FROM_HERE, base::BindOnce(&AttemptManager::CreateSpdyStreamAndNotify, - weak_ptr_factory_.GetWeakPtr())); - return true; + if (!spdy_session_) { + continue; } + CHECK(spdy_session_->IsAvailable()); + + net_log_.AddEvent( + NetLogEventType:: + HTTP_STREAM_POOL_ATTEMPT_MANAGER_EXISTING_SPDY_SESSION_MATCHED, + [&] { + base::Value::Dict dict; + spdy_session_->net_log().source().AddToEventParameters(dict); + return dict; + }); + base::UmaHistogramTimes( + "Net.HttpStreamPool.ExistingSpdySessionFoundTime", + base::TimeTicks::Now() - dns_resolution_start_time_); + + HandleSpdySessionReady(StreamSocketCloseReason::kUsingExistingSpdySession); + // Use PostTask() because we could reach here from RequestStream() + // synchronously when the DNS resolution finishes immediately. + base::SequencedTaskRunner::GetCurrentDefault()->PostTask( + FROM_HERE, base::BindOnce(&AttemptManager::CreateSpdyStreamAndNotify, + weak_ptr_factory_.GetWeakPtr())); + return true; } return false; } -void HttpStreamPool::AttemptManager::MaybeRunStreamAttemptDelayTimer() { - if (!should_block_stream_attempt_ || - stream_attempt_delay_timer_.IsRunning()) { - return; - } - CHECK(!stream_attempt_delay_.is_zero()); - stream_attempt_delay_timer_.Start( - FROM_HERE, stream_attempt_delay_, - base::BindOnce(&AttemptManager::OnStreamAttemptDelayPassed, - weak_ptr_factory_.GetWeakPtr())); -} - void HttpStreamPool::AttemptManager::MaybeCalculateSSLConfig() { if (!UsingTls() || ssl_config_.has_value()) { return; @@ -1028,9 +1127,7 @@ void HttpStreamPool::AttemptManager::MaybeCalculateSSLConfig() { CHECK(service_endpoint_request_); if (!service_endpoint_request_->EndpointsCryptoReady()) { - // TODO(crbug.com/383220402): Remove GetInfoAsValue() once we found the root - // cause of the associated bug. - CHECK(!service_endpoint_request_finished_) << GetInfoAsValue(); + CHECK(!service_endpoint_request_finished_); return; } @@ -1056,6 +1153,24 @@ void HttpStreamPool::AttemptManager::MaybeCalculateSSLConfig() { stream_key().network_anonymization_key(); ssl_config_.emplace(std::move(ssl_config)); +} + +void HttpStreamPool::AttemptManager::MaybeNotifySSLConfigReady() { + if (!ssl_config_.has_value()) { + return; + } + + if (ssl_config_ready_notified_) { + // Ensure that there is no in-flight stream attempts that are waiting for + // SSLConfig. + // TODO(crbug.com/383220402): Put this check behind DCHECK_ALWAYS_ON or + // remove this check once we have stabilized the implementation. + for (const auto& in_flight_attempt : in_flight_attempts_) { + CHECK(!in_flight_attempt->IsWaitingSSLConfig()); + } + return; + } + ssl_config_ready_notified_ = true; // Restart slow timer for in-flight attempts that have already completed // TCP handshakes. Also collect callbacks from in-flight attempts to invoke @@ -1106,10 +1221,6 @@ void HttpStreamPool::AttemptManager::MaybeAttemptConnection( return; } - if (group_->force_quic()) { - return; - } - if (!CanUseTcpBasedProtocols()) { return; } @@ -1119,9 +1230,9 @@ void HttpStreamPool::AttemptManager::MaybeAttemptConnection( return; } - // TODO(crbug.com/346835898): Ensure that we don't attempt connections when - // creating HttpStream on top of a SPDY session. - CHECK(!spdy_session_); + if (spdy_session_) { + return; + } // There might be multiple pending jobs. Make attempts as much as needed // and allowed. @@ -1138,7 +1249,8 @@ void HttpStreamPool::AttemptManager::MaybeAttemptConnection( TcpBasedAttemptState::kAllEndpointsFailed && !quic_task_) { // Tried all endpoints. - NotifyFailure(); + DCHECK(most_recent_tcp_error_.has_value()); + HandleFinalError(*most_recent_tcp_error_); } return; } @@ -1431,6 +1543,30 @@ bool HttpStreamPool::AttemptManager::HasEnoughAttemptsForSlowIPEndPoint( return num_attempts >= std::max(jobs_.size(), CalculateMaxPreconnectCount()); } +void HttpStreamPool::AttemptManager::HandleFinalError(int error) { + // `this` may already be failing, e.g. IP address change happens while failing + // for a different reason. + if (is_failing_) { + return; + } + + CHECK(!final_error_to_notify_jobs_.has_value()); + final_error_to_notify_jobs_ = error; + is_failing_ = true; + net_log_.AddEvent( + NetLogEventType::HTTP_STREAM_POOL_ATTEMPT_MANAGER_NOTIFY_FAILURE, [&] { + base::Value::Dict dict = GetStatesAsNetLogParams(); + dict.Set("net_error", final_error_to_notify_jobs()); + return dict; + }); + + CancelInFlightAttempts(StreamSocketCloseReason::kAbort); + CancelQuicTask(final_error_to_notify_jobs()); + NotifyPreconnectsComplete(final_error_to_notify_jobs()); + NotifyJobOfFailure(); + // `this` may be deleted. +} + HttpStreamPool::AttemptManager::FailureKind HttpStreamPool::AttemptManager::DetermineFailureKind() { if (is_canceling_jobs_) { @@ -1448,20 +1584,6 @@ HttpStreamPool::AttemptManager::DetermineFailureKind() { return FailureKind::kStreamFailed; } -void HttpStreamPool::AttemptManager::NotifyFailure() { - is_failing_ = true; - net_log_.AddEvent( - NetLogEventType::HTTP_STREAM_POOL_ATTEMPT_MANAGER_NOTIFY_FAILURE, [&] { - base::Value::Dict dict = GetStatesAsNetLogParams(); - dict.Set("net_error", final_error_to_notify_jobs()); - return dict; - }); - - NotifyPreconnectsComplete(final_error_to_notify_jobs()); - NotifyJobOfFailure(); - // `this` may be deleted. -} - void HttpStreamPool::AttemptManager::NotifyJobOfFailure() { CHECK(is_failing_); Job* job = ExtractFirstJobToNotify(); @@ -1577,9 +1699,7 @@ void HttpStreamPool::AttemptManager::CreateSpdyStreamAndNotify() { // notifying to jobs. Do another attempt. spdy_session_.reset(); - // We may not have calculated SSLConfig yet. Try to calculate it before - // attempting connections. - MaybeCalculateSSLConfig(); + CHECK(ssl_config_.has_value()); MaybeAttemptConnection(); return; } @@ -1602,6 +1722,9 @@ void HttpStreamPool::AttemptManager::CreateSpdyStreamAndNotify() { } void HttpStreamPool::AttemptManager::CreateQuicStreamAndNotify() { + CHECK(!is_canceling_jobs_); + CHECK(!is_failing_); + QuicChromiumClientSession* quic_session = quic_session_pool()->FindExistingSession( quic_session_alias_key().session_key(), @@ -1642,6 +1765,7 @@ void HttpStreamPool::AttemptManager::HandleSpdySessionReady( CHECK(!group_->force_quic()); CHECK(!is_failing_); CHECK(spdy_session_); + CHECK(spdy_session_->IsAvailable()); group_->Refresh(kSwitchingToHttp2, refresh_group_reason); NotifyPreconnectsComplete(OK); @@ -1789,6 +1913,10 @@ void HttpStreamPool::AttemptManager::OnInFlightAttemptComplete( /*supports_spdy=*/true); } + base::UmaHistogramTimes( + "Net.HttpStreamPool.NewSpdySessionEstablishTime", + base::TimeTicks::Now() - in_flight_attempt->start_time()); + HandleSpdySessionReady(StreamSocketCloseReason::kSpdySessionCreated); CreateSpdyStreamAndNotify(); return; @@ -1854,13 +1982,11 @@ void HttpStreamPool::AttemptManager::HandleAttemptFailure( return; } - final_error_to_notify_jobs_ = rv; - if (rv == ERR_SSL_CLIENT_AUTH_CERT_NEEDED) { CHECK(UsingTls()); client_auth_cert_info_ = in_flight_attempt->attempt()->GetCertRequestInfo(); in_flight_attempt.reset(); - NotifyFailure(); + HandleFinalError(rv); return; } @@ -1875,11 +2001,17 @@ void HttpStreamPool::AttemptManager::HandleAttemptFailure( CHECK(has_ssl_info); cert_error_ssl_info_ = ssl_info; in_flight_attempt.reset(); - NotifyFailure(); - } else { - in_flight_attempt.reset(); - MaybeAttemptConnection(); + HandleFinalError(rv); + return; } + + most_recent_tcp_error_ = rv; + in_flight_attempt.reset(); + // Try to connect to a different destination, if any. + // TODO(crbug.com/383606724): Figure out better way to make connection + // attempts, see the review comment at + // https://chromium-review.googlesource.com/c/chromium/src/+/6160855/comment/60e04065_805b0b89/ + MaybeAttemptConnection(); } void HttpStreamPool::AttemptManager::OnSpdyThrottleDelayPassed() { @@ -1898,15 +2030,26 @@ base::TimeDelta HttpStreamPool::AttemptManager::GetStreamAttemptDelay() { } void HttpStreamPool::AttemptManager::UpdateStreamAttemptState() { - if (!should_block_stream_attempt_) { - return; + if (should_block_stream_attempt_ && !CanUseQuic()) { + CancelStreamAttemptDelayTimer(); } +} - if (!CanUseQuic()) { - should_block_stream_attempt_ = false; - stream_attempt_delay_timer_.Stop(); +void HttpStreamPool::AttemptManager::MaybeRunStreamAttemptDelayTimer() { + if (!should_block_stream_attempt_ || + stream_attempt_delay_timer_.IsRunning() || !CanUseTcpBasedProtocols()) { return; } + CHECK(!stream_attempt_delay_.is_zero()); + stream_attempt_delay_timer_.Start( + FROM_HERE, stream_attempt_delay_, + base::BindOnce(&AttemptManager::OnStreamAttemptDelayPassed, + weak_ptr_factory_.GetWeakPtr())); +} + +void HttpStreamPool::AttemptManager::CancelStreamAttemptDelayTimer() { + should_block_stream_attempt_ = false; + stream_attempt_delay_timer_.Stop(); } void HttpStreamPool::AttemptManager::OnStreamAttemptDelayPassed() { diff --git a/naiveproxy/src/net/http/http_stream_pool_attempt_manager.h b/naiveproxy/src/net/http/http_stream_pool_attempt_manager.h index 8a066e6271..6663cc8b97 100644 --- a/naiveproxy/src/net/http/http_stream_pool_attempt_manager.h +++ b/naiveproxy/src/net/http/http_stream_pool_attempt_manager.h @@ -23,6 +23,7 @@ #include "net/base/load_states.h" #include "net/base/load_timing_info.h" #include "net/base/net_error_details.h" +#include "net/base/net_export.h" #include "net/base/priority_queue.h" #include "net/base/request_priority.h" #include "net/dns/host_resolver.h" @@ -61,6 +62,8 @@ class HttpStreamKey; class HttpStreamPool::AttemptManager : public HostResolver::ServiceEndpointRequest::Delegate { public: + class NET_EXPORT_PRIVATE QuicTask; + // The state of an IPEndPoint. There is no success state. The absence of a // state for an endpoint means that we haven't yet attempted to connect to the // endpoint, or that a connection to the endpoint was successfully completed @@ -92,18 +95,10 @@ class HttpStreamPool::AttemptManager Group* group() { return group_; } - HostResolver::ServiceEndpointRequest* service_endpoint_request() { - return service_endpoint_request_.get(); - } - bool is_failing() const { return is_failing_; } int final_error_to_notify_jobs() const; - bool is_service_endpoint_request_finished() const { - return service_endpoint_request_finished_; - } - base::TimeTicks dns_resolution_start_time() const { return dns_resolution_start_time_; } @@ -159,6 +154,9 @@ class HttpStreamPool::AttemptManager // Cancels all jobs. void CancelJobs(int error); + // Cancels the QuicTask if it exists. + void CancelQuicTask(int error); + // Returns the number of pending jobs/preconnects. The number is // calculated by subtracting the number of in-flight attempts (excluding slow // attempts) from the number of total jobs. @@ -201,6 +199,8 @@ class HttpStreamPool::AttemptManager void SetIsFailingForTest(bool is_failing) { is_failing_ = is_failing; } + QuicTask* quic_task_for_testing() const { return quic_task_.get(); } + IPEndPointStateMap& ip_endpoint_states_for_testing() { return ip_endpoint_states_; } @@ -208,6 +208,8 @@ class HttpStreamPool::AttemptManager return ip_endpoint_states_; } + bool HasSSLConfigForTesting() const { return ssl_config_.has_value(); } + private: FRIEND_TEST_ALL_PREFIXES(HttpStreamPoolAttemptManagerTest, GetIPEndPointToAttempt); @@ -263,6 +265,14 @@ class HttpStreamPool::AttemptManager HttpStreamPool* pool(); const HttpStreamPool* pool() const; + HostResolver::ServiceEndpointRequest* service_endpoint_request() { + return service_endpoint_request_.get(); + } + + bool is_service_endpoint_request_finished() const { + return service_endpoint_request_finished_; + } + int WaitForSSLConfigReady(); base::expected GetSSLConfig( @@ -286,16 +296,17 @@ class HttpStreamPool::AttemptManager // Returns true when there is an active SPDY/QUIC session that can be used for // on-going jobs after service endpoint results has changed. May notify jobs // of stream ready. - bool CanUseExistingSessionAfterEndpointChanges(); - - // Runs the stream attempt delay timer if stream attempts are blocked and the - // timer is not running. - void MaybeRunStreamAttemptDelayTimer(); + bool CanUseExistingQuicSessionAfterEndpointChanges(); + bool CanUseExistingSpdySessionAfterEndpointChanges(); // Calculate SSLConfig if it's not calculated yet and `this` has received // enough information to calculate it. void MaybeCalculateSSLConfig(); + // When SSLConfig is ready and the notification has not yet been sent, + // notifies in-flight attempts that SSLConfig is ready. + void MaybeNotifySSLConfigReady(); + // Attempts QUIC sessions if QUIC can be used and `this` is ready to start // cryptographic connection handshakes. void MaybeAttemptQuic(); @@ -357,13 +368,14 @@ class HttpStreamPool::AttemptManager std::optional& current_endpoint); bool HasEnoughAttemptsForSlowIPEndPoint(const IPEndPoint& ip_endpoint); + // Called when this gets a fatal error. Notifies all jobs of the failure and + // cancels in-flight TCP-based attempts and QuicTask's, if they exist. + void HandleFinalError(int error); + // Calculate the failure kind to notify jobs of failure. Used to call one of // the job's methods. FailureKind DetermineFailureKind(); - // Notifies a failure to all jobs. - void NotifyFailure(); - // Notifies a failure to a single job. Used by NotifyFailure(). void NotifyJobOfFailure(); @@ -429,6 +441,14 @@ class HttpStreamPool::AttemptManager // `stream_attempt_delay_timer_`. void UpdateStreamAttemptState(); + // Runs the stream attempt delay timer if stream attempts are blocked and the + // timer is not running. StreamAttemptDelayBehavior specifies when this method + // is called. + void MaybeRunStreamAttemptDelayTimer(); + + // Cancels `stream_attempt_delay_timer_`. + void CancelStreamAttemptDelayTimer(); + // Called when `stream_attempt_delay_timer_` is fired. void OnStreamAttemptDelayPassed(); @@ -509,6 +529,9 @@ class HttpStreamPool::AttemptManager // attempt failure, network change events, or QUIC task failure. std::optional final_error_to_notify_jobs_; + // Set to the most recent TCP-based attempt failure, if any. + std::optional most_recent_tcp_error_; + // Set to a SSLInfo when an attempt has failed with a certificate error. Used // to notify jobs. std::optional cert_error_ssl_info_; @@ -524,6 +547,7 @@ class HttpStreamPool::AttemptManager // TODO(crbug.com/40812426): We need to have separate SSLConfigs when we // support multiple HTTPS RR that have different service endpoints. std::optional ssl_config_; + bool ssl_config_ready_notified_ = false; std::set, base::UniquePtrComparator> in_flight_attempts_; diff --git a/naiveproxy/src/net/http/http_stream_pool_quic_task.cc b/naiveproxy/src/net/http/http_stream_pool_attempt_manager_quic_task.cc similarity index 79% rename from naiveproxy/src/net/http/http_stream_pool_quic_task.cc rename to naiveproxy/src/net/http/http_stream_pool_attempt_manager_quic_task.cc index 5c9e989b21..3e587f2f48 100644 --- a/naiveproxy/src/net/http/http_stream_pool_quic_task.cc +++ b/naiveproxy/src/net/http/http_stream_pool_attempt_manager_quic_task.cc @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "net/http/http_stream_pool_quic_task.h" +#include "net/http/http_stream_pool_attempt_manager_quic_task.h" #include #include @@ -29,8 +29,9 @@ namespace net { -HttpStreamPool::QuicTask::QuicTask(AttemptManager* manager, - quic::ParsedQuicVersion quic_version) +HttpStreamPool::AttemptManager::QuicTask::QuicTask( + AttemptManager* manager, + quic::ParsedQuicVersion quic_version) : manager_(manager), quic_version_(quic_version), net_log_(NetLogWithSource::Make( @@ -51,11 +52,11 @@ HttpStreamPool::QuicTask::QuicTask(AttemptManager* manager, net_log_.source()); } -HttpStreamPool::QuicTask::~QuicTask() { +HttpStreamPool::AttemptManager::QuicTask::~QuicTask() { net_log_.EndEvent(NetLogEventType::HTTP_STREAM_POOL_QUIC_TASK_ALIVE); } -void HttpStreamPool::QuicTask::MaybeAttempt() { +void HttpStreamPool::AttemptManager::QuicTask::MaybeAttempt() { CHECK(!quic_session_pool()->CanUseExistingSession(GetKey().session_key(), GetKey().destination())); @@ -65,6 +66,16 @@ void HttpStreamPool::QuicTask::MaybeAttempt() { } std::optional quic_endpoint = GetQuicEndpointToAttempt(); + net_log_.AddEvent( + NetLogEventType::HTTP_STREAM_POOL_ATTEMPT_MANAGER_QUIC_TASK_MAYBE_ATTEMPT, + [&] { + base::Value::Dict dict; + if (quic_endpoint.has_value()) { + dict.Set("endpoint", quic_endpoint->ToValue()); + } + return dict; + }); + if (!quic_endpoint.has_value()) { if (manager_->is_service_endpoint_request_finished()) { if (!start_result_.has_value()) { @@ -99,12 +110,20 @@ void HttpStreamPool::QuicTask::MaybeAttempt() { net_log_.AddEvent(NetLogEventType::HTTP_STREAM_POOL_QUIC_ATTEMPT_START, [&] { return quic_endpoint->ToValue(); }); + CHECK(attempt_start_time_.is_null()); + attempt_start_time_ = base::TimeTicks::Now(); + session_attempt_ = quic_session_pool()->CreateSessionAttempt( this, GetKey().session_key(), std::move(*quic_endpoint), cert_verify_flags, dns_resolution_start_time, dns_resolution_end_time, /*use_dns_aliases=*/true, std::move(dns_aliases), manager_->CalculateMultiplexedSessionCreationInitiator()); + if (GetStreamAttemptDelayBehavior() == + StreamAttemptDelayBehavior::kStartTimerOnFirstQuicAttempt) { + manager_->MaybeRunStreamAttemptDelayTimer(); + } + int rv = session_attempt_->Start(base::BindOnce( &QuicTask::OnSessionAttemptComplete, weak_ptr_factory_.GetWeakPtr())); if (rv != ERR_IO_PENDING) { @@ -112,19 +131,21 @@ void HttpStreamPool::QuicTask::MaybeAttempt() { } } -QuicSessionPool* HttpStreamPool::QuicTask::GetQuicSessionPool() { +QuicSessionPool* +HttpStreamPool::AttemptManager::QuicTask::GetQuicSessionPool() { return manager_->group()->http_network_session()->quic_session_pool(); } -const QuicSessionAliasKey& HttpStreamPool::QuicTask::GetKey() { +const QuicSessionAliasKey& HttpStreamPool::AttemptManager::QuicTask::GetKey() { return manager_->group()->quic_session_alias_key(); } -const NetLogWithSource& HttpStreamPool::QuicTask::GetNetLog() { +const NetLogWithSource& HttpStreamPool::AttemptManager::QuicTask::GetNetLog() { return net_log_; } -base::Value::Dict HttpStreamPool::QuicTask::GetInfoAsValue() const { +base::Value::Dict HttpStreamPool::AttemptManager::QuicTask::GetInfoAsValue() + const { base::Value::Dict dict; dict.Set("has_session_attempt", session_attempt_ != nullptr); if (start_result_.has_value()) { @@ -133,21 +154,22 @@ base::Value::Dict HttpStreamPool::QuicTask::GetInfoAsValue() const { return dict; } -const HttpStreamKey& HttpStreamPool::QuicTask::stream_key() const { +const HttpStreamKey& HttpStreamPool::AttemptManager::QuicTask::stream_key() + const { return manager_->group()->stream_key(); } -QuicSessionPool* HttpStreamPool::QuicTask::quic_session_pool() { +QuicSessionPool* HttpStreamPool::AttemptManager::QuicTask::quic_session_pool() { return manager_->group()->http_network_session()->quic_session_pool(); } HostResolver::ServiceEndpointRequest* -HttpStreamPool::QuicTask::service_endpoint_request() { +HttpStreamPool::AttemptManager::QuicTask::service_endpoint_request() { return manager_->service_endpoint_request(); } std::optional -HttpStreamPool::QuicTask::GetQuicEndpointToAttempt() { +HttpStreamPool::AttemptManager::QuicTask::GetQuicEndpointToAttempt() { const bool svcb_optional = manager_->IsSvcbOptional(); for (auto& endpoint : service_endpoint_request()->GetEndpointResults()) { std::optional quic_endpoint = @@ -161,7 +183,7 @@ HttpStreamPool::QuicTask::GetQuicEndpointToAttempt() { } std::optional -HttpStreamPool::QuicTask::GetQuicEndpointFromServiceEndpoint( +HttpStreamPool::AttemptManager::QuicTask::GetQuicEndpointFromServiceEndpoint( const ServiceEndpoint& service_endpoint, bool svcb_optional) { quic::ParsedQuicVersion endpoint_quic_version = @@ -186,13 +208,15 @@ HttpStreamPool::QuicTask::GetQuicEndpointFromServiceEndpoint( service_endpoint.metadata); } -std::optional HttpStreamPool::QuicTask::GetPreferredIPEndPoint( +std::optional +HttpStreamPool::AttemptManager::QuicTask::GetPreferredIPEndPoint( const std::vector& ip_endpoints) { // TODO(crbug.com/346835898): Attempt more than one endpoints. return ip_endpoints.empty() ? std::nullopt : std::optional(ip_endpoints[0]); } -void HttpStreamPool::QuicTask::OnSessionAttemptComplete(int rv) { +void HttpStreamPool::AttemptManager::QuicTask::OnSessionAttemptComplete( + int rv) { if (rv == OK) { QuicChromiumClientSession* session = quic_session_pool()->FindExistingSession(GetKey().session_key(), diff --git a/naiveproxy/src/net/http/http_stream_pool_quic_task.h b/naiveproxy/src/net/http/http_stream_pool_attempt_manager_quic_task.h similarity index 82% rename from naiveproxy/src/net/http/http_stream_pool_quic_task.h rename to naiveproxy/src/net/http/http_stream_pool_attempt_manager_quic_task.h index e8f5286714..8806ce4988 100644 --- a/naiveproxy/src/net/http/http_stream_pool_quic_task.h +++ b/naiveproxy/src/net/http/http_stream_pool_attempt_manager_quic_task.h @@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef NET_HTTP_HTTP_STREAM_POOL_QUIC_TASK_H_ -#define NET_HTTP_HTTP_STREAM_POOL_QUIC_TASK_H_ +#ifndef NET_HTTP_HTTP_STREAM_POOL_ATTEMPT_MANAGER_QUIC_TASK_H_ +#define NET_HTTP_HTTP_STREAM_POOL_ATTEMPT_MANAGER_QUIC_TASK_H_ #include #include @@ -14,6 +14,7 @@ #include "net/base/ip_endpoint.h" #include "net/dns/host_resolver.h" #include "net/http/http_stream_pool.h" +#include "net/http/http_stream_pool_attempt_manager.h" #include "net/quic/quic_session_attempt.h" #include "net/quic/quic_session_pool.h" #include "net/third_party/quiche/src/quiche/quic/core/quic_versions.h" @@ -25,7 +26,8 @@ class QuicSessionAliasKey; // Handles QUIC session attempts for HttpStreamPool::AttemptManager. Owned by an // AttemptManager. -class HttpStreamPool::QuicTask : public QuicSessionAttempt::Delegate { +class HttpStreamPool::AttemptManager::QuicTask + : public QuicSessionAttempt::Delegate { public: // `manager` must outlive `this`. QuicTask(AttemptManager* manager, quic::ParsedQuicVersion quic_version); @@ -51,6 +53,10 @@ class HttpStreamPool::QuicTask : public QuicSessionAttempt::Delegate { // any. Never returns ERR_IO_PENDING. std::optional start_result() const { return start_result_; } + // Returns the start time of a session attempt. Maybe null when no attempt is + // made. + base::TimeTicks attempt_start_time() const { return attempt_start_time_; } + private: const HttpStreamKey& stream_key() const; @@ -78,10 +84,11 @@ class HttpStreamPool::QuicTask : public QuicSessionAttempt::Delegate { // TODO(crbug.com/346835898): Support multiple attempts. std::unique_ptr session_attempt_; + base::TimeTicks attempt_start_time_; base::WeakPtrFactory weak_ptr_factory_{this}; }; } // namespace net -#endif // NET_HTTP_HTTP_STREAM_POOL_QUIC_TASK_H_ +#endif // NET_HTTP_HTTP_STREAM_POOL_ATTEMPT_MANAGER_QUIC_TASK_H_ diff --git a/naiveproxy/src/net/http/http_stream_pool_group.cc b/naiveproxy/src/net/http/http_stream_pool_group.cc index b9e5db60bd..6926535ce0 100644 --- a/naiveproxy/src/net/http/http_stream_pool_group.cc +++ b/naiveproxy/src/net/http/http_stream_pool_group.cc @@ -237,7 +237,6 @@ void HttpStreamPool::Group::ReleaseStreamSocket( void HttpStreamPool::Group::AddIdleStreamSocket( std::unique_ptr socket) { - CHECK(socket->IsConnectedAndIdle()); CHECK(IsNegotiatedProtocolTextBased(socket->GetNegotiatedProtocol())); CHECK_LE(ActiveStreamSocketCount(), pool_->max_stream_sockets_per_group()); @@ -304,7 +303,7 @@ bool HttpStreamPool::Group::CloseOneIdleStreamSocket() { kExceededSocketLimits); idle_stream_sockets_.pop_front(); pool_->DecrementTotalIdleStreamCount(); - // Use MaybeCompeleteLater since MaybeComplete() may delete `this`, and this + // Use MaybeCompleteLater since MaybeComplete() may delete `this`, and this // method could be called while iterating all groups. MaybeCompleteLater(); return true; @@ -338,13 +337,8 @@ void HttpStreamPool::Group::FlushWithError( int error, StreamSocketCloseReason attempt_cancel_reason, std::string_view net_log_close_reason_utf8) { - // Refresh() may delete this. Get a weak pointer to this and call CancelJobs() - // only when this is still alive. - base::WeakPtr weak_this = weak_ptr_factory_.GetWeakPtr(); Refresh(net_log_close_reason_utf8, attempt_cancel_reason); - if (weak_this) { - CancelJobs(error); - } + CancelJobs(error); } void HttpStreamPool::Group::Refresh(std::string_view net_log_close_reason_utf8, @@ -352,18 +346,15 @@ void HttpStreamPool::Group::Refresh(std::string_view net_log_close_reason_utf8, // TODO(crbug.com/381742472): Should we do anything for paused // jobs/preconnects? ++generation_; - CleanupIdleStreamSockets(CleanupMode::kForce, net_log_close_reason_utf8); if (attempt_manager_) { attempt_manager_->CancelInFlightAttempts(cancel_reason); } + CleanupIdleStreamSockets(CleanupMode::kForce, net_log_close_reason_utf8); } void HttpStreamPool::Group::CloseIdleStreams( std::string_view net_log_close_reason_utf8) { CleanupIdleStreamSockets(CleanupMode::kForce, net_log_close_reason_utf8); - // Use MaybeCompleteLater since MaybeComplete() may delete `this`, and this - // method could be called while iterating all groups. - MaybeCompleteLater(); } void HttpStreamPool::Group::CancelJobs(int error) { @@ -515,6 +506,9 @@ void HttpStreamPool::Group::CleanupIdleStreamSockets( ++it; } } + // Use MaybeCompleteLater since MaybeComplete() may delete `this`, and this + // method could be called while iterating all groups. + MaybeCompleteLater(); } void HttpStreamPool::Group::EnsureAttemptManager() { diff --git a/naiveproxy/src/net/http/http_stream_pool_test_util.cc b/naiveproxy/src/net/http/http_stream_pool_test_util.cc index bc3b42df1b..b9f442651e 100644 --- a/naiveproxy/src/net/http/http_stream_pool_test_util.cc +++ b/naiveproxy/src/net/http/http_stream_pool_test_util.cc @@ -78,6 +78,15 @@ ResolveErrorInfo FakeServiceEndpointRequest::GetResolveErrorInfo() { return resolve_error_info_; } +const HostCache::EntryStaleness* FakeServiceEndpointRequest::GetStaleInfo() + const { + return nullptr; +} + +bool FakeServiceEndpointRequest::IsStaleWhileRefresing() const { + return false; +} + void FakeServiceEndpointRequest::ChangeRequestPriority( RequestPriority priority) { priority_ = priority; diff --git a/naiveproxy/src/net/http/http_stream_pool_test_util.h b/naiveproxy/src/net/http/http_stream_pool_test_util.h index 4f672ae838..11f7406c52 100644 --- a/naiveproxy/src/net/http/http_stream_pool_test_util.h +++ b/naiveproxy/src/net/http/http_stream_pool_test_util.h @@ -31,34 +31,39 @@ class IOBuffer; class SSLInfo; // A fake ServiceEndpointRequest implementation that provides testing harnesses. +// See the comment of HostResolver::ServiceEndpointRequest for details. class FakeServiceEndpointRequest : public HostResolver::ServiceEndpointRequest { public: FakeServiceEndpointRequest(); ~FakeServiceEndpointRequest() override; - void set_start_result(int start_result) { start_result_ = start_result; } - + // Sets the current endpoints to `endpoints`. Previous endpoints are + // discarded. FakeServiceEndpointRequest& set_endpoints( std::vector endpoints) { endpoints_ = std::move(endpoints); return *this; } + // Add `endpoint` to the current endpoints. FakeServiceEndpointRequest& add_endpoint(ServiceEndpoint endpoint) { endpoints_.emplace_back(std::move(endpoint)); return *this; } + // Sets the return value of GetDnsAliasResults(). FakeServiceEndpointRequest& set_aliases(std::set aliases) { aliases_ = std::move(aliases); return *this; } + // Sets the return value of EndpointsCryptoReady(). FakeServiceEndpointRequest& set_crypto_ready(bool endpoints_crypto_ready) { endpoints_crypto_ready_ = endpoints_crypto_ready; return *this; } + // Sets the return value of GetResolveErrorInfo(). FakeServiceEndpointRequest& set_resolve_error_info( ResolveErrorInfo resolve_error_info) { resolve_error_info_ = resolve_error_info; @@ -71,10 +76,17 @@ class FakeServiceEndpointRequest : public HostResolver::ServiceEndpointRequest { return *this; } + // Make `this` complete synchronously when ServiceEndpointRequest::Start() + // is called. FakeServiceEndpointRequest& CompleteStartSynchronously(int rv); + // Calls `delegate_->OnServiceEndpointsUpdated()`. Must not be used after + // calling CompleteStartSynchronously() or + // CallOnServiceEndpointRequestFinished() FakeServiceEndpointRequest& CallOnServiceEndpointsUpdated(); + // Calls `delegate_->OnServiceEndpointRequestFinished()`. Mut not be used + // after calling CompleteStartSynchronously(). FakeServiceEndpointRequest& CallOnServiceEndpointRequestFinished(int rv); // HostResolver::ServiceEndpointRequest methods: @@ -83,6 +95,8 @@ class FakeServiceEndpointRequest : public HostResolver::ServiceEndpointRequest { const std::set& GetDnsAliasResults() override; bool EndpointsCryptoReady() override; ResolveErrorInfo GetResolveErrorInfo() override; + const HostCache::EntryStaleness* GetStaleInfo() const override; + bool IsStaleWhileRefresing() const override; void ChangeRequestPriority(RequestPriority priority) override; private: @@ -108,6 +122,11 @@ class FakeServiceEndpointResolver : public HostResolver { ~FakeServiceEndpointResolver() override; + // Create a FakeServiceEndpointRequest that will be used for the next + // CreateServiceEndpointRequest() call. Note that + // CreateServiceEndpointRequest() consumes the request. You will need to call + // this method multiple times when you expect multiple + // CreateServiceEndpointRequest() calls. FakeServiceEndpointRequest* AddFakeRequest(); // HostResolver methods: diff --git a/naiveproxy/src/net/http/http_util.cc b/naiveproxy/src/net/http/http_util.cc index a54e96de19..0fecc9c96e 100644 --- a/naiveproxy/src/net/http/http_util.cc +++ b/naiveproxy/src/net/http/http_util.cc @@ -1047,7 +1047,7 @@ bool HttpUtil::NameValuePairsIterator::ParseNameValuePair( // If there is a value, do additional checking and calculate the value. if (has_value) { // Check that no quote appears before the equals sign. - if (base::ranges::any_of(name_, IsQuote)) { + if (std::ranges::any_of(name_, IsQuote)) { return false; } diff --git a/naiveproxy/src/net/http/http_vary_data.cc b/naiveproxy/src/net/http/http_vary_data.cc index 1173d40ac8..279752d697 100644 --- a/naiveproxy/src/net/http/http_vary_data.cc +++ b/naiveproxy/src/net/http/http_vary_data.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "net/http/http_vary_data.h" #include diff --git a/naiveproxy/src/net/http/mock_gssapi_library_posix.cc b/naiveproxy/src/net/http/mock_gssapi_library_posix.cc index 58763e56af..cc21d4e5ed 100644 --- a/naiveproxy/src/net/http/mock_gssapi_library_posix.cc +++ b/naiveproxy/src/net/http/mock_gssapi_library_posix.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "net/http/mock_gssapi_library_posix.h" #include "base/strings/string_util.h" diff --git a/naiveproxy/src/net/http/no_vary_search_cache.cc b/naiveproxy/src/net/http/no_vary_search_cache.cc new file mode 100644 index 0000000000..322098efd7 --- /dev/null +++ b/naiveproxy/src/net/http/no_vary_search_cache.cc @@ -0,0 +1,488 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "net/http/no_vary_search_cache.h" + +#include +#include +#include +#include +#include + +#include "base/check.h" +#include "base/check_op.h" +#include "base/memory/weak_ptr.h" +#include "base/metrics/histogram_macros.h" +#include "base/notreached.h" +#include "base/time/time.h" +#include "net/http/http_cache.h" +#include "net/http/http_no_vary_search_data.h" + +namespace net { + +namespace { + +// We need to use a separate enum for the +// HttpCache.NoVarySearch.HeaderParseResult than +// HttpNoVarySearchData::ParseErrorEnum, as that enum does not have a value for +// a successful parse. +// +// These values are persisted to logs. Entries should not be renumbered and +// numeric values should never be reused. +// +// LINT.IfChange(NoVarySearchHeaderParseResult) +enum class NoVarySearchHeaderParseResult { + kSuccess = 0, + kNoHeader = 1, + kDefaultValue = 2, + kNotDictionary = 3, + kNonBooleanKeyOrder = 4, + kParamsNotStringList = 5, + kExceptNotStringList = 6, + kExceptWithoutTrueParams = 7, + kMaxValue = kExceptWithoutTrueParams, +}; +// LINT.ThenChange(//tools/metrics/histograms/metadata/net/enums.xml:NoVarySearchHeaderParseResult) + +NoVarySearchHeaderParseResult MapParseErrorEnum( + HttpNoVarySearchData::ParseErrorEnum error) { + using enum HttpNoVarySearchData::ParseErrorEnum; + switch (error) { + case kOk: + return NoVarySearchHeaderParseResult::kNoHeader; + + case kDefaultValue: + return NoVarySearchHeaderParseResult::kDefaultValue; + + case kNotDictionary: + return NoVarySearchHeaderParseResult::kNotDictionary; + + case kUnknownDictionaryKey: + NOTREACHED(); // No longer used. + + case kNonBooleanKeyOrder: + return NoVarySearchHeaderParseResult::kNonBooleanKeyOrder; + + case kParamsNotStringList: + return NoVarySearchHeaderParseResult::kParamsNotStringList; + + case kExceptNotStringList: + return NoVarySearchHeaderParseResult::kExceptNotStringList; + + case kExceptWithoutTrueParams: + return NoVarySearchHeaderParseResult::kExceptWithoutTrueParams; + } + NOTREACHED(); +} + +void EmitNoVarySearchHeaderParseResultHistogram( + const base::expected& result) { + auto value = NoVarySearchHeaderParseResult::kSuccess; + if (!result.has_value()) { + value = MapParseErrorEnum(result.error()); + } + UMA_HISTOGRAM_ENUMERATION("HttpCache.NoVarySearch.HeaderParseResult", value); +} + +// Stripping the URL of its query and fragment (ref) needs to be done for every +// request, so we want to avoid allocating memory for a GURL in the case of a +// cache miss. The return value points at memory owned by `url`, so should not +// outlive it. +GURL ExtractBaseURL(const GURL& url) { + CHECK(url.is_valid()); + GURL::Replacements replacements; + replacements.ClearQuery(); + replacements.ClearRef(); + return url.ReplaceComponents(replacements); +} + +bool URLIsAcceptable(const GURL& url) { + // HTTP(S) URLs always have a path starting with "/" after canonicalization. + return url.is_valid() && url.has_path() && !url.has_username() && + !url.has_password(); +} + +} // namespace + +// base::LinkedList only supports having an object in a single linked list at a +// time. However, we need QueryString objects to be in two separate lists: +// * the least-recently-used (LRU) list, which has the most recently added or +// used entry at its head and the next entry to be evicted at its tail. This +// list contains every QueryString in the cache. +// * the list of cached QueryString objects for a particular base URL and +// No-Vary-Search parameter. These lists have the most recently inserted +// entry for this {base URL, NVS} pair at their heads. +// +// In order to work-around the limitation of base::LinkedList, QueryString has +// two base classes. LruNode represents its role as a member of the LRU list, +// and QueryStringListNode represents its role as a member of the +// QueryStringList list. By calling base::LinkNode methods via the appropriate +// base class it can control which list it is manipulating. +class NoVarySearchCache::LruNode : public base::LinkNode { + public: + // Not copyable or movable. + LruNode(const LruNode&) = delete; + LruNode& operator=(const LruNode&) = delete; + + // Every instance of LruNode is actually a QueryString. + QueryString* ToQueryString(); + + private: + friend class QueryString; + + LruNode() = default; + ~LruNode() = default; +}; + +class NoVarySearchCache::QueryStringListNode + : public base::LinkNode { + public: + // Not copyable or movable. + QueryStringListNode(const QueryStringListNode&) = delete; + QueryStringListNode& operator=(const QueryStringListNode&) = delete; + + // Every instance of QueryStringListNode is actually a QueryString. + QueryString* ToQueryString(); + + private: + friend class QueryString; + + QueryStringListNode() = default; + ~QueryStringListNode() = default; +}; + +// QueryString is the entry type for the cache. Its main purpose is to hold the +// query string, ie. everything between the "?" and the "#" in the original URL. +// Together with the `base_url`, this can be used to reconstruct the original +// URL that was used to store the original request in the disk cache. +class NoVarySearchCache::QueryString final + : public NoVarySearchCache::LruNode, + public NoVarySearchCache::QueryStringListNode { + public: + // Creates a QueryString and adds it to `list` and `lru_list`. + static void CreateAndInsert(std::optional query, + QueryStringList& query_string_list, + base::LinkedList& lru_list) { + DCHECK(!query || query->find('#') == std::string_view::npos) + << "Query contained a '#' character, meaning that the URL reassembly " + "will not work correctly because the '#' will be re-interpreted as " + "the start of a fragment. This should not happen. Query was '" + << query.value() << "'"; + // This use of bare new is needed because base::LinkedList does not have + // ownership semantics. + auto* query_string = new QueryString(query, query_string_list); + query_string->LruNode::InsertBefore(lru_list.head()); + query_string->QueryStringListNode::InsertBefore( + query_string_list.list.head()); + } + + // Not copyable or movable. + QueryString(const QueryString&) = delete; + QueryString& operator=(const QueryString&) = delete; + + // Removes this object from both lists and deletes it. + void RemoveAndDelete() { + LruNode::RemoveFromList(); + QueryStringListNode::RemoveFromList(); + delete this; + } + + // Moves this object to the head of `list`. + template + void MoveToHead(List& linked_list) { + auto* head = linked_list.head(); + if (head != this) { + MoveBeforeNode(linked_list.head()->value()); + } + } + + const std::optional& query() const { return query_; } + + QueryStringList& query_string_list_ref() { + return query_string_list_ref_.get(); + } + + base::Time insertion_time() const { return insertion_time_; } + + void UpdateInsertionTime() { insertion_time_ = base::Time::Now(); } + + // Return the original GURL that this entry was constructed from (not + // including any fragment). It's important to use this method to correctly + // reconstruct URLs that have an empty query (end in '?'). + GURL ReconstructOriginalURL(const GURL& base_url) { + if (!query_.has_value()) { + return base_url; + } + + GURL::Replacements replacements; + replacements.SetQueryStr(query_.value()); + return base_url.ReplaceComponents(replacements); + } + + EraseHandle CreateEraseHandle() { + return EraseHandle(weak_factory_.GetWeakPtr()); + } + + private: + QueryString(std::optional query, + QueryStringList& query_string_list) + : query_(query), + query_string_list_ref_(query_string_list), + insertion_time_(base::Time::Now()) {} + + // Must only be called from RemoveAndDelete(). + ~QueryString() = default; + + // Moves this object in front of `node`. + template + void MoveBeforeNode(NodeType* node) { + static_assert(std::same_as || + std::same_as, + "This assert is just documentation"); + CHECK_NE(node, this); + NodeType::RemoveFromList(); + NodeType::InsertBefore(node); + } + + // No-Vary-Search treats "http://www.example.com/" and + // "http://www.example.com/?" as the same URL, but the disk cache key treats + // them as different URLs, so we need to be able to distinguish them to + // correctly reconstruct the original URL. `query_ == std::nullopt` means that + // there was no `?` in the original URL, and `query_ == ""` means there was. + const std::optional query_; + + // `query_string_list_ref_` allows the keys for this entry to be located in + // the cache so that it can be erased efficiently. + const raw_ref query_string_list_ref_; + + // `insertion_time_` breaks ties when there are multiple possible matches. The + // most recent entry will be used as it is most likely to still exist in the + // disk cache. + base::Time insertion_time_; + + // EraseHandle uses weak pointers to QueryString objects to enable an entry to + // be deleted from the cache if it is found not to be readable from the disk + // cache. + base::WeakPtrFactory weak_factory_{this}; +}; + +// The two implementations of ToQueryString() are defined out-of-line so that +// the compiler has seen the definition of QueryString and so knows the correct +// offsets to apply to the `this` pointer. +NoVarySearchCache::QueryString* NoVarySearchCache::LruNode::ToQueryString() { + return static_cast(this); +} + +NoVarySearchCache::QueryString* +NoVarySearchCache::QueryStringListNode::ToQueryString() { + return static_cast(this); +} + +NoVarySearchCache::EraseHandle::EraseHandle( + base::WeakPtr query_string) + : query_string_(std::move(query_string)) {} + +NoVarySearchCache::EraseHandle::~EraseHandle() = default; + +NoVarySearchCache::EraseHandle::EraseHandle(EraseHandle&& rhs) = default; +NoVarySearchCache::EraseHandle& NoVarySearchCache::EraseHandle::operator=( + EraseHandle&& rhs) = default; + +bool NoVarySearchCache::EraseHandle::EqualsForTesting( + const EraseHandle& rhs) const { + return query_string_.get() == rhs.query_string_.get(); +} + +bool NoVarySearchCache::EraseHandle::IsGoneForTesting() const { + return !query_string_; +} + +NoVarySearchCache::NoVarySearchCache(size_t max_size) : max_size_(max_size) { + CHECK_GT(max_size_, 0u); +} + +NoVarySearchCache::~NoVarySearchCache() { + map_.clear(); + // Clearing the map should have freed all the QueryString objects. + CHECK(lru_.empty()); +} + +std::optional NoVarySearchCache::Lookup( + const HttpRequestInfo& request) { + const GURL& url = request.url; + if (!URLIsAcceptable(url)) { + return std::nullopt; + } + // TODO(https://crbug.com/388956603): Try to avoid allocating memory for the + // base url. + const GURL base_url = ExtractBaseURL(url); + // TODO(https://crbug.com/388956603): This does a lot of allocations and + // string copies. Try to reduce the amount of work done for a miss. + const std::optional maybe_cache_key = + HttpCache::GenerateCacheKeyForRequestWithAlternateURL(&request, base_url); + if (!maybe_cache_key) { + return std::nullopt; + } + const BaseURLCacheKey cache_key(maybe_cache_key.value()); + const auto it = map_.find(cache_key); + if (it == map_.end()) { + return std::nullopt; + } + // We have a match, so we need to create a real URL now. + QueryString* best_match = nullptr; + GURL original_url; + for (auto& [nvs_data, query_strings] : it->second) { + auto result = FindQueryStringInList(query_strings, base_url, url, nvs_data); + if (result && (!best_match || best_match->insertion_time() < + result->match->insertion_time())) { + best_match = result->match; + original_url = result->original_url; + } + } + if (!best_match) { + return std::nullopt; + } + // Move to head of `lru_` list. + best_match->MoveToHead(lru_); + + return LookupResult(original_url, best_match->CreateEraseHandle()); +} + +void NoVarySearchCache::MaybeInsert(const HttpRequestInfo& request, + const HttpResponseHeaders& headers) { + const GURL& url = request.url; + if (!URLIsAcceptable(url)) { + return; + } + auto maybe_nvs_data = HttpNoVarySearchData::ParseFromHeaders(headers); + EmitNoVarySearchHeaderParseResultHistogram(maybe_nvs_data); + if (!maybe_nvs_data.has_value()) { + return; + } + const GURL base_url = ExtractBaseURL(url); + + std::optional query; + if (url.has_query()) { + query = url.query_piece(); + } + + // Using lower_bound() followed by emplace_hint() allows us to avoid + // constructing a Key object if there is already a matching key in the map, + // and do only a single logN lookup. + const std::optional maybe_cache_key = + HttpCache::GenerateCacheKeyForRequestWithAlternateURL(&request, base_url); + if (!maybe_cache_key) { + return; + } + const BaseURLCacheKey cache_key(maybe_cache_key.value()); + const auto [it, _] = map_.try_emplace(cache_key); + DataMapType& data_map = it->second; + const auto [data_it, inserted] = + data_map.emplace(std::move(*maybe_nvs_data), it->first); + const HttpNoVarySearchData& nvs_data = data_it->first; + QueryStringList& query_strings = data_it->second; + if (inserted) { + query_strings.nvs_data_ref = &nvs_data; + } else { + // There was already an entry for this `nvs_data`. We need to check if it + // has a match for the URL we're trying to insert. If it does, we should + // update or replace the existing QueryString. + if (auto result = + FindQueryStringInList(query_strings, base_url, url, nvs_data)) { + QueryString* match = result->match; + if (match->query() == query) { + // In the exact match case we can use the existing QueryString object. + match->UpdateInsertionTime(); + match->MoveToHead(query_strings.list); + match->MoveToHead(lru_); + return; + } + + // No-Vary-Search matches are transitive. Any future requests that might + // be a match for `match` are also a match for `url`. Since `url` is newer + // we will prefer it, and so `match` will never be used again and we can + // safely remove it from the cache. + --size_; + match->RemoveAndDelete(); + } + } + CHECK_LE(size_, max_size_); + ++size_; + QueryString::CreateAndInsert(query, query_strings, lru_); + EvictIfOverfull(); +} + +void NoVarySearchCache::Erase(EraseHandle handle) { + if (QueryString* query_string = handle.query_string_.get()) { + EraseQuery(query_string); + } +} + +// This is out-of-line to discourage inlining so the bots can detect if it is +// accidentally linked into the binary. +size_t NoVarySearchCache::GetSizeForTesting() const { + return size_; +} + +bool NoVarySearchCache::IsTopLevelMapEmptyForTesting() const { + return map_.empty(); +} + +NoVarySearchCache::QueryStringList::QueryStringList(const BaseURLCacheKey& key) + : key_ref(key) {} + +NoVarySearchCache::QueryStringList::~QueryStringList() { + while (!list.empty()) { + list.head()->value()->ToQueryString()->RemoveAndDelete(); + } +} + +void NoVarySearchCache::EvictIfOverfull() { + CHECK_LE(size_, max_size_ + 1); + if (size_ == max_size_ + 1) { + // This happens when an entry is added when the cache is already full. + // Remove an entry to make `size_` == `max_size_` again. + EraseQuery(lru_.tail()->value()->ToQueryString()); + } +} + +void NoVarySearchCache::EraseQuery(QueryString* query_string) { + CHECK_GT(size_, 0u); + --size_; + const QueryStringList& query_strings = query_string->query_string_list_ref(); + query_string->RemoveAndDelete(); + if (query_strings.list.empty()) { + const HttpNoVarySearchData* nvs_data_ref = query_strings.nvs_data_ref.get(); + const BaseURLCacheKey& key_ref = query_strings.key_ref.get(); + const auto map_it = map_.find(key_ref); + CHECK(map_it != map_.end()); + const size_t removed_count = map_it->second.erase(*nvs_data_ref); + CHECK_EQ(removed_count, 1u); + if (map_it->second.empty()) { + map_.erase(map_it); + } + } +} + +// static +std::optional +NoVarySearchCache::FindQueryStringInList(QueryStringList& query_strings, + const GURL& base_url, + const GURL& url, + const HttpNoVarySearchData& nvs_data) { + for (auto* node = query_strings.list.head(); node != query_strings.list.end(); + node = node->next()) { + QueryString* query_string = node->value()->ToQueryString(); + // TODO(crbug.com/382394774): Stop allocating GURLs in a tight loop. + GURL node_url = query_string->ReconstructOriginalURL(base_url); + CHECK(node_url.is_valid()); + if (nvs_data.AreEquivalent(url, node_url)) { + return FindQueryStringResult(query_string, std::move(node_url)); + } + } + return std::nullopt; +} + +} // namespace net diff --git a/naiveproxy/src/net/http/no_vary_search_cache.h b/naiveproxy/src/net/http/no_vary_search_cache.h new file mode 100644 index 0000000000..0bd755c5b9 --- /dev/null +++ b/naiveproxy/src/net/http/no_vary_search_cache.h @@ -0,0 +1,192 @@ +// Copyright 2025 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef NET_HTTP_NO_VARY_SEARCH_CACHE_H_ +#define NET_HTTP_NO_VARY_SEARCH_CACHE_H_ + +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "base/containers/linked_list.h" +#include "base/memory/raw_ptr.h" +#include "base/memory/raw_ref.h" +#include "base/memory/stack_allocated.h" +#include "base/memory/weak_ptr.h" +#include "base/types/strong_alias.h" +#include "net/base/net_export.h" +#include "net/http/http_no_vary_search_data.h" +#include "net/http/http_request_info.h" +#include "url/gurl.h" + +namespace net { + +class HttpResponseHeaders; + +// An in-memory cache that permits looking up a URL and seeing if it matches a +// previous response according to the rules of the No-Vary-Search header (see +// https://httpwg.org/http-extensions/draft-ietf-httpbis-no-vary-search.html). +// See also the design doc at +// https://docs.google.com/document/d/1RS3q6qZ7-k9CvZsDYseGOXzcdQ9fGZ6YYnaW7fTPu7A/edit +// +// Owned by net::HttpCache. +// +// Ignoring eviction, the data structure is approximately equivalent to +// std::map, +// std::list>. +// +// BaseURLCacheKey is the output of the HttpCache key algorithm run on the base +// URL (everything before the "?"). So it incorporates the NetworkIsolationKey +// when split cache is enabled. +class NET_EXPORT_PRIVATE NoVarySearchCache { + private: + // Declared here so that it can be mentioned in the definition of EraseHandle. + class QueryString; + + public: + // Opaque object that permits erasure of an item from the cache. + // See comments on the Lookup() and Erase() methods for usage. + class NET_EXPORT_PRIVATE EraseHandle { + public: + ~EraseHandle(); + + // Not copyable. + EraseHandle(const EraseHandle&) = delete; + EraseHandle& operator=(const EraseHandle&) = delete; + + // Movable. + EraseHandle(EraseHandle&& rhs); + EraseHandle& operator=(EraseHandle&& rhs); + + // For unit tests it is useful to be able to inspect this. + bool EqualsForTesting(const EraseHandle& rhs) const; + bool IsGoneForTesting() const; + + private: + friend class NoVarySearchCache; + friend class QueryString; + + explicit EraseHandle(base::WeakPtr query_string); + + base::WeakPtr query_string_; + }; + + struct LookupResult { + GURL original_url; + EraseHandle erase_handle; + }; + + // The cache will hold at most `max_size` entries. Each entry stores the query + // parameter from a previous response, which will typically be 100 to 200 + // bytes. + explicit NoVarySearchCache(size_t max_size); + + // Not copyable, assignable or movable. + NoVarySearchCache(const NoVarySearchCache&) = delete; + NoVarySearchCache& operator=(const NoVarySearchCache&) = delete; + + ~NoVarySearchCache(); + + // Finds an entry in the cache equivalent to `request.url` and in the same + // cache partition. If a result is returned, then `original_url` can be used + // to find a disk cache entry. `erase_handle` can be used to remove the entry + // from this cache if it was not in the disk cache. Not const because it + // updates the LRU linked list to mark the entry as recently used. + std::optional Lookup(const HttpRequestInfo& request); + + // Inserts `url` into the cache if a non-default "No-Vary-Search" header was + // found in `headers`. On insertion, will remove any existing matching entry + // with the same No-Vary-Search header, as the older entry would never be + // returned by Lookup() anyway. May evict the oldest entry in the cache to + // avoid the size exceeding `max_size_`. + void MaybeInsert(const HttpRequestInfo& request, + const HttpResponseHeaders& headers); + + // TODO(https://crbug.com/382394774): Implement ClearData() so that entries + // removed via the UI or Clear-Site-Data from the disk cache are also + // removed from this cache. This is needed before persistence is implemented. + // void ClearData(base::RepeatingCallback url_matcher, + // base::Time delete_begin, + // base::Time delete_end); + + // Erases the entry referenced by `erase_handle` from the cache. Does nothing + // if the entry no longer exists. + void Erase(EraseHandle handle); + + // Returns the size (number of stored original query strings) of the cache. + size_t GetSizeForTesting() const; + + // Returns true if the top-level map is empty. This should be equivalent to + // GetSizeForTesting() == 0 in the absence of bugs. + bool IsTopLevelMapEmptyForTesting() const; + + private: + class LruNode; + class QueryStringListNode; + + using BaseURLCacheKey = + base::StrongAlias; + + struct QueryStringList { + base::LinkedList list; + // nvs_data_ref can't be raw_ref because it needs to be lazily initialized + // after the QueryStringList has been added to the map. + raw_ptr nvs_data_ref; + raw_ref key_ref; + + // The referent of this reference has to be the actual key in the map. It is + // not sufficient for the value to match, because the lifetime has to be the + // same. + explicit QueryStringList(const BaseURLCacheKey& key); + // base::LinkedList<> does not do memory management, so make sure the + // contents of `list` are deleted on destruction. + ~QueryStringList(); + }; + + struct FindQueryStringResult { + STACK_ALLOCATED(); // `match` doesn't need to be raw_ptr. + + public: + QueryString* match; + GURL original_url; + }; + + // TODO(crbug.com/382394774): Investigate performance of different map types. + using DataMapType = std::map; + using OuterMapType = std::map>; + + // Erases an entry from the cache if `size_ > max_size_`. + void EvictIfOverfull(); + + // Erases `query_string` from the cache. + void EraseQuery(QueryString* query_string); + + static std::optional FindQueryStringInList( + QueryStringList& query_strings, + const GURL& base, + const GURL& url, + const HttpNoVarySearchData& nvs_data); + + // The main cache data structure. + OuterMapType map_; + + // lru_.tail() is the least-recently-used QueryString. + base::LinkedList lru_; + + // The number of QueryString objects in the cache. + size_t size_ = 0u; + + // QueryString objects will be evicted to avoid exceeding `max_size_`. + const size_t max_size_; +}; + +} // namespace net + +#endif // NET_HTTP_NO_VARY_SEARCH_CACHE_H_ diff --git a/naiveproxy/src/net/http/test_upload_data_stream_not_allow_http1.cc b/naiveproxy/src/net/http/test_upload_data_stream_not_allow_http1.cc index 3b1945d71f..b45daa06eb 100644 --- a/naiveproxy/src/net/http/test_upload_data_stream_not_allow_http1.cc +++ b/naiveproxy/src/net/http/test_upload_data_stream_not_allow_http1.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "net/http/test_upload_data_stream_not_allow_http1.h" #include "net/base/io_buffer.h" @@ -29,4 +34,4 @@ int UploadDataStreamNotAllowHTTP1::ReadInternal(IOBuffer* buf, int buf_len) { void UploadDataStreamNotAllowHTTP1::ResetInternal() {} -} // namespace net \ No newline at end of file +} // namespace net diff --git a/naiveproxy/src/net/http/transport_security_persister.cc b/naiveproxy/src/net/http/transport_security_persister.cc index 8e2da22ce5..9179f95651 100644 --- a/naiveproxy/src/net/http/transport_security_persister.cc +++ b/naiveproxy/src/net/http/transport_security_persister.cc @@ -306,25 +306,26 @@ void TransportSecurityPersister::Deserialize( const std::string& serialized, TransportSecurityState* state, bool& contains_legacy_expect_ct_data) { - std::optional value = base::JSONReader::Read(serialized); - if (!value || !value->is_dict()) + std::optional value = + base::JSONReader::ReadDict(serialized); + if (!value) { return; + } - base::Value::Dict& dict = value->GetDict(); - std::optional version = dict.FindInt(kVersionKey); + std::optional version = value->FindInt(kVersionKey); // Stop if the data is out of date (or in the previous format that didn't have // a version number). if (!version || *version != kCurrentVersionValue) return; - base::Value* sts_value = dict.Find(kSTSKey); + base::Value* sts_value = value->Find(kSTSKey); if (sts_value) DeserializeSTSData(*sts_value, state); // If an Expect-CT key is found on deserialization, record this so that a // write can be scheduled to clear it from disk. - contains_legacy_expect_ct_data = !!dict.Find(kExpectCTKey); + contains_legacy_expect_ct_data = !!value->Find(kExpectCTKey); } void TransportSecurityPersister::CompleteLoad(const std::string& state) { diff --git a/naiveproxy/src/net/http/transport_security_state.cc b/naiveproxy/src/net/http/transport_security_state.cc index 6c304292f3..9c88d0a784 100644 --- a/naiveproxy/src/net/http/transport_security_state.cc +++ b/naiveproxy/src/net/http/transport_security_state.cc @@ -319,9 +319,9 @@ SSLUpgradeDecision TransportSecurityState::GetSSLUpgradeDecision( bool TransportSecurityState::ShouldUpgradeToSSL( std::string_view host, + bool is_top_level_nav, const NetLogWithSource& net_log) { - // TODO(crbug.com/361746120): Propagate `is_top_level_nav` to callers. - return GetSSLUpgradeDecision(host, true, net_log) != + return GetSSLUpgradeDecision(host, is_top_level_nav, net_log) != SSLUpgradeDecision::kNoUpgrade; } diff --git a/naiveproxy/src/net/http/transport_security_state.h b/naiveproxy/src/net/http/transport_security_state.h index 59f21b14be..7d0116797b 100644 --- a/naiveproxy/src/net/http/transport_security_state.h +++ b/naiveproxy/src/net/http/transport_security_state.h @@ -301,6 +301,7 @@ class NET_EXPORT TransportSecurityState { // when is_issued_by_known_root is false. bool ShouldSSLErrorsBeFatal(std::string_view host); bool ShouldUpgradeToSSL(std::string_view host, + bool is_top_level_nav, const NetLogWithSource& net_log = NetLogWithSource()); PKPStatus CheckPublicKeyPins(std::string_view host, bool is_issued_by_known_root, diff --git a/naiveproxy/src/net/http/transport_security_state_static.pins b/naiveproxy/src/net/http/transport_security_state_static.pins index f5cea75c8b..81fc6d8254 100644 --- a/naiveproxy/src/net/http/transport_security_state_static.pins +++ b/naiveproxy/src/net/http/transport_security_state_static.pins @@ -43,9 +43,9 @@ # hash function for preloaded entries again (we have already done so once). # -# Last updated: 2025-01-27 12:58 UTC +# Last updated: 2025-02-24 12:55 UTC PinsListTimestamp -1737982680 +1740401723 TestSPKI sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= diff --git a/naiveproxy/src/net/http/transport_security_state_static_pins.json b/naiveproxy/src/net/http/transport_security_state_static_pins.json index 62135b2fc7..acc955e42a 100644 --- a/naiveproxy/src/net/http/transport_security_state_static_pins.json +++ b/naiveproxy/src/net/http/transport_security_state_static_pins.json @@ -31,7 +31,7 @@ // the 'static_spki_hashes' and 'bad_static_spki_hashes' fields in 'pinsets' // refer to, and the timestamp at which the pins list was last updated. // -// Last updated: 2025-01-27 12:58 UTC +// Last updated: 2025-02-24 12:55 UTC // { "pinsets": [ @@ -116,6 +116,11 @@ "include_subdomains": true, "pins": "google" }, + { + "name": "partner.android.com", + "include_subdomains": true, + "pins": "google" + }, { "name": "plus.sandbox.google.com", "include_subdomains": true, @@ -186,6 +191,11 @@ "include_subdomains": true, "pins": "google" }, + { + "name": "crossmediapanel.com", + "include_subdomains": true, + "pins": "google" + }, { "name": "datastudio.google.com", "include_subdomains": true, @@ -276,6 +286,11 @@ "include_subdomains": true, "pins": "google" }, + { + "name": "mfg-inspector.com", + "include_subdomains": true, + "pins": "google" + }, { "name": "myaccount.google.com", "include_subdomains": true, @@ -701,6 +716,11 @@ "include_subdomains": true, "pins": "google" }, + { + "name": "google.al", + "include_subdomains": true, + "pins": "google" + }, { "name": "google.am", "include_subdomains": true, @@ -761,6 +781,11 @@ "include_subdomains": true, "pins": "google" }, + { + "name": "google.bt", + "include_subdomains": true, + "pins": "google" + }, { "name": "google.by", "include_subdomains": true, @@ -1076,6 +1101,11 @@ "include_subdomains": true, "pins": "google" }, + { + "name": "google.com.mm", + "include_subdomains": true, + "pins": "google" + }, { "name": "google.com.mt", "include_subdomains": true, @@ -1136,6 +1166,11 @@ "include_subdomains": true, "pins": "google" }, + { + "name": "google.com.pg", + "include_subdomains": true, + "pins": "google" + }, { "name": "google.com.ph", "include_subdomains": true, @@ -1706,6 +1741,11 @@ "include_subdomains": true, "pins": "google" }, + { + "name": "google.sr", + "include_subdomains": true, + "pins": "google" + }, { "name": "google.st", "include_subdomains": true, diff --git a/naiveproxy/src/net/log/file_net_log_observer.cc b/naiveproxy/src/net/log/file_net_log_observer.cc index b7600f5589..9ded5b8285 100644 --- a/naiveproxy/src/net/log/file_net_log_observer.cc +++ b/naiveproxy/src/net/log/file_net_log_observer.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "net/log/file_net_log_observer.h" #include diff --git a/naiveproxy/src/net/log/net_log.cc b/naiveproxy/src/net/log/net_log.cc index ad0a273a9f..42cf4c83dc 100644 --- a/naiveproxy/src/net/log/net_log.cc +++ b/naiveproxy/src/net/log/net_log.cc @@ -4,12 +4,13 @@ #include "net/log/net_log.h" +#include + #include "base/check_op.h" #include "base/containers/contains.h" #include "base/no_destructor.h" #include "base/not_fatal_until.h" #include "base/notreached.h" -#include "base/ranges/algorithm.h" #include "base/strings/string_number_conversions.h" #include "base/values.h" #include "net/log/net_log_values.h" @@ -106,7 +107,7 @@ void NetLog::RemoveObserver(NetLog::ThreadSafeObserver* observer) { DCHECK_EQ(this, observer->net_log_); - auto it = base::ranges::find(observers_, observer); + auto it = std::ranges::find(observers_, observer); CHECK(it != observers_.end(), base::NotFatalUntil::M130); observers_.erase(it); @@ -134,7 +135,7 @@ void NetLog::RemoveCaptureModeObserver( DCHECK_EQ(this, observer->net_log_); DCHECK(HasCaptureModeObserver(observer)); - auto it = base::ranges::find(capture_mode_observers_, observer); + auto it = std::ranges::find(capture_mode_observers_, observer); CHECK(it != capture_mode_observers_.end(), base::NotFatalUntil::M130); capture_mode_observers_.erase(it); diff --git a/naiveproxy/src/net/log/net_log_event_type_list.h b/naiveproxy/src/net/log/net_log_event_type_list.h index ed46ed1849..661009aaf9 100644 --- a/naiveproxy/src/net/log/net_log_event_type_list.h +++ b/naiveproxy/src/net/log/net_log_event_type_list.h @@ -271,6 +271,18 @@ EVENT_TYPE(HOST_RESOLVER_DNS_TASK_TIMEOUT) // } EVENT_TYPE(HOST_RESOLVER_SERVICE_ENDPOINTS_UPDATED) +// Logged when a DnsTaskResultsManager receives stale results. Contains the +// following parameters: +// +// { +// "endpoints": [{ +// "ipv4_endpoints": , +// "ipv6_endpoints": , +// "metadata": +// }] +// } +EVENT_TYPE(HOST_RESOLVER_SERVICE_ENDPOINTS_STALE_RESULTS) + // Logged when a DnsTaskResultsManager's resolution timer is timed out, // or AAAA response is received before the timer timed out. // { @@ -892,6 +904,15 @@ EVENT_TYPE(TRANSPORT_CONNECT_JOB_IPV6_FALLBACK) // } EVENT_TYPE(TRANSPORT_CONNECT_JOB_CONNECT_ATTEMPT) +// This event is logged whenever the SSLConnectJob attempts a +// SSLClientSocket::Connect(). +// +// { +// "ech_enabled": , +// "ech_config_list": , +// } +EVENT_TYPE(SSL_CONNECT_JOB_SSL_CONNECT) + // ------------------------------------------------------------------------ // ClientSocketPoolBaseHelper // ------------------------------------------------------------------------ @@ -1536,14 +1557,40 @@ EVENT_TYPE(HTTP_STREAM_POOL_ATTEMPT_MANAGER_ATTEMPT_END) // } EVENT_TYPE(HTTP_STREAM_POOL_ATTEMPT_MANAGER_NOTIFY_FAILURE) +// Emitted when DNS resolution on an HttpStreamPool::AttemptManager is updated. +// The event parameters are: +// { +// "endpoints": , +// "endpoints_crypto_ready": , +// } +EVENT_TYPE(HTTP_STREAM_POOL_ATTEMPT_MANAGER_DNS_RESOLUTION_UPDATED) + // Emitted when DNS resolution on an HttpStreamPool::AttemptManager finishes. // The event parameters are: // { +// "endpoints": , +// "endpoints_crypto_ready": , // "result": , // "resolve_error": , // } EVENT_TYPE(HTTP_STREAM_POOL_ATTEMPT_MANAGER_DNS_RESOLUTION_FINISHED) +// Emitted when an HttpStreamPool::AttemptManager finds a matching SPDY session +// after DNS resolution. +// { +// "source_dependency": , +// } +EVENT_TYPE(HTTP_STREAM_POOL_ATTEMPT_MANAGER_EXISTING_SPDY_SESSION_MATCHED) + +// Emitted when an HttpStreamPool::AttemptManager finds a matching QUIC session +// after DNS resolution. +// { +// "source_dependency": , +// } +EVENT_TYPE(HTTP_STREAM_POOL_ATTEMPT_MANAGER_EXISTING_QUIC_SESSION_MATCHED) + // Emitted when the stream attempt delay has passed on an // HttpStreamPool::AttemptManager. The event parameter is: // { @@ -1555,6 +1602,13 @@ EVENT_TYPE(HTTP_STREAM_POOL_ATTEMPT_MANAGER_STREAM_ATTEMPT_DELAY_PASSED) // HttpStreamPool::QuicTask is bound to the AttemptManager. EVENT_TYPE(HTTP_STREAM_POOL_ATTEMPT_MANAGER_QUIC_TASK_BOUND) +// Emitted when an HttpStreamPool::QuicTask tries to attempt a session. +// The event parameters are: +// { +// "endpoint": , +// } +EVENT_TYPE(HTTP_STREAM_POOL_ATTEMPT_MANAGER_QUIC_TASK_MAYBE_ATTEMPT) + // Emitted when an HttpStreamPool::QuicTask is completed. // This event has the common event parameters (see above). // In addition to the common event parameters, this event has the following @@ -2581,6 +2635,12 @@ EVENT_TYPE(QUIC_SESSION_WEBTRANSPORT_SESSION_READY) // QUIC with TLS gets 0-RTT rejected. EVENT_TYPE(QUIC_SESSION_ZERO_RTT_REJECTED) +// Records the state of a QUIC 0-RTT handshake. +// { +// "state": +// } +EVENT_TYPE(QUIC_SESSION_ZERO_RTT_STATE) + // Records that the QUIC session received a default network change signal. // { // "new_default_network": @@ -4374,7 +4434,7 @@ EVENT_TYPE(COOKIE_SET_BLOCKED_BY_NETWORK_DELEGATE) // "domain": , // "path": , // "partition_key": -// "operation": +// "operation": // } EVENT_TYPE(COOKIE_INCLUSION_STATUS) diff --git a/naiveproxy/src/net/log/net_log_util.cc b/naiveproxy/src/net/log/net_log_util.cc index 7b4455c4b4..bd9f680594 100644 --- a/naiveproxy/src/net/log/net_log_util.cc +++ b/naiveproxy/src/net/log/net_log_util.cc @@ -133,7 +133,7 @@ base::Value GetActiveFieldTrialList() { } // namespace -base::Value::Dict GetNetConstants() { +base::Value::Dict GetNetConstants(NetConstantsRequestMode request_mode) { base::Value::Dict constants_dict; // Version of the file format. @@ -336,6 +336,10 @@ base::Value::Dict GetNetConstants() { // value for compatibility. constants_dict.Set("clientInfo", base::Value::Dict()); + if (request_mode == NetConstantsRequestMode::kTracing) { + return constants_dict; + } + // Add a list of field experiments active at the start of the capture. // Additional trials may be enabled later in the browser session. constants_dict.Set(kNetInfoFieldTrials, GetActiveFieldTrialList()); diff --git a/naiveproxy/src/net/log/net_log_util.h b/naiveproxy/src/net/log/net_log_util.h index 8406bf304c..2ef654ee6a 100644 --- a/naiveproxy/src/net/log/net_log_util.h +++ b/naiveproxy/src/net/log/net_log_util.h @@ -15,10 +15,19 @@ namespace net { class URLRequestContext; +// Request mode for GetNetConstants. +enum class NetConstantsRequestMode { + // Requests all constants including field trials. This is the default mode. + kDefault, + // Requests only minimum constants. Used for tracing metadata. + kTracing, +}; + // Utility methods for creating NetLog dumps. // Creates a dictionary containing a legend for net/ constants. -NET_EXPORT base::Value::Dict GetNetConstants(); +NET_EXPORT base::Value::Dict GetNetConstants( + NetConstantsRequestMode request_mode = NetConstantsRequestMode::kDefault); // Retrieves a dictionary containing information about the current state of // |context|. diff --git a/naiveproxy/src/net/log/trace_net_log_observer.cc b/naiveproxy/src/net/log/trace_net_log_observer.cc index 7e5f791416..0faf0feabd 100644 --- a/naiveproxy/src/net/log/trace_net_log_observer.cc +++ b/naiveproxy/src/net/log/trace_net_log_observer.cc @@ -55,6 +55,9 @@ TraceNetLogObserver::~TraceNetLogObserver() { void TraceNetLogObserver::OnAddEntry(const NetLogEntry& entry) { base::Value::Dict params = entry.params.Clone(); + // Add source's start time as a parameter. The net-log viewer requires it. + params.Set("source_start_time", + NetLog::TickCountToString(entry.source.start_time)); switch (entry.phase) { case NetLogEventPhase::BEGIN: TRACE_EVENT_NESTABLE_ASYNC_BEGIN2( diff --git a/naiveproxy/src/net/nqe/network_quality_estimator_params.cc b/naiveproxy/src/net/nqe/network_quality_estimator_params.cc index 5138009f35..b277905276 100644 --- a/naiveproxy/src/net/nqe/network_quality_estimator_params.cc +++ b/naiveproxy/src/net/nqe/network_quality_estimator_params.cc @@ -11,6 +11,8 @@ #include +#include + #include "base/strings/string_number_conversions.h" #include "base/time/time.h" #include "net/base/features.h" @@ -234,17 +236,18 @@ void ObtainDefaultObservations( // Typical HTTP RTT value corresponding to a given WebEffectiveConnectionType // value. Taken from // https://cs.chromium.org/chromium/src/net/nqe/network_quality_estimator_params.cc. -const base::TimeDelta kTypicalHttpRttEffectiveConnectionType - [net::EFFECTIVE_CONNECTION_TYPE_LAST] = { +const std::array + kTypicalHttpRttEffectiveConnectionType = { base::Milliseconds(0), base::Milliseconds(0), base::Milliseconds(3600), base::Milliseconds(1800), - base::Milliseconds(450), base::Milliseconds(175)}; + base::Milliseconds(450), base::Milliseconds(175), +}; // Typical downlink throughput (in Mbps) value corresponding to a given // WebEffectiveConnectionType value. Taken from // https://cs.chromium.org/chromium/src/net/nqe/network_quality_estimator_params.cc. -const int32_t kTypicalDownlinkKbpsEffectiveConnectionType - [net::EFFECTIVE_CONNECTION_TYPE_LAST] = {0, 0, 40, 75, 400, 1600}; +const std::array + kTypicalDownlinkKbpsEffectiveConnectionType = {0, 0, 40, 75, 400, 1600}; // Sets |typical_network_quality| to typical network quality for different // effective connection types. @@ -310,8 +313,9 @@ void ObtainConnectionThresholds( const std::map& params, nqe::internal::NetworkQuality connection_thresholds[]) { // First set the default thresholds. - nqe::internal::NetworkQuality default_effective_connection_type_thresholds - [EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_LAST]; + std::array + default_effective_connection_type_thresholds; DCHECK_LT(base::TimeDelta(), kHttpRttEffectiveConnectionTypeThresholds [EFFECTIVE_CONNECTION_TYPE_SLOW_2G]); diff --git a/naiveproxy/src/net/proxy_resolution/mock_proxy_resolver.cc b/naiveproxy/src/net/proxy_resolution/mock_proxy_resolver.cc index 9134c8521d..cab6cb2aaa 100644 --- a/naiveproxy/src/net/proxy_resolution/mock_proxy_resolver.cc +++ b/naiveproxy/src/net/proxy_resolution/mock_proxy_resolver.cc @@ -4,12 +4,12 @@ #include "net/proxy_resolution/mock_proxy_resolver.h" +#include #include #include #include "base/check.h" #include "base/not_fatal_until.h" -#include "base/ranges/algorithm.h" namespace net { @@ -66,7 +66,7 @@ int MockAsyncProxyResolver::GetProxyForURL( } void MockAsyncProxyResolver::AddCancelledJob(std::unique_ptr job) { - auto it = base::ranges::find(pending_jobs_, job.get()); + auto it = std::ranges::find(pending_jobs_, job.get()); // Because this is called always when RequestImpl is destructed, // we need to check if it is still in pending jobs. if (it != pending_jobs_.end()) { @@ -77,7 +77,7 @@ void MockAsyncProxyResolver::AddCancelledJob(std::unique_ptr job) { void MockAsyncProxyResolver::RemovePendingJob(Job* job) { DCHECK(job); - auto it = base::ranges::find(pending_jobs_, job); + auto it = std::ranges::find(pending_jobs_, job); CHECK(it != pending_jobs_.end(), base::NotFatalUntil::M130); pending_jobs_.erase(it); } @@ -157,7 +157,7 @@ int MockAsyncProxyResolverFactory::CreateProxyResolver( } void MockAsyncProxyResolverFactory::RemovePendingRequest(Request* request) { - auto it = base::ranges::find(pending_requests_, request); + auto it = std::ranges::find(pending_requests_, request); CHECK(it != pending_requests_.end(), base::NotFatalUntil::M130); pending_requests_.erase(it); } diff --git a/naiveproxy/src/net/proxy_resolution/pac_file_fetcher.h b/naiveproxy/src/net/proxy_resolution/pac_file_fetcher.h index 138d0a5ad2..985f5f46e4 100644 --- a/naiveproxy/src/net/proxy_resolution/pac_file_fetcher.h +++ b/naiveproxy/src/net/proxy_resolution/pac_file_fetcher.h @@ -76,7 +76,8 @@ class NET_EXPORT_PRIVATE PacFileFetcher { // Safe to reuse because delays for WPAD fetches don't provide information // to the web platform useful to attackers, and WPAD fetches uniformly // block all network requests. - const IsolationInfo isolation_info_ = IsolationInfo::CreateTransient(); + const IsolationInfo isolation_info_ = + IsolationInfo::CreateTransient(/*nonce=*/std::nullopt); }; } // namespace net diff --git a/naiveproxy/src/net/proxy_resolution/pac_file_fetcher_impl.cc b/naiveproxy/src/net/proxy_resolution/pac_file_fetcher_impl.cc index 10f51c6359..09dbb7e675 100644 --- a/naiveproxy/src/net/proxy_resolution/pac_file_fetcher_impl.cc +++ b/naiveproxy/src/net/proxy_resolution/pac_file_fetcher_impl.cc @@ -4,6 +4,7 @@ #include "net/proxy_resolution/pac_file_fetcher_impl.h" +#include #include #include "base/compiler_specific.h" @@ -12,7 +13,6 @@ #include "base/logging.h" #include "base/memory/ptr_util.h" #include "base/metrics/histogram_macros.h" -#include "base/ranges/algorithm.h" #include "base/strings/string_util.h" #include "base/task/single_thread_task_runner.h" #include "net/base/data_url.h" @@ -56,7 +56,7 @@ constexpr bool IsPacMimeType(std::string_view mime_type) { "application/x-ns-proxy-autoconfig", "application/x-javascript-config", }; - return base::ranges::any_of(kSupportedPacMimeTypes, [&](auto pac_mime_type) { + return std::ranges::any_of(kSupportedPacMimeTypes, [&](auto pac_mime_type) { return base::EqualsCaseInsensitiveASCII(pac_mime_type, mime_type); }); } diff --git a/naiveproxy/src/net/proxy_resolution/win/proxy_config_service_win.cc b/naiveproxy/src/net/proxy_resolution/win/proxy_config_service_win.cc index ab06a6e01e..4264fa839b 100644 --- a/naiveproxy/src/net/proxy_resolution/win/proxy_config_service_win.cc +++ b/naiveproxy/src/net/proxy_resolution/win/proxy_config_service_win.cc @@ -8,12 +8,13 @@ #include +#include + #include "base/functional/bind.h" #include "base/functional/callback.h" #include "base/functional/callback_helpers.h" #include "base/logging.h" #include "base/not_fatal_until.h" -#include "base/ranges/algorithm.h" #include "base/strings/string_tokenizer.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" @@ -136,8 +137,8 @@ bool ProxyConfigServiceWin::AddKeyToWatchList(HKEY rootkey, void ProxyConfigServiceWin::OnObjectSignaled(base::win::RegKey* key) { // Figure out which registry key signalled this change. - auto it = base::ranges::find(keys_to_watch_, key, - &std::unique_ptr::get); + auto it = std::ranges::find(keys_to_watch_, key, + &std::unique_ptr::get); CHECK(it != keys_to_watch_.end(), base::NotFatalUntil::M130); // Keep watching the registry key. diff --git a/naiveproxy/src/net/quic/address_utils.h b/naiveproxy/src/net/quic/address_utils.h index 585d93c0bb..539992dda4 100644 --- a/naiveproxy/src/net/quic/address_utils.h +++ b/naiveproxy/src/net/quic/address_utils.h @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #ifndef NET_QUIC_ADDRESS_UTILS_H_ #define NET_QUIC_ADDRESS_UTILS_H_ diff --git a/naiveproxy/src/net/quic/dedicated_web_transport_http3_client.cc b/naiveproxy/src/net/quic/dedicated_web_transport_http3_client.cc index e749a64927..1b2a516b9b 100644 --- a/naiveproxy/src/net/quic/dedicated_web_transport_http3_client.cc +++ b/naiveproxy/src/net/quic/dedicated_web_transport_http3_client.cc @@ -431,6 +431,14 @@ void DedicatedWebTransportHttp3Client::Close( } } +void DedicatedWebTransportHttp3Client::CloseIfNonceMatches( + base::UnguessableToken nonce) { + if (anonymization_key_.GetNonce() == nonce) { + SetErrorIfNecessary(ERR_NETWORK_ACCESS_REVOKED); + TransitionToState(WebTransportState::FAILED); + } +} + quic::WebTransportSession* DedicatedWebTransportHttp3Client::session() { if (web_transport_session_ == nullptr) return nullptr; diff --git a/naiveproxy/src/net/quic/dedicated_web_transport_http3_client.h b/naiveproxy/src/net/quic/dedicated_web_transport_http3_client.h index 23d07c2cfc..30d000ce4b 100644 --- a/naiveproxy/src/net/quic/dedicated_web_transport_http3_client.h +++ b/naiveproxy/src/net/quic/dedicated_web_transport_http3_client.h @@ -63,6 +63,7 @@ class NET_EXPORT DedicatedWebTransportHttp3Client // OnConnected() or OnConnectionFailed() is called on the Visitor. void Connect() override; void Close(const std::optional& close_info) override; + void CloseIfNonceMatches(base::UnguessableToken nonce) override; quic::WebTransportSession* session() override; diff --git a/naiveproxy/src/net/quic/mock_decrypter.cc b/naiveproxy/src/net/quic/mock_decrypter.cc index e42cc0d659..965235592e 100644 --- a/naiveproxy/src/net/quic/mock_decrypter.cc +++ b/naiveproxy/src/net/quic/mock_decrypter.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "net/quic/mock_decrypter.h" #include diff --git a/naiveproxy/src/net/quic/mock_encrypter.cc b/naiveproxy/src/net/quic/mock_encrypter.cc index ac478f60a7..2a3202ddfa 100644 --- a/naiveproxy/src/net/quic/mock_encrypter.cc +++ b/naiveproxy/src/net/quic/mock_encrypter.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "net/quic/mock_encrypter.h" #include "net/third_party/quiche/src/quiche/quic/core/quic_data_writer.h" diff --git a/naiveproxy/src/net/quic/quic_chromium_client_session.cc b/naiveproxy/src/net/quic/quic_chromium_client_session.cc index 1b59d7e2af..e0ab012e67 100644 --- a/naiveproxy/src/net/quic/quic_chromium_client_session.cc +++ b/naiveproxy/src/net/quic/quic_chromium_client_session.cc @@ -9,6 +9,7 @@ #include "net/quic/quic_chromium_client_session.h" +#include #include #include #include @@ -26,7 +27,6 @@ #include "base/no_destructor.h" #include "base/numerics/checked_math.h" #include "base/observer_list.h" -#include "base/ranges/algorithm.h" #include "base/strings/string_number_conversions.h" #include "base/strings/stringprintf.h" #include "base/task/sequenced_task_runner.h" @@ -304,6 +304,17 @@ enum class ZeroRttState { kMaxValue = kNotAttempted, }; +std::string_view ZeroRttStateToString(ZeroRttState state) { + switch (state) { + case ZeroRttState::kAttemptedAndSucceeded: + return "AttemptedAndSucceeded"; + case ZeroRttState::kAttemptedAndRejected: + return "AttemptedAndRejected"; + case ZeroRttState::kNotAttempted: + return "NotAttempted"; + } +} + void RecordHandshakeState(HandshakeState state) { UMA_HISTOGRAM_ENUMERATION("Net.QuicHandshakeState", state, NUM_HANDSHAKE_STATES); @@ -1141,10 +1152,10 @@ QuicChromiumClientSession::~QuicChromiumClientSession() { if (stats.max_sequence_reordering == 0) { return; } - const base::HistogramBase::Sample kMaxReordering = 100; - base::HistogramBase::Sample reordering = kMaxReordering; + const base::HistogramBase::Sample32 kMaxReordering = 100; + base::HistogramBase::Sample32 reordering = kMaxReordering; if (stats.min_rtt_us > 0) { - reordering = static_cast( + reordering = static_cast( 100 * stats.max_time_reordering_us / stats.min_rtt_us); } UMA_HISTOGRAM_CUSTOM_COUNTS("Net.QuicSession.MaxReorderingTime", reordering, @@ -1153,9 +1164,9 @@ QuicChromiumClientSession::~QuicChromiumClientSession() { UMA_HISTOGRAM_CUSTOM_COUNTS("Net.QuicSession.MaxReorderingTimeLongRtt", reordering, 1, kMaxReordering, 50); } - UMA_HISTOGRAM_COUNTS_1M( - "Net.QuicSession.MaxReordering", - static_cast(stats.max_sequence_reordering)); + UMA_HISTOGRAM_COUNTS_1M("Net.QuicSession.MaxReordering", + static_cast( + stats.max_sequence_reordering)); } void QuicChromiumClientSession::Initialize() { @@ -1338,7 +1349,7 @@ int QuicChromiumClientSession::TryCreateStream(StreamRequest* request) { void QuicChromiumClientSession::CancelRequest(StreamRequest* request) { // Remove |request| from the queue while preserving the order of the // other elements. - auto it = base::ranges::find(stream_requests_, request); + auto it = std::ranges::find(stream_requests_, request); if (it != stream_requests_.end()) { it = stream_requests_.erase(it); } @@ -1761,6 +1772,10 @@ void QuicChromiumClientSession::LogZeroRttStats() { early_data_reason, ssl_early_data_reason_max_value + 1); } + + net_log_.AddEvent(NetLogEventType::QUIC_SESSION_ZERO_RTT_STATE, [&] { + return base::Value::Dict().Set("state", ZeroRttStateToString(state)); + }); } void QuicChromiumClientSession::OnCryptoHandshakeMessageSent( diff --git a/naiveproxy/src/net/quic/quic_chromium_client_session.h b/naiveproxy/src/net/quic/quic_chromium_client_session.h index 2ac7e791c4..2ee362bd2c 100644 --- a/naiveproxy/src/net/quic/quic_chromium_client_session.h +++ b/naiveproxy/src/net/quic/quic_chromium_client_session.h @@ -200,7 +200,7 @@ class NET_EXPORT_PRIVATE QuicChromiumClientSession // Called when |session| encounters write error on |network|. // A write error may be caused by the change in the underlying network - // interface, and can be pre-emptive hints of connectivity quality changes + // interface, and can be preemptive hints of connectivity quality changes // based on the |error_code|. virtual void OnSessionEncounteringWriteError( QuicChromiumClientSession* session, @@ -329,6 +329,10 @@ class NET_EXPORT_PRIVATE QuicChromiumClientSession friend class QuicChromiumClientSession; friend class QuicChromiumClientSession::StreamRequest; +#if BUILDFLAG(ENABLE_WEBSOCKETS) + friend class WebSocketHttp3HandshakeStream; +#endif // BUILDFLAG(ENABLE_WEBSOCKETS) + // Waits for the handshake to be confirmed and invokes |callback| when // that happens. If the handshake has already been confirmed, returns OK. // If the connection has already been closed, returns a net error. If the @@ -685,7 +689,7 @@ class NET_EXPORT_PRIVATE QuicChromiumClientSession // Attempts to create a new stream. If the stream can be // created immediately, returns OK. If the open stream limit // has been reached, returns ERR_IO_PENDING, and |request| - // will be added to the stream requets queue and will + // will be added to the stream requests queue and will // be completed asynchronously. // TODO(rch): remove |stream| from this and use setter on |request| // and fix in spdy too. diff --git a/naiveproxy/src/net/quic/quic_chromium_client_stream.cc b/naiveproxy/src/net/quic/quic_chromium_client_stream.cc index 0b9bb4abe9..5ef12ee56c 100644 --- a/naiveproxy/src/net/quic/quic_chromium_client_stream.cc +++ b/naiveproxy/src/net/quic/quic_chromium_client_stream.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "net/quic/quic_chromium_client_stream.h" #include diff --git a/naiveproxy/src/net/quic/quic_chromium_packet_writer.cc b/naiveproxy/src/net/quic/quic_chromium_packet_writer.cc index 8906f8011c..93b3d97aa4 100644 --- a/naiveproxy/src/net/quic/quic_chromium_packet_writer.cc +++ b/naiveproxy/src/net/quic/quic_chromium_packet_writer.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "net/quic/quic_chromium_packet_writer.h" #include diff --git a/naiveproxy/src/net/quic/quic_connection_logger.cc b/naiveproxy/src/net/quic/quic_connection_logger.cc index 951f283dc9..df66fc74ad 100644 --- a/naiveproxy/src/net/quic/quic_connection_logger.cc +++ b/naiveproxy/src/net/quic/quic_connection_logger.cc @@ -294,7 +294,7 @@ void QuicConnectionLogger::OnPacketHeader(const quic::QuicPacketHeader& header, // delivery. UMA_HISTOGRAM_COUNTS_1M( "Net.QuicSession.PacketGapReceived", - static_cast(delta - 1)); + static_cast(delta - 1)); } largest_received_packet_number_ = header.packet_number; } @@ -306,17 +306,18 @@ void QuicConnectionLogger::OnPacketHeader(const quic::QuicPacketHeader& header, if (last_received_packet_number_.IsInitialized() && header.packet_number < last_received_packet_number_) { ++num_out_of_order_received_packets_; - if (previous_received_packet_size_ < last_received_packet_size_) + if (previous_received_packet_size_ < last_received_packet_size_) { ++num_out_of_order_large_received_packets_; + } UMA_HISTOGRAM_COUNTS_1M( "Net.QuicSession.OutOfOrderGapReceived", - static_cast(last_received_packet_number_ - - header.packet_number)); + static_cast( + last_received_packet_number_ - header.packet_number)); } else if (no_packet_received_after_ping_) { if (last_received_packet_number_.IsInitialized()) { UMA_HISTOGRAM_COUNTS_1M( "Net.QuicSession.PacketGapReceivedNearPing", - static_cast( + static_cast( header.packet_number - last_received_packet_number_)); } no_packet_received_after_ping_ = false; @@ -518,8 +519,9 @@ void QuicConnectionLogger::OnCertificateVerified( } float QuicConnectionLogger::ReceivedPacketLossRate() const { - if (!largest_received_packet_number_.IsInitialized()) + if (!largest_received_packet_number_.IsInitialized()) { return 0.0f; + } float num_packets = largest_received_packet_number_ - first_received_packet_number_ + 1; float num_missing = num_packets - num_packets_received_; @@ -528,8 +530,9 @@ float QuicConnectionLogger::ReceivedPacketLossRate() const { void QuicConnectionLogger::OnRttChanged(quic::QuicTime::Delta rtt) const { // Notify socket performance watcher of the updated RTT value. - if (!socket_performance_watcher_) + if (!socket_performance_watcher_) { return; + } int64_t microseconds = rtt.ToMicroseconds(); if (microseconds != 0 && @@ -578,7 +581,7 @@ void QuicConnectionLogger::RecordAggregatePacketLossRate() const { base::HistogramBase* histogram = base::Histogram::FactoryGet( prefix + connection_description_, 1, 1000, 75, base::HistogramBase::kUmaTargetedHistogramFlag); - histogram->Add(static_cast( + histogram->Add(static_cast( ReceivedPacketLossRate() * 1000)); } diff --git a/naiveproxy/src/net/quic/quic_proxy_datagram_client_socket.cc b/naiveproxy/src/net/quic/quic_proxy_datagram_client_socket.cc index 35922468b0..cf514804f6 100644 --- a/naiveproxy/src/net/quic/quic_proxy_datagram_client_socket.cc +++ b/naiveproxy/src/net/quic/quic_proxy_datagram_client_socket.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "net/quic/quic_proxy_datagram_client_socket.h" #include "base/functional/bind.h" diff --git a/naiveproxy/src/net/quic/quic_session_pool.cc b/naiveproxy/src/net/quic/quic_session_pool.cc index c835f03984..ec790af284 100644 --- a/naiveproxy/src/net/quic/quic_session_pool.cc +++ b/naiveproxy/src/net/quic/quic_session_pool.cc @@ -4,6 +4,7 @@ #include "net/quic/quic_session_pool.h" +#include #include #include #include @@ -23,7 +24,6 @@ #include "base/no_destructor.h" #include "base/not_fatal_until.h" #include "base/numerics/safe_conversions.h" -#include "base/ranges/algorithm.h" #include "base/strings/escape.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" @@ -143,6 +143,27 @@ enum class QuicSessionKeyMismatchedField { }; // LINT.ThenChange(//tools/metrics/histograms/metadata/net/enums.xml:QuicSessionKeyMismatchedField) +// Represents which combination of field in `QuicSessionKey` was different +// among two keys with the same `ServerId`. We only look at the commonly +// mismatched fields to avoid combination explosion. +// +// These values are persisted to logs. Entries should not be renumbered and +// numeric values should never be reused. +// +// LINT.IfChange(QuicSessionKeyMismatchedFieldCombination) +enum class QuicSessionKeyMismatchedFieldCombination { + kUnknownCombination, + kPrivacyMode, + kNetworkAnonymizationKey, + kPrivacyModeNetworkAnonymizationKey, + kRequireDNSHttpsAlpn, + kRequireDNSHttpsAlpnPrivacyMode, + kRequireDNSHttpsNetworkAnonymizationKey, + kPrivacyModeAndNetworkAnonymizationKeyRequireDNSHttpsAlpn, + kMaxValue = kPrivacyModeAndNetworkAnonymizationKeyRequireDNSHttpsAlpn +}; +// LINT.ThenChange(//tools/metrics/histograms/metadata/net/enums.xml:QuicSessionKeyMismatchedFieldCombination) + std::string QuicPlatformNotificationToString( QuicPlatformNotification notification) { switch (notification) { @@ -295,6 +316,7 @@ void LogSessionKeyMismatch(QuicSessionKeyPartialMatchResult result, if (result != QuicSessionKeyPartialMatchResult::kNoMatch) { CHECK(active_key.has_value()); int total_mismatch = 0; + int mismatched_combinations = 0; std::string mismatch_field_histogram = base::StrCat({kHistogramBase, ".MismatchedField", histogram_suffix}); @@ -305,28 +327,44 @@ void LogSessionKeyMismatch(QuicSessionKeyPartialMatchResult result, if ((session_key.*method)() != (active_key.value().*method)()) { total_mismatch++; base::UmaHistogramEnumeration(mismatch_field_histogram, field); - return; + return true; } + return false; }; - checkAndRecordMismatch(&QuicSessionKey::privacy_mode, - QuicSessionKeyMismatchedField::kPrivacyMode); checkAndRecordMismatch(&QuicSessionKey::socket_tag, QuicSessionKeyMismatchedField::kSocketTag); checkAndRecordMismatch(&QuicSessionKey::proxy_chain, QuicSessionKeyMismatchedField::kProxyChain); checkAndRecordMismatch(&QuicSessionKey::session_usage, QuicSessionKeyMismatchedField::kSessionUsage); - checkAndRecordMismatch( - &QuicSessionKey::network_anonymization_key, - QuicSessionKeyMismatchedField::kNetworkAnonymizationKey); checkAndRecordMismatch(&QuicSessionKey::secure_dns_policy, QuicSessionKeyMismatchedField::kSecureDnsPolicy); - checkAndRecordMismatch(&QuicSessionKey::require_dns_https_alpn, - QuicSessionKeyMismatchedField::kRequireDNSHttpsAlpn); + + if (checkAndRecordMismatch(&QuicSessionKey::privacy_mode, + QuicSessionKeyMismatchedField::kPrivacyMode)) { + mismatched_combinations |= 1; + } + if (checkAndRecordMismatch( + &QuicSessionKey::network_anonymization_key, + QuicSessionKeyMismatchedField::kNetworkAnonymizationKey)) { + mismatched_combinations |= (1 << 1); + } + if (checkAndRecordMismatch( + &QuicSessionKey::require_dns_https_alpn, + QuicSessionKeyMismatchedField::kRequireDNSHttpsAlpn)) { + mismatched_combinations |= (1 << 2); + } + base::UmaHistogramCounts1000( base::StrCat( {kHistogramBase, ".TotalMismatchedField", histogram_suffix}), total_mismatch); + + base::UmaHistogramEnumeration( + base::StrCat( + {kHistogramBase, ".MismatchedFieldCombination", histogram_suffix}), + static_cast( + mismatched_combinations)); } } @@ -687,7 +725,7 @@ QuicChromiumClientSession* QuicSessionPool::FindExistingSession( std::optional QuicSessionPool::GetActiveSessionToServerId( const QuicSessionKey& session_key) const { - auto it = base::ranges::find_if( + auto it = std::ranges::find_if( active_sessions_, [&session_key](const auto& key_value) { return session_key != key_value.first && session_key.server_id() == key_value.first.server_id(); @@ -699,8 +737,8 @@ std::optional QuicSessionPool::GetActiveSessionToServerId( std::optional QuicSessionPool::GetActiveJobToServerId( const QuicSessionKey& session_key) const { - auto it = base::ranges::find_if( - active_jobs_, [&session_key](const auto& key_value) { + auto it = + std::ranges::find_if(active_jobs_, [&session_key](const auto& key_value) { return session_key != key_value.first && session_key.server_id() == key_value.first.server_id(); }); diff --git a/naiveproxy/src/net/quic/quic_test_packet_maker.cc b/naiveproxy/src/net/quic/quic_test_packet_maker.cc index 02b9551026..daedc261fb 100644 --- a/naiveproxy/src/net/quic/quic_test_packet_maker.cc +++ b/naiveproxy/src/net/quic/quic_test_packet_maker.cc @@ -53,6 +53,7 @@ quic::QuicFrames CloneFrames(const quic::QuicFrames& frames) { case quic::STOP_SENDING_FRAME: case quic::PATH_CHALLENGE_FRAME: case quic::PATH_RESPONSE_FRAME: + case quic::IMMEDIATE_ACK_FRAME: break; case quic::ACK_FRAME: frame.ack_frame = new quic::QuicAckFrame(*frame.ack_frame); diff --git a/naiveproxy/src/net/quic/quic_test_packet_printer.cc b/naiveproxy/src/net/quic/quic_test_packet_printer.cc index 0e586946ce..9889f38202 100644 --- a/naiveproxy/src/net/quic/quic_test_packet_printer.cc +++ b/naiveproxy/src/net/quic/quic_test_packet_printer.cc @@ -213,6 +213,10 @@ class QuicPacketPrinter : public QuicFramerVisitorInterface { *output_ << "OnAckFrequencyFrame: " << frame; return true; } + bool OnImmediateAckFrame(const QuicImmediateAckFrame& frame) override { + *output_ << "OnImmediateAckFrame: " << frame; + return true; + } bool OnResetStreamAtFrame(const QuicResetStreamAtFrame& frame) override { *output_ << "OnResetStreamAtFrame: " << frame; return true; diff --git a/naiveproxy/src/net/quic/web_transport_client.cc b/naiveproxy/src/net/quic/web_transport_client.cc index 91cbfa19a2..c4d443d80b 100644 --- a/naiveproxy/src/net/quic/web_transport_client.cc +++ b/naiveproxy/src/net/quic/web_transport_client.cc @@ -26,6 +26,9 @@ class FailedWebTransportClient : public WebTransportClient { void Close(const std::optional& close_info) override { NOTREACHED(); } + void CloseIfNonceMatches(base::UnguessableToken nonce) override { + NOTREACHED(); + } quic::WebTransportSession* session() override { return nullptr; } diff --git a/naiveproxy/src/net/quic/web_transport_client.h b/naiveproxy/src/net/quic/web_transport_client.h index 1bd8ae99de..f597a4dc90 100644 --- a/naiveproxy/src/net/quic/web_transport_client.h +++ b/naiveproxy/src/net/quic/web_transport_client.h @@ -128,6 +128,8 @@ class NET_EXPORT WebTransportClient { virtual void Close( const std::optional& close_info) = 0; + virtual void CloseIfNonceMatches(base::UnguessableToken nonce) = 0; + // session() can be nullptr in states other than CONNECTED. virtual quic::WebTransportSession* session() = 0; }; diff --git a/naiveproxy/src/net/reporting/reporting_cache_impl.cc b/naiveproxy/src/net/reporting/reporting_cache_impl.cc index cf833f27ef..c7bd974666 100644 --- a/naiveproxy/src/net/reporting/reporting_cache_impl.cc +++ b/naiveproxy/src/net/reporting/reporting_cache_impl.cc @@ -13,7 +13,6 @@ #include "base/containers/contains.h" #include "base/memory/raw_ptr.h" #include "base/not_fatal_until.h" -#include "base/ranges/algorithm.h" #include "base/stl_util.h" #include "base/time/clock.h" #include "base/time/tick_clock.h" @@ -261,8 +260,8 @@ ReportingEndpoint::Statistics* ReportingCacheImpl::GetEndpointStats( if (document_endpoints_source_it == document_endpoints_.end()) return nullptr; const auto document_endpoint_it = - base::ranges::find(document_endpoints_source_it->second, group_key, - &ReportingEndpoint::group_key); + std::ranges::find(document_endpoints_source_it->second, group_key, + &ReportingEndpoint::group_key); // The endpoint may have been removed while the upload was in progress. In // that case, we no longer care about the stats for the removed endpoint. if (document_endpoint_it == document_endpoints_source_it->second.end()) @@ -454,12 +453,11 @@ void ReportingCacheImpl::RemoveSourceAndEndpoints( // there must be no more cached reports for it (except reports already marked // as doomed, as they will be garbage collected soon). DCHECK(expired_sources_.contains(reporting_source)); - DCHECK( - base::ranges::none_of(reports_, [reporting_source](const auto& report) { - return report->reporting_source == reporting_source && - report->status != ReportingReport::Status::DOOMED && - report->status != ReportingReport::Status::SUCCESS; - })); + DCHECK(std::ranges::none_of(reports_, [reporting_source](const auto& report) { + return report->reporting_source == reporting_source && + report->status != ReportingReport::Status::DOOMED && + report->status != ReportingReport::Status::SUCCESS; + })); url::Origin origin; if (document_endpoints_.count(reporting_source) > 0) { // Document endpoints should have an origin. @@ -1039,7 +1037,7 @@ IsolationInfo ReportingCacheImpl::GetIsolationInfoForEndpoint( // uploaded. Enterprise endpoints are profile-bound and // not document-bound like web developer endpoints. if (endpoint.group_key.target_type == ReportingTargetType::kEnterprise) { - return IsolationInfo::CreateTransient(); + return IsolationInfo::CreateTransient(/*nonce=*/std::nullopt); } // V0 endpoint groups do not support credentials. if (!endpoint.group_key.reporting_source.has_value()) { diff --git a/naiveproxy/src/net/reporting/reporting_header_parser.cc b/naiveproxy/src/net/reporting/reporting_header_parser.cc index d3d1096c29..fe0b75c667 100644 --- a/naiveproxy/src/net/reporting/reporting_header_parser.cc +++ b/naiveproxy/src/net/reporting/reporting_header_parser.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "net/reporting/reporting_header_parser.h" #include diff --git a/naiveproxy/src/net/reporting/reporting_uploader.cc b/naiveproxy/src/net/reporting/reporting_uploader.cc index a7feb1f88e..1ac85dc4ac 100644 --- a/naiveproxy/src/net/reporting/reporting_uploader.cc +++ b/naiveproxy/src/net/reporting/reporting_uploader.cc @@ -14,6 +14,7 @@ #include "base/strings/string_split.h" #include "base/strings/string_util.h" #include "net/base/elements_upload_data_stream.h" +#include "net/base/features.h" #include "net/base/isolation_info.h" #include "net/base/load_flags.h" #include "net/base/network_anonymization_key.h" @@ -242,6 +243,12 @@ class ReportingUploaderImpl : public ReportingUploader, URLRequest::Delegate { upload->request->SetExtraRequestHeaderByName( HttpRequestHeaders::kContentType, kUploadContentType, true); + if (base::FeatureList::IsEnabled( + net::features::kReportingApiCorsOriginHeader)) { + upload->request->SetExtraRequestHeaderByName( + HttpRequestHeaders::kOrigin, upload->report_origin.Serialize(), true); + } + upload->request->set_upload(ElementsUploadDataStream::CreateWithReader( std::move(upload->payload_reader))); @@ -343,6 +350,8 @@ class ReportingUploaderImpl : public ReportingUploader, URLRequest::Delegate { void HandlePayloadResponse(std::unique_ptr upload, int response_code) { + // Skip the CORS check here because the result of the report upload is + // not exposed to the page. upload->RunCallback(ResponseCodeToOutcome(response_code)); } diff --git a/naiveproxy/src/net/server/http_server.cc b/naiveproxy/src/net/server/http_server.cc index bb7d3028b8..570e0f00f2 100644 --- a/naiveproxy/src/net/server/http_server.cc +++ b/naiveproxy/src/net/server/http_server.cc @@ -9,6 +9,7 @@ #include "net/server/http_server.h" +#include #include #include @@ -417,7 +418,7 @@ enum HeaderParseStates { // from QUICHE, if it doesn't increase the binary size too much. // State transition table -constexpr int kParserState[MAX_STATES][MAX_INPUTS] = { +constexpr std::array, MAX_STATES> kParserState = {{ /* METHOD */ {ST_URL, ST_ERR, ST_ERR, ST_ERR, ST_METHOD}, /* URL */ {ST_PROTO, ST_ERR, ST_ERR, ST_URL, ST_URL}, /* PROTOCOL */ {ST_ERR, ST_HEADER, ST_NAME, ST_ERR, ST_PROTO}, @@ -426,7 +427,8 @@ constexpr int kParserState[MAX_STATES][MAX_INPUTS] = { /* SEPARATOR */ {ST_SEPARATOR, ST_ERR, ST_ERR, ST_VALUE, ST_ERR}, /* VALUE */ {ST_VALUE, ST_HEADER, ST_NAME, ST_VALUE, ST_VALUE}, /* DONE */ {ST_ERR, ST_ERR, ST_DONE, ST_ERR, ST_ERR}, - /* ERR */ {ST_ERR, ST_ERR, ST_ERR, ST_ERR, ST_ERR}}; + /* ERR */ {ST_ERR, ST_ERR, ST_ERR, ST_ERR, ST_ERR}, +}}; // Convert an input character to the parser's input token. int CharToInputType(char ch) { diff --git a/naiveproxy/src/net/shared_dictionary/shared_dictionary_header_checker_source_stream.cc b/naiveproxy/src/net/shared_dictionary/shared_dictionary_header_checker_source_stream.cc index 8321e1e76d..c554e56bc3 100644 --- a/naiveproxy/src/net/shared_dictionary/shared_dictionary_header_checker_source_stream.cc +++ b/naiveproxy/src/net/shared_dictionary/shared_dictionary_header_checker_source_stream.cc @@ -10,6 +10,7 @@ #include "base/strings/string_number_conversions.h" #include "net/base/hash_value.h" #include "net/base/io_buffer.h" +#include "net/base/net_errors.h" namespace net { namespace { diff --git a/naiveproxy/src/net/shared_dictionary/shared_dictionary_header_checker_source_stream.h b/naiveproxy/src/net/shared_dictionary/shared_dictionary_header_checker_source_stream.h index ce6f85b12e..205edee371 100644 --- a/naiveproxy/src/net/shared_dictionary/shared_dictionary_header_checker_source_stream.h +++ b/naiveproxy/src/net/shared_dictionary/shared_dictionary_header_checker_source_stream.h @@ -10,6 +10,7 @@ #include "net/base/completion_once_callback.h" #include "net/base/hash_value.h" +#include "net/base/net_errors.h" #include "net/base/net_export.h" #include "net/filter/source_stream.h" diff --git a/naiveproxy/src/net/socket/client_socket_pool_manager.cc b/naiveproxy/src/net/socket/client_socket_pool_manager.cc index 5bc10594f4..2ebea0e4e5 100644 --- a/naiveproxy/src/net/socket/client_socket_pool_manager.cc +++ b/naiveproxy/src/net/socket/client_socket_pool_manager.cc @@ -2,13 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifdef UNSAFE_BUFFERS_BUILD -// TODO(crbug.com/40284755): Remove this and spanify to fix the errors. -#pragma allow_unsafe_buffers -#endif - #include "net/socket/client_socket_pool_manager.h" +#include #include #include #include @@ -36,10 +32,10 @@ namespace net { namespace { // Limit of sockets of each socket pool. -int g_max_sockets_per_pool[] = { - 256, // NORMAL_SOCKET_POOL - 256 // WEBSOCKET_SOCKET_POOL -}; +auto g_max_sockets_per_pool = std::to_array({ + 256, // NORMAL_SOCKET_POOL + 256 // WEBSOCKET_SOCKET_POOL +}); static_assert(std::size(g_max_sockets_per_pool) == HttpNetworkSession::NUM_SOCKET_POOL_TYPES, @@ -53,10 +49,10 @@ static_assert(std::size(g_max_sockets_per_pool) == // than normal other connections. Use a limit of 255, so the limit for wss will // be the same as the limit for ws. Also note that Firefox uses a limit of 200. // See http://crbug.com/486800 -int g_max_sockets_per_group[] = { +auto g_max_sockets_per_group = std::to_array({ 6, // NORMAL_SOCKET_POOL 255 // WEBSOCKET_SOCKET_POOL -}; +}); static_assert(std::size(g_max_sockets_per_group) == HttpNetworkSession::NUM_SOCKET_POOL_TYPES, @@ -65,10 +61,10 @@ static_assert(std::size(g_max_sockets_per_group) == // The max number of sockets to allow per proxy chain. This applies both to // http and SOCKS proxies. See http://crbug.com/12066 and // http://crbug.com/44501 for details about proxy chain connection limits. -int g_max_sockets_per_proxy_chain[] = { +auto g_max_sockets_per_proxy_chain = std::to_array({ kDefaultMaxSocketsPerProxyChain, // NORMAL_SOCKET_POOL kDefaultMaxSocketsPerProxyChain // WEBSOCKET_SOCKET_POOL -}; +}); static_assert(std::size(g_max_sockets_per_proxy_chain) == HttpNetworkSession::NUM_SOCKET_POOL_TYPES, diff --git a/naiveproxy/src/net/socket/read_buffering_stream_socket.cc b/naiveproxy/src/net/socket/read_buffering_stream_socket.cc index c4947abcf0..a61fe389fe 100644 --- a/naiveproxy/src/net/socket/read_buffering_stream_socket.cc +++ b/naiveproxy/src/net/socket/read_buffering_stream_socket.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "net/socket/read_buffering_stream_socket.h" #include diff --git a/naiveproxy/src/net/socket/socket_test_util.cc b/naiveproxy/src/net/socket/socket_test_util.cc index e25f808907..b9b7eab0d3 100644 --- a/naiveproxy/src/net/socket/socket_test_util.cc +++ b/naiveproxy/src/net/socket/socket_test_util.cc @@ -13,6 +13,7 @@ #include #include +#include #include #include #include @@ -29,7 +30,6 @@ #include "base/memory/raw_ptr.h" #include "base/notreached.h" #include "base/rand_util.h" -#include "base/ranges/algorithm.h" #include "base/run_loop.h" #include "base/task/single_thread_task_runner.h" #include "base/time/time.h" @@ -900,7 +900,7 @@ std::unique_ptr MockClientSocketFactory::CreateSSLClientSocket( << mock_ssl_data_.next_index(); SSLSocketDataProvider* next_ssl_data = mock_ssl_data_.GetNext(); if (next_ssl_data->next_protos_expected_in_ssl_config.has_value()) { - EXPECT_TRUE(base::ranges::equal( + EXPECT_TRUE(std::ranges::equal( next_ssl_data->next_protos_expected_in_ssl_config.value(), ssl_config.alpn_protos)); } diff --git a/naiveproxy/src/net/socket/socket_test_util.h b/naiveproxy/src/net/socket/socket_test_util.h index 9726b2562d..f9f1e53c85 100644 --- a/naiveproxy/src/net/socket/socket_test_util.h +++ b/naiveproxy/src/net/socket/socket_test_util.h @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #ifndef NET_SOCKET_SOCKET_TEST_UTIL_H_ #define NET_SOCKET_SOCKET_TEST_UTIL_H_ diff --git a/naiveproxy/src/net/socket/socks_client_socket.cc b/naiveproxy/src/net/socket/socks_client_socket.cc index 361aa7f856..7d45b01d8a 100644 --- a/naiveproxy/src/net/socket/socks_client_socket.cc +++ b/naiveproxy/src/net/socket/socks_client_socket.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "net/socket/socks_client_socket.h" #include diff --git a/naiveproxy/src/net/socket/ssl_connect_job.cc b/naiveproxy/src/net/socket/ssl_connect_job.cc index dfce49055d..90f555f82b 100644 --- a/naiveproxy/src/net/socket/ssl_connect_job.cc +++ b/naiveproxy/src/net/socket/ssl_connect_job.cc @@ -368,6 +368,12 @@ int SSLConnectJob::DoSSLConnect() { } } + net_log().AddEvent(NetLogEventType::SSL_CONNECT_JOB_SSL_CONNECT, [&] { + base::Value::Dict dict; + dict.Set("ech_enabled", ssl_client_context()->config().ech_enabled); + dict.Set("ech_config_list", NetLogBinaryValue(ssl_config.ech_config_list)); + return dict; + }); ssl_socket_ = client_socket_factory()->CreateSSLClientSocket( ssl_client_context(), std::move(nested_socket_), params_->host_and_port(), ssl_config); diff --git a/naiveproxy/src/net/socket/stream_socket_close_reason.cc b/naiveproxy/src/net/socket/stream_socket_close_reason.cc index abe5d5a701..29410abd14 100644 --- a/naiveproxy/src/net/socket/stream_socket_close_reason.cc +++ b/naiveproxy/src/net/socket/stream_socket_close_reason.cc @@ -29,6 +29,8 @@ std::string_view StreamSocketCloseReasonToString( return "UsingExistingSpdySession"; case StreamSocketCloseReason::kUsingExistingQuicSession: return "UsingExistingQuicSession"; + case StreamSocketCloseReason::kAbort: + return "Abort"; } } diff --git a/naiveproxy/src/net/socket/stream_socket_close_reason.h b/naiveproxy/src/net/socket/stream_socket_close_reason.h index eab86970c2..39ba86acce 100644 --- a/naiveproxy/src/net/socket/stream_socket_close_reason.h +++ b/naiveproxy/src/net/socket/stream_socket_close_reason.h @@ -24,7 +24,8 @@ enum class StreamSocketCloseReason { kQuicSessionCreated = 6, kUsingExistingSpdySession = 7, kUsingExistingQuicSession = 8, - kMaxValue = kUsingExistingQuicSession, + kAbort = 9, + kMaxValue = kAbort, }; // LINT.ThenChange(//tools/metrics/histograms/metadata/net/enums.xml:StreamSocketCloseReason) diff --git a/naiveproxy/src/net/socket/tcp_socket_io_completion_port_win.cc b/naiveproxy/src/net/socket/tcp_socket_io_completion_port_win.cc index 6f168995d9..af084bb084 100644 --- a/naiveproxy/src/net/socket/tcp_socket_io_completion_port_win.cc +++ b/naiveproxy/src/net/socket/tcp_socket_io_completion_port_win.cc @@ -72,7 +72,7 @@ bool SkipCompletionPortOnSuccessIsSupported() { } // Return true iff all protocols return IFS handles. - return base::ranges::all_of( + return std::ranges::all_of( buffer.subspan(0, result), [](const WSAPROTOCOL_INFOW& protocol_info) { return protocol_info.dwServiceFlags1 & XP1_IFS_HANDLES; }); diff --git a/naiveproxy/src/net/socket/transport_client_socket_pool.cc b/naiveproxy/src/net/socket/transport_client_socket_pool.cc index 9b6b929a39..0b504a1045 100644 --- a/naiveproxy/src/net/socket/transport_client_socket_pool.cc +++ b/naiveproxy/src/net/socket/transport_client_socket_pool.cc @@ -4,6 +4,7 @@ #include "net/socket/transport_client_socket_pool.h" +#include #include #include @@ -20,7 +21,6 @@ #include "base/metrics/histogram_macros.h" #include "base/not_fatal_until.h" #include "base/notreached.h" -#include "base/ranges/algorithm.h" #include "base/strings/string_util.h" #include "base/task/single_thread_task_runner.h" #include "base/time/time.h" @@ -1541,11 +1541,11 @@ std::unique_ptr TransportClientSocketPool::Group::RemoveUnboundJob( SanityCheck(); // Check that |job| is in the list. - auto it = base::ranges::find(jobs_, job, &std::unique_ptr::get); + auto it = std::ranges::find(jobs_, job, &std::unique_ptr::get); CHECK(it != jobs_.end(), base::NotFatalUntil::M130); // Check if |job| is in the unassigned jobs list. If so, remove it. - auto it2 = base::ranges::find(unassigned_jobs_, job); + auto it2 = std::ranges::find(unassigned_jobs_, job); if (it2 != unassigned_jobs_.end()) { unassigned_jobs_.erase(it2); } else { diff --git a/naiveproxy/src/net/socket/transport_client_socket_test_util.cc b/naiveproxy/src/net/socket/transport_client_socket_test_util.cc index 47dec6b905..3045a4ae8f 100644 --- a/naiveproxy/src/net/socket/transport_client_socket_test_util.cc +++ b/naiveproxy/src/net/socket/transport_client_socket_test_util.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include #include diff --git a/naiveproxy/src/net/spdy/header_coalescer.cc b/naiveproxy/src/net/spdy/header_coalescer.cc index 7c29d4c579..aafc95bc7a 100644 --- a/naiveproxy/src/net/spdy/header_coalescer.cc +++ b/naiveproxy/src/net/spdy/header_coalescer.cc @@ -4,12 +4,12 @@ #include "net/spdy/header_coalescer.h" +#include #include #include #include #include -#include "base/ranges/algorithm.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "base/trace_event/memory_usage_estimator.h" @@ -38,7 +38,7 @@ void NetLogInvalidHeader(const NetLogWithSource& net_log, } bool ContainsUppercaseAscii(std::string_view str) { - return base::ranges::any_of(str, base::IsAsciiUpper); + return std::ranges::any_of(str, base::IsAsciiUpper); } } // namespace diff --git a/naiveproxy/src/net/spdy/spdy_session.cc b/naiveproxy/src/net/spdy/spdy_session.cc index bc0d234382..ed94b28ea8 100644 --- a/naiveproxy/src/net/spdy/spdy_session.cc +++ b/naiveproxy/src/net/spdy/spdy_session.cc @@ -9,6 +9,7 @@ #include "net/spdy/spdy_session.h" +#include #include #include #include @@ -24,7 +25,6 @@ #include "base/metrics/histogram_functions.h" #include "base/metrics/histogram_macros.h" #include "base/rand_util.h" -#include "base/ranges/algorithm.h" #include "base/strings/strcat.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_split.h" @@ -1658,7 +1658,7 @@ bool SpdySession::CancelStreamRequest( PendingStreamRequestQueue* queue = &pending_create_stream_queues_[priority]; // Remove |request| from |queue| while preserving the order of the // other elements. - PendingStreamRequestQueue::iterator it = base::ranges::find( + PendingStreamRequestQueue::iterator it = std::ranges::find( *queue, request.get(), &base::WeakPtr::get); // The request may already be removed if there's a // CompleteStreamRequest() in flight. @@ -1666,8 +1666,8 @@ bool SpdySession::CancelStreamRequest( it = queue->erase(it); // |request| should be in the queue at most once, and if it is // present, should not be pending completion. - DCHECK(base::ranges::find(it, queue->end(), request.get(), - &base::WeakPtr::get) == + DCHECK(std::ranges::find(it, queue->end(), request.get(), + &base::WeakPtr::get) == queue->end()); return true; } diff --git a/naiveproxy/src/net/spdy/spdy_session_pool.cc b/naiveproxy/src/net/spdy/spdy_session_pool.cc index bee9e398ef..5ad43cc389 100644 --- a/naiveproxy/src/net/spdy/spdy_session_pool.cc +++ b/naiveproxy/src/net/spdy/spdy_session_pool.cc @@ -4,6 +4,7 @@ #include "net/spdy/spdy_session_pool.h" +#include #include #include @@ -12,7 +13,6 @@ #include "base/functional/bind.h" #include "base/metrics/histogram_macros.h" #include "base/not_fatal_until.h" -#include "base/ranges/algorithm.h" #include "base/task/single_thread_task_runner.h" #include "base/types/expected.h" #include "base/values.h" @@ -496,7 +496,7 @@ void SpdySessionPool::CloseCurrentIdleSessions(const std::string& description) { void SpdySessionPool::CloseAllSessions() { auto is_draining = [](const SpdySession* s) { return s->IsDraining(); }; // Repeat until every SpdySession owned by |this| is draining. - while (!base::ranges::all_of(sessions_, is_draining)) { + while (!std::ranges::all_of(sessions_, is_draining)) { CloseCurrentSessionsHelper(ERR_ABORTED, "Closing all sessions.", false /* idle_only */); } diff --git a/naiveproxy/src/net/ssl/client_cert_store_mac.cc b/naiveproxy/src/net/ssl/client_cert_store_mac.cc index 9bf0a6e607..5a3cef06b5 100644 --- a/naiveproxy/src/net/ssl/client_cert_store_mac.cc +++ b/naiveproxy/src/net/ssl/client_cert_store_mac.cc @@ -10,6 +10,7 @@ #include #include +#include #include #include #include @@ -22,7 +23,6 @@ #include "base/functional/callback.h" #include "base/functional/callback_helpers.h" #include "base/logging.h" -#include "base/ranges/algorithm.h" #include "base/strings/sys_string_conversions.h" #include "base/synchronization/lock.h" #include "crypto/mac_security_services_lock.h" @@ -230,7 +230,7 @@ void GetClientCertsImpl( } // Skip duplicates (a cert may be in multiple keychains). - if (base::ranges::any_of( + if (std::ranges::any_of( *selected_identities, [&cert](const std::unique_ptr& other_cert_identity) { diff --git a/naiveproxy/src/net/ssl/ssl_platform_key_win.cc b/naiveproxy/src/net/ssl/ssl_platform_key_win.cc index 1a3ebd30ec..8f0919fa17 100644 --- a/naiveproxy/src/net/ssl/ssl_platform_key_win.cc +++ b/naiveproxy/src/net/ssl/ssl_platform_key_win.cc @@ -9,13 +9,13 @@ #include "net/ssl/ssl_platform_key_win.h" +#include #include #include #include #include #include "base/logging.h" -#include "base/ranges/algorithm.h" #include "base/strings/utf_string_conversions.h" #include "crypto/openssl_util.h" #include "crypto/scoped_capi_types.h" @@ -67,7 +67,7 @@ std::string GetCAPIProviderName(HCRYPTPROV provider) { } // Per Microsoft's documentation, PP_NAME is NUL-terminated. However, // smartcard drivers are notoriously buggy, so check this. - auto nul = base::ranges::find(name, 0); + auto nul = std::ranges::find(name, 0); if (nul != name.end()) { name_len = nul - name.begin(); } @@ -216,7 +216,7 @@ std::wstring GetCNGProviderName(NCRYPT_KEY_HANDLE key) { // Per Microsoft's documentation, the name is NUL-terminated. However, // smartcard drivers are notoriously buggy, so check this. - auto nul = base::ranges::find(name, 0); + auto nul = std::ranges::find(name, 0); if (nul != name.end()) { name.erase(nul, name.end()); } diff --git a/naiveproxy/src/net/test/cert_builder.cc b/naiveproxy/src/net/test/cert_builder.cc index 39a9e321e3..216022f4cb 100644 --- a/naiveproxy/src/net/test/cert_builder.cc +++ b/naiveproxy/src/net/test/cert_builder.cc @@ -9,6 +9,7 @@ #include "net/test/cert_builder.h" +#include #include #include #include @@ -21,7 +22,6 @@ #include "base/memory/ptr_util.h" #include "base/memory/scoped_refptr.h" #include "base/notreached.h" -#include "base/ranges/algorithm.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" #include "base/time/time.h" @@ -248,7 +248,7 @@ std::vector> CertBuilder::CreateSimpleChain( parent_builder = builder.get(); chain.push_back(std::move(builder)); } - base::ranges::reverse(chain); + std::ranges::reverse(chain); return chain; } diff --git a/naiveproxy/src/net/test/ct_test_util.cc b/naiveproxy/src/net/test/ct_test_util.cc index 024cd44955..0df751ebf7 100644 --- a/naiveproxy/src/net/test/ct_test_util.cc +++ b/naiveproxy/src/net/test/ct_test_util.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "net/test/ct_test_util.h" #include diff --git a/naiveproxy/src/net/test/embedded_test_server/android/embedded_test_server_android.cc b/naiveproxy/src/net/test/embedded_test_server/android/embedded_test_server_android.cc index f949afe2f3..c3db041b8a 100644 --- a/naiveproxy/src/net/test/embedded_test_server/android/embedded_test_server_android.cc +++ b/naiveproxy/src/net/test/embedded_test_server/android/embedded_test_server_android.cc @@ -103,7 +103,7 @@ std::vector EmbeddedTestServerAndroid::GetRequestHeadersForUrl( const base::android::JavaParamRef& jrelative_url) { base::AutoLock auto_lock(lock_); std::string path = base::android::ConvertJavaStringToUTF8(env, jrelative_url); - CHECK(request_headers_by_path_.contains(path)) << path; + CHECK(requests_by_path_.contains(path)) << path; // Copy headers from HttpRequest::HeaderMap to std::vector for passing them to // Java. For the required SDK version in Cronet, std::map is not available @@ -111,13 +111,25 @@ std::vector EmbeddedTestServerAndroid::GetRequestHeadersForUrl( // alternates between header names (even indices) and their corresponding // values (odd indices). std::vector headers; - for (auto [key, value] : request_headers_by_path_[path]) { + for (auto [key, value] : requests_by_path_[path].headers) { headers.push_back(key); headers.push_back(value); } return headers; } +int EmbeddedTestServerAndroid::GetRequestCountForUrl( + JNIEnv* env, + const base::android::JavaParamRef& jrelative_url) { + base::AutoLock auto_lock(lock_); + std::string path = base::android::ConvertJavaStringToUTF8(env, jrelative_url); + auto it = requests_by_path_.find(path); + if (it == requests_by_path_.end()) { + return 0; + } + return it->second.count; +} + void EmbeddedTestServerAndroid::AddDefaultHandlers( JNIEnv* env, const JavaParamRef& jdirectory_path) { @@ -184,8 +196,34 @@ static void JNI_EmbeddedTestServerImpl_Init( void EmbeddedTestServerAndroid::MonitorResourceRequest( const net::test_server::HttpRequest& request) { base::AutoLock auto_lock(lock_); - request_headers_by_path_.emplace(request.GetURL().PathForRequest(), - request.headers); + + // Currently, when multiple requests are sent to the same URL, only the first + // request can record the headers. + std::string path = request.GetURL().PathForRequest(); + auto it = requests_by_path_.find(path); + if (it != requests_by_path_.end()) { + it->second.count++; + return; + } + + RequestInfoByPath info; + info.headers = request.headers; + info.count++; + requests_by_path_.emplace(path, std::move(info)); } +EmbeddedTestServerAndroid::RequestInfoByPath::RequestInfoByPath() = default; +EmbeddedTestServerAndroid::RequestInfoByPath::~RequestInfoByPath() = default; + +EmbeddedTestServerAndroid::RequestInfoByPath::RequestInfoByPath( + EmbeddedTestServerAndroid::RequestInfoByPath&& other) = default; +EmbeddedTestServerAndroid::RequestInfoByPath& +EmbeddedTestServerAndroid::RequestInfoByPath::operator=( + EmbeddedTestServerAndroid::RequestInfoByPath&& other) = default; +EmbeddedTestServerAndroid::RequestInfoByPath::RequestInfoByPath( + const EmbeddedTestServerAndroid::RequestInfoByPath& other) = default; +EmbeddedTestServerAndroid::RequestInfoByPath& +EmbeddedTestServerAndroid::RequestInfoByPath::operator=( + const EmbeddedTestServerAndroid::RequestInfoByPath& other) = default; + } // namespace net::test_server diff --git a/naiveproxy/src/net/test/embedded_test_server/android/embedded_test_server_android.h b/naiveproxy/src/net/test/embedded_test_server/android/embedded_test_server_android.h index eceee5db23..043ac51d86 100644 --- a/naiveproxy/src/net/test/embedded_test_server/android/embedded_test_server_android.h +++ b/naiveproxy/src/net/test/embedded_test_server/android/embedded_test_server_android.h @@ -52,6 +52,9 @@ class EmbeddedTestServerAndroid { std::vector GetRequestHeadersForUrl( JNIEnv* env, const base::android::JavaParamRef& jrelative_url); + int GetRequestCountForUrl( + JNIEnv* env, + const base::android::JavaParamRef& jrelative_url); void AddDefaultHandlers( JNIEnv* jenv, @@ -93,13 +96,27 @@ class EmbeddedTestServerAndroid { EmbeddedTestServer test_server_; ConnectionListener connection_listener_; - // Headers of requests sent to the server. Keyed by path (not by full URL) - // because the host part of the requests is translated ("a.test" to + // Headers and counts of requests sent to the server. Keyed by path (not by + // full URL) because the host part of the requests is translated ("a.test" to // "127.0.0.1") before the server handles them. // This is accessed from the UI thread and `EmbeddedTestServer::io_thread_`, // so it's guarded by the lock. - std::map - request_headers_by_path_ GUARDED_BY(lock_); + struct RequestInfoByPath { + RequestInfoByPath(); + ~RequestInfoByPath(); + + // Movable and copyable. + RequestInfoByPath(RequestInfoByPath&& other); + RequestInfoByPath& operator=(RequestInfoByPath&& other); + RequestInfoByPath(const RequestInfoByPath& other); + RequestInfoByPath& operator=(const RequestInfoByPath& other); + + // Headers of requests sent for the path. + net::test_server::HttpRequest::HeaderMap headers; + // Counts of requests. + size_t count = 0; + }; + std::map requests_by_path_ GUARDED_BY(lock_); base::Lock lock_; }; diff --git a/naiveproxy/src/net/test/embedded_test_server/create_websocket_handler.cc b/naiveproxy/src/net/test/embedded_test_server/create_websocket_handler.cc index 5e26965e71..96af1ea803 100644 --- a/naiveproxy/src/net/test/embedded_test_server/create_websocket_handler.cc +++ b/naiveproxy/src/net/test/embedded_test_server/create_websocket_handler.cc @@ -98,7 +98,7 @@ EmbeddedTestServer::UpgradeResultOrHttpResponse HandleWebSocketUpgrade( auto tokens = base::SplitStringPiece(connection_header->second, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY); - if (!base::ranges::any_of(tokens, [](std::string_view token) { + if (!std::ranges::any_of(tokens, [](std::string_view token) { return base::EqualsCaseInsensitiveASCII(token, "Upgrade"); })) { DVLOG(1) << "Connection header does not contain 'Upgrade'. Tokens: " diff --git a/naiveproxy/src/net/test/embedded_test_server/default_handlers.cc b/naiveproxy/src/net/test/embedded_test_server/default_handlers.cc index 55007603ae..927d21e56d 100644 --- a/naiveproxy/src/net/test/embedded_test_server/default_handlers.cc +++ b/naiveproxy/src/net/test/embedded_test_server/default_handlers.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "net/test/embedded_test_server/default_handlers.h" #include diff --git a/naiveproxy/src/net/test/embedded_test_server/embedded_test_server.cc b/naiveproxy/src/net/test/embedded_test_server/embedded_test_server.cc index 51ef03bcf6..fb9d8d1d33 100644 --- a/naiveproxy/src/net/test/embedded_test_server/embedded_test_server.cc +++ b/naiveproxy/src/net/test/embedded_test_server/embedded_test_server.cc @@ -347,8 +347,8 @@ bool EmbeddedTestServer::InitializeAndListen(int port, do { if (++num_tries > max_tries) { - LOG(ERROR) << "Failed to listen on a valid port after " << max_tries - << " attempts."; + DVLOG(1) << "Failed to listen on a valid port after " << max_tries + << " attempts."; listen_socket_.reset(); return false; } @@ -358,14 +358,14 @@ bool EmbeddedTestServer::InitializeAndListen(int port, int result = listen_socket_->ListenWithAddressAndPort(address.data(), port, 10); if (result) { - LOG(ERROR) << "Listen failed: " << ErrorToString(result); + DVLOG(1) << "Listen failed: " << ErrorToString(result); listen_socket_.reset(); return false; } result = listen_socket_->GetLocalAddress(&local_endpoint_); if (result != OK) { - LOG(ERROR) << "GetLocalAddress failed: " << ErrorToString(result); + DVLOG(1) << "GetLocalAddress failed: " << ErrorToString(result); listen_socket_.reset(); return false; } @@ -388,7 +388,7 @@ bool EmbeddedTestServer::InitializeAndListen(int port, listen_socket_->DetachFromThread(); if (is_using_ssl_ && !InitializeSSLServerContext()) { - LOG(ERROR) << "Unable to initialize SSL"; + DVLOG(1) << "Unable to initialize SSL"; return false; } @@ -577,12 +577,12 @@ bool EmbeddedTestServer::GenerateCertAndKey() { bool EmbeddedTestServer::InitializeSSLServerContext() { if (UsingStaticCert()) { if (!InitializeCertAndKeyFromFile()) { - LOG(ERROR) << "Unable to initialize cert and key from file"; + DVLOG(1) << "Unable to initialize cert and key from file"; return false; } } else { if (!GenerateCertAndKey()) { - LOG(ERROR) << "Unable to generate cert and key"; + DVLOG(1) << "Unable to generate cert and key"; return false; } } @@ -769,8 +769,7 @@ void EmbeddedTestServer::HandleRequest( } if (!response) { - LOG(WARNING) << "Request not handled. Returning 404: " - << request->relative_url; + DVLOG(2) << "Request not handled. Returning 404: " << request->relative_url; auto not_found_response = std::make_unique(); not_found_response->set_code(HTTP_NOT_FOUND); response = std::move(not_found_response); diff --git a/naiveproxy/src/net/test/embedded_test_server/http_response.cc b/naiveproxy/src/net/test/embedded_test_server/http_response.cc index 1465c45562..56300d5ee7 100644 --- a/naiveproxy/src/net/test/embedded_test_server/http_response.cc +++ b/naiveproxy/src/net/test/embedded_test_server/http_response.cc @@ -4,6 +4,7 @@ #include "net/test/embedded_test_server/http_response.h" +#include #include #include #include @@ -15,7 +16,6 @@ #include "base/functional/bind.h" #include "base/functional/callback_forward.h" #include "base/logging.h" -#include "base/ranges/algorithm.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_split.h" #include "base/strings/string_util.h" @@ -86,7 +86,7 @@ base::StringPairs BasicHttpResponse::BuildHeaders() const { headers.emplace_back("Content-Length", base::NumberToString(content_.size())); headers.emplace_back("Content-Type", content_type_); - base::ranges::copy(custom_headers_, std::back_inserter(headers)); + std::ranges::copy(custom_headers_, std::back_inserter(headers)); return headers; } diff --git a/naiveproxy/src/net/test/embedded_test_server/request_handler_util.cc b/naiveproxy/src/net/test/embedded_test_server/request_handler_util.cc index 99b7229632..242894893b 100644 --- a/naiveproxy/src/net/test/embedded_test_server/request_handler_util.cc +++ b/naiveproxy/src/net/test/embedded_test_server/request_handler_util.cc @@ -230,6 +230,25 @@ std::unique_ptr HandleFileRequest( auto http_response = std::make_unique(); http_response->set_code(HTTP_OK); + // Extract the ETag from the file path + base::File::Info info; + CHECK(base::GetFileInfo(file_path, &info)); + const uint64_t last_modified = + info.last_modified.ToDeltaSinceWindowsEpoch().InMicroseconds(); + const std::string etag = + base::StringPrintf("\"%s-%zx-%" PRIx64 "\"", file_path.MaybeAsASCII(), + file_contents.size(), last_modified); + + // Check for If-None-Match header in the request + auto if_none_match_it = request.headers.find("If-None-Match"); + if (if_none_match_it != request.headers.end()) { + const std::string& if_none_match = if_none_match_it->second; + if (if_none_match == etag) { + // ETag matches, return 304 Not Modified + http_response->set_code(HTTP_NOT_MODIFIED); + } + } + if (request.headers.find("Range") != request.headers.end()) { std::vector ranges; @@ -251,8 +270,10 @@ std::unique_ptr HandleFileRequest( http_response->set_content_type(GetContentType(file_path)); http_response->AddCustomHeader("Accept-Ranges", "bytes"); - http_response->AddCustomHeader("ETag", "'" + file_path.MaybeAsASCII() + "'"); - http_response->set_content(file_contents); + http_response->AddCustomHeader("ETag", etag); + if (http_response->code() != HTTP_NOT_MODIFIED) { + http_response->set_content(file_contents); + } return http_response; } diff --git a/naiveproxy/src/net/test/test_doh_server.cc b/naiveproxy/src/net/test/test_doh_server.cc index 1fcc21729c..9ea8373e77 100644 --- a/naiveproxy/src/net/test/test_doh_server.cc +++ b/naiveproxy/src/net/test/test_doh_server.cc @@ -2,10 +2,16 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "net/test/test_doh_server.h" #include +#include #include #include @@ -14,7 +20,6 @@ #include "base/functional/bind.h" #include "base/logging.h" #include "base/memory/scoped_refptr.h" -#include "base/ranges/algorithm.h" #include "base/strings/string_number_conversions.h" #include "base/synchronization/lock.h" #include "base/time/time.h" @@ -143,7 +148,7 @@ int TestDohServer::QueriesServedForSubdomains(std::string_view domain) { return net::IsSubdomainOf(candidate, domain); }; base::AutoLock lock(lock_); - return base::ranges::count_if(query_qnames_, is_subdomain); + return std::ranges::count_if(query_qnames_, is_subdomain); } std::unique_ptr TestDohServer::HandleRequest( diff --git a/naiveproxy/src/net/third_party/mozilla_security_manager/README.chromium b/naiveproxy/src/net/third_party/mozilla_security_manager/README.chromium index 9410a926d1..2d29da4524 100644 --- a/naiveproxy/src/net/third_party/mozilla_security_manager/README.chromium +++ b/naiveproxy/src/net/third_party/mozilla_security_manager/README.chromium @@ -2,7 +2,7 @@ Name: Mozilla Personal Security Manager URL: https://dxr.mozilla.org/mozilla1.9.2/source/security/manager/ InfoURL: http://www.mozilla.org/ Version: Mozilla 1.9.2 -License: MPL 1.1 / GPL 2.0 / LGPL 2.1 +License: MPL-1.1 License File: LICENSE Shipped: yes Security Critical: yes diff --git a/naiveproxy/src/net/third_party/mozilla_win/README.chromium b/naiveproxy/src/net/third_party/mozilla_win/README.chromium index 8660cb3b57..5bc90d1a73 100644 --- a/naiveproxy/src/net/third_party/mozilla_win/README.chromium +++ b/naiveproxy/src/net/third_party/mozilla_win/README.chromium @@ -5,7 +5,7 @@ Version: N/A Revision: 0fec57c05d3996cc00c55a66f20dd5793a9bfb5d Security Critical: Yes Shipped: yes -License: MPL 2 +License: MPL-2.0 License File: LICENSE Description: diff --git a/naiveproxy/src/net/third_party/nss/README.chromium b/naiveproxy/src/net/third_party/nss/README.chromium index 777dc7f17f..a3271b9d49 100644 --- a/naiveproxy/src/net/third_party/nss/README.chromium +++ b/naiveproxy/src/net/third_party/nss/README.chromium @@ -3,7 +3,7 @@ URL: http://www.mozilla.org/projects/security/pki/nss/ Version: 3.23 RTM Security Critical: Yes Shipped: yes -License: MPL 2 +License: MPL-2.0 License File: LICENSE This directory includes a single function that was historically derived from diff --git a/naiveproxy/src/net/third_party/quiche/BUILD.gn b/naiveproxy/src/net/third_party/quiche/BUILD.gn index 0c964c7bfd..8f3b2a3d65 100644 --- a/naiveproxy/src/net/third_party/quiche/BUILD.gn +++ b/naiveproxy/src/net/third_party/quiche/BUILD.gn @@ -46,9 +46,6 @@ config("quiche_config") { } component("quiche") { - # TODO(crbug.com/325102878): Remove once usage of the deprecated version of - # absl::HexStringToBytes have been removed. - cflags = [ "-Wno-deprecated-declarations" ] sources = [ "overrides/quiche_platform_impl/quiche_bug_tracker_impl.h", "overrides/quiche_platform_impl/quiche_client_stats_impl.h", diff --git a/naiveproxy/src/net/third_party/quiche/src/build/source_list.bzl b/naiveproxy/src/net/third_party/quiche/src/build/source_list.bzl index a2881342f2..f7ea431a83 100644 --- a/naiveproxy/src/net/third_party/quiche/src/build/source_list.bzl +++ b/naiveproxy/src/net/third_party/quiche/src/build/source_list.bzl @@ -10,6 +10,8 @@ protobuf_test_support = [ ] quiche_core_hdrs = [ "common/btree_scheduler.h", + "common/bug_utils.h", + "common/bug_utils_test_helper.h", "common/capsule.h", "common/http/http_header_block.h", "common/http/http_header_storage.h", @@ -227,6 +229,7 @@ quiche_core_hdrs = [ "quic/core/frames/quic_frame.h", "quic/core/frames/quic_goaway_frame.h", "quic/core/frames/quic_handshake_done_frame.h", + "quic/core/frames/quic_immediate_ack_frame.h", "quic/core/frames/quic_inlined_frame.h", "quic/core/frames/quic_max_streams_frame.h", "quic/core/frames/quic_message_frame.h", @@ -274,8 +277,6 @@ quiche_core_hdrs = [ "quic/core/proto/crypto_server_config_proto.h", "quic/core/proto/source_address_token_proto.h", "quic/core/qpack/new_qpack_blocking_manager.h", - "quic/core/qpack/qpack_blocking_manager.h", - "quic/core/qpack/qpack_blocking_manager_shim.h", "quic/core/qpack/qpack_decoded_headers_accumulator.h", "quic/core/qpack/qpack_decoder.h", "quic/core/qpack/qpack_decoder_stream_receiver.h", @@ -409,6 +410,7 @@ quiche_core_hdrs = [ "web_transport/web_transport_priority_scheduler.h", ] quiche_core_srcs = [ + "common/bug_utils.cc", "common/capsule.cc", "common/http/http_header_block.cc", "common/http/http_header_storage.cc", @@ -571,6 +573,7 @@ quiche_core_srcs = [ "quic/core/frames/quic_frame.cc", "quic/core/frames/quic_goaway_frame.cc", "quic/core/frames/quic_handshake_done_frame.cc", + "quic/core/frames/quic_immediate_ack_frame.cc", "quic/core/frames/quic_max_streams_frame.cc", "quic/core/frames/quic_message_frame.cc", "quic/core/frames/quic_new_connection_id_frame.cc", @@ -610,7 +613,6 @@ quiche_core_srcs = [ "quic/core/internet_checksum.cc", "quic/core/legacy_quic_stream_id_manager.cc", "quic/core/qpack/new_qpack_blocking_manager.cc", - "quic/core/qpack/qpack_blocking_manager.cc", "quic/core/qpack/qpack_decoded_headers_accumulator.cc", "quic/core/qpack/qpack_decoder.cc", "quic/core/qpack/qpack_decoder_stream_receiver.cc", @@ -1077,6 +1079,7 @@ quiche_tests_srcs = [ "balsa/simple_buffer_test.cc", "binary_http/binary_http_message_test.cc", "common/btree_scheduler_test.cc", + "common/bug_utils_test.cc", "common/capsule_test.cc", "common/http/http_header_block_test.cc", "common/http/http_header_storage_test.cc", @@ -1252,7 +1255,6 @@ quiche_tests_srcs = [ "quic/core/legacy_quic_stream_id_manager_test.cc", "quic/core/packet_number_indexed_queue_test.cc", "quic/core/qpack/new_qpack_blocking_manager_test.cc", - "quic/core/qpack/qpack_blocking_manager_test.cc", "quic/core/qpack/qpack_decoded_headers_accumulator_test.cc", "quic/core/qpack/qpack_decoder_stream_receiver_test.cc", "quic/core/qpack/qpack_decoder_stream_sender_test.cc", @@ -1396,6 +1398,7 @@ cli_tools_hdrs = [ cli_tools_srcs = [ "quic/masque/masque_client_bin.cc", "quic/masque/masque_server_bin.cc", + "quic/masque/masque_tcp_client_bin.cc", "quic/tools/crypto_message_printer_bin.cc", "quic/tools/interactive_cli_demo_bin.cc", "quic/tools/qpack_offline_decoder_bin.cc", @@ -1574,6 +1577,7 @@ moqt_srcs = [ "quic/moqt/tools/chat_client_bin.cc", "quic/moqt/tools/chat_server.cc", "quic/moqt/tools/chat_server_bin.cc", + "quic/moqt/tools/moq_chat.cc", "quic/moqt/tools/moq_chat_end_to_end_test.cc", "quic/moqt/tools/moq_chat_test.cc", "quic/moqt/tools/moqt_client.cc", diff --git a/naiveproxy/src/net/third_party/quiche/src/build/source_list.gni b/naiveproxy/src/net/third_party/quiche/src/build/source_list.gni index 52927da08e..2c862ea9fc 100644 --- a/naiveproxy/src/net/third_party/quiche/src/build/source_list.gni +++ b/naiveproxy/src/net/third_party/quiche/src/build/source_list.gni @@ -10,6 +10,8 @@ protobuf_test_support = [ ] quiche_core_hdrs = [ "src/quiche/common/btree_scheduler.h", + "src/quiche/common/bug_utils.h", + "src/quiche/common/bug_utils_test_helper.h", "src/quiche/common/capsule.h", "src/quiche/common/http/http_header_block.h", "src/quiche/common/http/http_header_storage.h", @@ -227,6 +229,7 @@ quiche_core_hdrs = [ "src/quiche/quic/core/frames/quic_frame.h", "src/quiche/quic/core/frames/quic_goaway_frame.h", "src/quiche/quic/core/frames/quic_handshake_done_frame.h", + "src/quiche/quic/core/frames/quic_immediate_ack_frame.h", "src/quiche/quic/core/frames/quic_inlined_frame.h", "src/quiche/quic/core/frames/quic_max_streams_frame.h", "src/quiche/quic/core/frames/quic_message_frame.h", @@ -274,8 +277,6 @@ quiche_core_hdrs = [ "src/quiche/quic/core/proto/crypto_server_config_proto.h", "src/quiche/quic/core/proto/source_address_token_proto.h", "src/quiche/quic/core/qpack/new_qpack_blocking_manager.h", - "src/quiche/quic/core/qpack/qpack_blocking_manager.h", - "src/quiche/quic/core/qpack/qpack_blocking_manager_shim.h", "src/quiche/quic/core/qpack/qpack_decoded_headers_accumulator.h", "src/quiche/quic/core/qpack/qpack_decoder.h", "src/quiche/quic/core/qpack/qpack_decoder_stream_receiver.h", @@ -409,6 +410,7 @@ quiche_core_hdrs = [ "src/quiche/web_transport/web_transport_priority_scheduler.h", ] quiche_core_srcs = [ + "src/quiche/common/bug_utils.cc", "src/quiche/common/capsule.cc", "src/quiche/common/http/http_header_block.cc", "src/quiche/common/http/http_header_storage.cc", @@ -571,6 +573,7 @@ quiche_core_srcs = [ "src/quiche/quic/core/frames/quic_frame.cc", "src/quiche/quic/core/frames/quic_goaway_frame.cc", "src/quiche/quic/core/frames/quic_handshake_done_frame.cc", + "src/quiche/quic/core/frames/quic_immediate_ack_frame.cc", "src/quiche/quic/core/frames/quic_max_streams_frame.cc", "src/quiche/quic/core/frames/quic_message_frame.cc", "src/quiche/quic/core/frames/quic_new_connection_id_frame.cc", @@ -610,7 +613,6 @@ quiche_core_srcs = [ "src/quiche/quic/core/internet_checksum.cc", "src/quiche/quic/core/legacy_quic_stream_id_manager.cc", "src/quiche/quic/core/qpack/new_qpack_blocking_manager.cc", - "src/quiche/quic/core/qpack/qpack_blocking_manager.cc", "src/quiche/quic/core/qpack/qpack_decoded_headers_accumulator.cc", "src/quiche/quic/core/qpack/qpack_decoder.cc", "src/quiche/quic/core/qpack/qpack_decoder_stream_receiver.cc", @@ -1078,6 +1080,7 @@ quiche_tests_srcs = [ "src/quiche/balsa/simple_buffer_test.cc", "src/quiche/binary_http/binary_http_message_test.cc", "src/quiche/common/btree_scheduler_test.cc", + "src/quiche/common/bug_utils_test.cc", "src/quiche/common/capsule_test.cc", "src/quiche/common/http/http_header_block_test.cc", "src/quiche/common/http/http_header_storage_test.cc", @@ -1253,7 +1256,6 @@ quiche_tests_srcs = [ "src/quiche/quic/core/legacy_quic_stream_id_manager_test.cc", "src/quiche/quic/core/packet_number_indexed_queue_test.cc", "src/quiche/quic/core/qpack/new_qpack_blocking_manager_test.cc", - "src/quiche/quic/core/qpack/qpack_blocking_manager_test.cc", "src/quiche/quic/core/qpack/qpack_decoded_headers_accumulator_test.cc", "src/quiche/quic/core/qpack/qpack_decoder_stream_receiver_test.cc", "src/quiche/quic/core/qpack/qpack_decoder_stream_sender_test.cc", @@ -1399,6 +1401,7 @@ cli_tools_hdrs = [ cli_tools_srcs = [ "src/quiche/quic/masque/masque_client_bin.cc", "src/quiche/quic/masque/masque_server_bin.cc", + "src/quiche/quic/masque/masque_tcp_client_bin.cc", "src/quiche/quic/tools/crypto_message_printer_bin.cc", "src/quiche/quic/tools/interactive_cli_demo_bin.cc", "src/quiche/quic/tools/qpack_offline_decoder_bin.cc", @@ -1578,6 +1581,7 @@ moqt_srcs = [ "src/quiche/quic/moqt/tools/chat_client_bin.cc", "src/quiche/quic/moqt/tools/chat_server.cc", "src/quiche/quic/moqt/tools/chat_server_bin.cc", + "src/quiche/quic/moqt/tools/moq_chat.cc", "src/quiche/quic/moqt/tools/moq_chat_end_to_end_test.cc", "src/quiche/quic/moqt/tools/moq_chat_test.cc", "src/quiche/quic/moqt/tools/moqt_client.cc", diff --git a/naiveproxy/src/net/third_party/quiche/src/build/source_list.json b/naiveproxy/src/net/third_party/quiche/src/build/source_list.json index d1b698fded..64590e2660 100644 --- a/naiveproxy/src/net/third_party/quiche/src/build/source_list.json +++ b/naiveproxy/src/net/third_party/quiche/src/build/source_list.json @@ -9,6 +9,8 @@ ], "quiche_core_hdrs": [ "quiche/common/btree_scheduler.h", + "quiche/common/bug_utils.h", + "quiche/common/bug_utils_test_helper.h", "quiche/common/capsule.h", "quiche/common/http/http_header_block.h", "quiche/common/http/http_header_storage.h", @@ -226,6 +228,7 @@ "quiche/quic/core/frames/quic_frame.h", "quiche/quic/core/frames/quic_goaway_frame.h", "quiche/quic/core/frames/quic_handshake_done_frame.h", + "quiche/quic/core/frames/quic_immediate_ack_frame.h", "quiche/quic/core/frames/quic_inlined_frame.h", "quiche/quic/core/frames/quic_max_streams_frame.h", "quiche/quic/core/frames/quic_message_frame.h", @@ -273,8 +276,6 @@ "quiche/quic/core/proto/crypto_server_config_proto.h", "quiche/quic/core/proto/source_address_token_proto.h", "quiche/quic/core/qpack/new_qpack_blocking_manager.h", - "quiche/quic/core/qpack/qpack_blocking_manager.h", - "quiche/quic/core/qpack/qpack_blocking_manager_shim.h", "quiche/quic/core/qpack/qpack_decoded_headers_accumulator.h", "quiche/quic/core/qpack/qpack_decoder.h", "quiche/quic/core/qpack/qpack_decoder_stream_receiver.h", @@ -408,6 +409,7 @@ "quiche/web_transport/web_transport_priority_scheduler.h" ], "quiche_core_srcs": [ + "quiche/common/bug_utils.cc", "quiche/common/capsule.cc", "quiche/common/http/http_header_block.cc", "quiche/common/http/http_header_storage.cc", @@ -570,6 +572,7 @@ "quiche/quic/core/frames/quic_frame.cc", "quiche/quic/core/frames/quic_goaway_frame.cc", "quiche/quic/core/frames/quic_handshake_done_frame.cc", + "quiche/quic/core/frames/quic_immediate_ack_frame.cc", "quiche/quic/core/frames/quic_max_streams_frame.cc", "quiche/quic/core/frames/quic_message_frame.cc", "quiche/quic/core/frames/quic_new_connection_id_frame.cc", @@ -609,7 +612,6 @@ "quiche/quic/core/internet_checksum.cc", "quiche/quic/core/legacy_quic_stream_id_manager.cc", "quiche/quic/core/qpack/new_qpack_blocking_manager.cc", - "quiche/quic/core/qpack/qpack_blocking_manager.cc", "quiche/quic/core/qpack/qpack_decoded_headers_accumulator.cc", "quiche/quic/core/qpack/qpack_decoder.cc", "quiche/quic/core/qpack/qpack_decoder_stream_receiver.cc", @@ -1077,6 +1079,7 @@ "quiche/balsa/simple_buffer_test.cc", "quiche/binary_http/binary_http_message_test.cc", "quiche/common/btree_scheduler_test.cc", + "quiche/common/bug_utils_test.cc", "quiche/common/capsule_test.cc", "quiche/common/http/http_header_block_test.cc", "quiche/common/http/http_header_storage_test.cc", @@ -1252,7 +1255,6 @@ "quiche/quic/core/legacy_quic_stream_id_manager_test.cc", "quiche/quic/core/packet_number_indexed_queue_test.cc", "quiche/quic/core/qpack/new_qpack_blocking_manager_test.cc", - "quiche/quic/core/qpack/qpack_blocking_manager_test.cc", "quiche/quic/core/qpack/qpack_decoded_headers_accumulator_test.cc", "quiche/quic/core/qpack/qpack_decoder_stream_receiver_test.cc", "quiche/quic/core/qpack/qpack_decoder_stream_sender_test.cc", @@ -1398,6 +1400,7 @@ "cli_tools_srcs": [ "quiche/quic/masque/masque_client_bin.cc", "quiche/quic/masque/masque_server_bin.cc", + "quiche/quic/masque/masque_tcp_client_bin.cc", "quiche/quic/tools/crypto_message_printer_bin.cc", "quiche/quic/tools/interactive_cli_demo_bin.cc", "quiche/quic/tools/qpack_offline_decoder_bin.cc", @@ -1577,6 +1580,7 @@ "quiche/quic/moqt/tools/chat_client_bin.cc", "quiche/quic/moqt/tools/chat_server.cc", "quiche/quic/moqt/tools/chat_server_bin.cc", + "quiche/quic/moqt/tools/moq_chat.cc", "quiche/quic/moqt/tools/moq_chat_end_to_end_test.cc", "quiche/quic/moqt/tools/moq_chat_test.cc", "quiche/quic/moqt/tools/moqt_client.cc", diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/balsa/balsa_frame.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/balsa/balsa_frame.cc index 8098d36ccb..40f75c469b 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/balsa/balsa_frame.cc +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/balsa/balsa_frame.cc @@ -1321,7 +1321,6 @@ size_t BalsaFrame::ProcessInput(const char* input, size_t size) { const char c = *current; ++current; - if (c == '\n') { break; } diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/blind_sign_auth/blind_sign_auth.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/blind_sign_auth/blind_sign_auth.cc index 47031e299a..3294dc832b 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/blind_sign_auth/blind_sign_auth.cc +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/blind_sign_auth/blind_sign_auth.cc @@ -87,8 +87,7 @@ void BlindSignAuth::GetInitialDataCallback( std::string message = absl::StrCat("GetInitialDataRequest failed with code: ", code); QUICHE_LOG(WARNING) << message; - std::move(callback)( - absl::InvalidArgumentError("GetInitialDataRequest failed")); + std::move(callback)(absl::InvalidArgumentError(message)); return; } // Parse GetInitialDataResponse. @@ -295,7 +294,7 @@ void BlindSignAuth::PrivacyPassAuthAndSignCallback( if (code != absl::StatusCode::kOk) { std::string message = absl::StrCat("AuthAndSign failed with code: ", code); QUICHE_LOG(WARNING) << message; - std::move(callback)(absl::InvalidArgumentError("AuthAndSign failed")); + std::move(callback)(absl::InvalidArgumentError(message)); return; } diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/common/bug_utils.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/common/bug_utils.cc new file mode 100644 index 0000000000..68bcb6b4c1 --- /dev/null +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/common/bug_utils.cc @@ -0,0 +1,64 @@ +#include "quiche/common/bug_utils.h" + +#include +#include +#include +#include + +#include "absl/base/log_severity.h" +#include "absl/strings/str_cat.h" +#include "absl/strings/string_view.h" + +namespace quiche { +namespace internal { + +GenericBugStreamHandler::GenericBugStreamHandler( + const char* prefix, const char* bug_id, const GenericBugOptions& options) + : bug_id_(bug_id), options_(options) { + if (options_.condition_str.empty()) { + absl::StrAppend(&str_, prefix, "(", bug_id, "): "); + } else { + absl::StrAppend(&str_, prefix, "_IF(", bug_id, ", ", options_.condition_str, + "): "); + } +} + +GenericBugStreamHandler::~GenericBugStreamHandler() { + GenericBugStreamHandler::OverrideFunction override_function = + GetOverrideFunction(); + if (options_.bug_listener != nullptr) { + options_.bug_listener->OnBug(bug_id_, options_.file_name, options_.line, + str_); + } + if (override_function != nullptr) { + override_function(options_.severity, options_.file_name, options_.line, + str_); + } +} + +// static +void GenericBugStreamHandler::SetOverrideFunction( + GenericBugStreamHandler::OverrideFunction override_function) { + atomic_override_function_.store(override_function); +} + +// static +GenericBugStreamHandler::OverrideFunction +GenericBugStreamHandler::GetOverrideFunction() { + return atomic_override_function_.load(std::memory_order_relaxed); +} + +// static +std::atomic + GenericBugStreamHandler::atomic_override_function_ = nullptr; + +void GenericBugWithoutLog(const char* bug_id, + const GenericBugOptions& options) { + if (options.bug_listener != nullptr) { + options.bug_listener->OnBug(bug_id, options.file_name, options.line, + /*No bug message*/ ""); + } +} + +} // namespace internal +} // namespace quiche diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/common/bug_utils.h b/naiveproxy/src/net/third_party/quiche/src/quiche/common/bug_utils.h new file mode 100644 index 0000000000..f784d6158f --- /dev/null +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/common/bug_utils.h @@ -0,0 +1,151 @@ +#ifndef QUICHE_COMMON_BUG_UTILS_H_ +#define QUICHE_COMMON_BUG_UTILS_H_ + +// This file contains macros for emitting bug log events when invariants are +// violated. +// +// Each instance of a QUICHE_BUG and friends has an associated id, which can be +// helpful for quickly finding the associated source code. +// +// The IDs are free form, but are expected to be unique. Best practice is to +// provide a *short* description of the condition being detected, without +// quotes, e.g., +// +// QUICHE_BUG(http2_decoder_invalid_parse_state) << "..."; +// +// QUICHE_BUG is defined in platform/api/quiche_bug_tracker.h. +// + +#include +#include +#include +#include +#include +#include + +#include "absl/base/log_severity.h" +#include "absl/strings/str_cat.h" +#include "absl/strings/string_view.h" +#include "quiche/common/platform/api/quiche_export.h" + +namespace quiche { +namespace internal { + +class QUICHE_EXPORT GenericBugListener { + public: + virtual ~GenericBugListener() = default; + virtual void OnBug(const char* bug_id, const char* file, int line, + absl::string_view bug_message) = 0; +}; + +struct QUICHE_NO_EXPORT GenericBugOptions { + explicit GenericBugOptions(absl::LogSeverity log_severity, + const char* file_name, int line) + : severity(log_severity), file_name(file_name), line(line) {} + + GenericBugOptions& SetCondition(absl::string_view condition) { + this->condition_str = condition; + return *this; + } + + GenericBugOptions& SetBugListener(GenericBugListener* listener) { + this->bug_listener = listener; + return *this; + } + + absl::LogSeverity severity; + const char* const file_name; + const int line; + // !empty() for conditional GENERIC_BUGs. + absl::string_view condition_str; + // If not nullptr, |bug_listener| will be notified of this GENERIC_BUG hit. + // Since GenericBugListener may be a temporary object, this is only safe to + // access from GenericBugStreamHandler, whose scope is strictly narrower. + GenericBugListener* bug_listener = nullptr; +}; + +QUICHE_EXPORT inline GenericBugOptions DefaultBugOptions(const char* file_name, + int line) { + return GenericBugOptions(absl::kLogDebugFatal, file_name, line); +} + +// Called if a GENERIC_BUG is hit, but logging is omitted. +QUICHE_EXPORT void GenericBugWithoutLog(const char* bug_id, + const GenericBugOptions& options); + +// GenericBugStreamHandler exposes an interface similar to Abseil log objects, +// and is used by GENERIC_BUG to trigger a function which can be overridden in +// tests. By default, this class performs no action. SetOverrideFunction must be +// called to accomplish anything interesting. +class QUICHE_EXPORT GenericBugStreamHandler { + public: + // |prefix| and |bug_id| must be literal strings. They are used in the + // destructor. + explicit GenericBugStreamHandler(const char* prefix, const char* bug_id, + const GenericBugOptions& options); + + ~GenericBugStreamHandler(); + + template ::value, bool> = true> + GenericBugStreamHandler& operator<<(const T& v) { + absl::StrAppend(&str_, v); + return *this; + } + + // For types that support only operator<<. There's a better solution in + // Abseil, but unfortunately OStringStream is in a namespace marked internal. + template ::value, bool> = true> + GenericBugStreamHandler& operator<<(const T& v) { + absl::StrAppend(&str_, (std::ostringstream() << v).view()); + return *this; + } + + // Interface similar to Abseil log objects. + GenericBugStreamHandler& stream() { return *this; } + + using OverrideFunction = void (*)(absl::LogSeverity severity, + const char* file, int line, + absl::string_view log_message); + + // Allows overriding the internal implementation. Call with nullptr to make + // this class a no-op. This getter and setter are thread-safe. + static void SetOverrideFunction(OverrideFunction override_function); + static OverrideFunction GetOverrideFunction(); + + private: + static std::atomic atomic_override_function_; + + const char* bug_id_; + std::string str_; + const GenericBugOptions& options_; +}; + +} // namespace internal +} // namespace quiche + +// The GNU compiler emits a warning for code like: +// +// if (foo) +// if (bar) { } else baz; +// +// because it thinks you might want the else to bind to the first if. This +// leads to problems with code like: +// +// if (do_expr) GENERIC_BUG(bug_id) << "Some message"; +// +// The "switch (0) case 0:" idiom is used to suppress this. +#define GENERIC_BUG_UNBRACED_ELSE_BLOCKER \ + switch (0) \ + case 0: \ + default: + +#define GENERIC_BUG_IMPL(prefix, bug_id, skip_log_condition, options) \ + if (skip_log_condition) { \ + ::quiche::internal::GenericBugWithoutLog(#bug_id, (options)); \ + } else /* NOLINT */ \ + ::quiche::internal::GenericBugStreamHandler(prefix, #bug_id, (options)) \ + .stream() + +#endif // QUICHE_COMMON_BUG_UTILS_H_ diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/common/bug_utils_test_helper.h b/naiveproxy/src/net/third_party/quiche/src/quiche/common/bug_utils_test_helper.h new file mode 100644 index 0000000000..6497bca211 --- /dev/null +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/common/bug_utils_test_helper.h @@ -0,0 +1,41 @@ +#ifndef QUICHE_COMMON_BUG_UTILS_TEST_HELPER_H_ +#define QUICHE_COMMON_BUG_UTILS_TEST_HELPER_H_ + +#include "quiche/common/bug_utils.h" + +// Sticking various logging functions used by the test in a separate file, +// so their line numbers are unlikely to change as we modify the test file +// itself, as the expectations we set take the file + line numbers into account. + +#define QUICHE_TEST_BUG(bug_id) \ + GENERIC_BUG_UNBRACED_ELSE_BLOCKER \ + GENERIC_BUG_IMPL("QUICHE_TEST_BUG", bug_id, false, \ + ::quiche::internal::DefaultBugOptions(__FILE__, __LINE__)) + +#define QUICHE_TEST_BUG_IF(bug_id, condition) \ + GENERIC_BUG_UNBRACED_ELSE_BLOCKER \ + if (!(condition)) { /* Do nothing */ \ + } else /* NOLINT */ \ + GENERIC_BUG_IMPL("QUICHE_TEST_BUG", bug_id, false, \ + ::quiche::internal::DefaultBugOptions(__FILE__, __LINE__) \ + .SetCondition(#condition)) + +inline void LogBugLine23() { QUICHE_TEST_BUG(Bug 23) << "Here on line 23"; } + +inline void LogBugLine26() { + QUICHE_TEST_BUG(Bug 26) << "Here on line 26"; + QUICHE_TEST_BUG(Bug 27) << "And 27!"; +} + +inline void LogIfBugLine31(bool condition) { + QUICHE_TEST_BUG_IF(Bug 31, condition) << "Here on line 31"; +} + +inline void LogIfBugNullCheckLine35(int *ptr) { + QUICHE_TEST_BUG_IF(Bug 35, ptr == nullptr) << "Here on line 35"; +} + +#define QUICHE_TEST_BUG_OPTIONS() \ + ::quiche::internal::DefaultBugOptions(__FILE__, __LINE__) + +#endif // QUICHE_COMMON_BUG_UTILS_TEST_HELPER_H_ diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/common/lifetime_tracking.h b/naiveproxy/src/net/third_party/quiche/src/quiche/common/lifetime_tracking.h index ade7f6dc0e..56fe7bbd9f 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/common/lifetime_tracking.h +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/common/lifetime_tracking.h @@ -149,6 +149,8 @@ class QUICHE_EXPORT LifetimeTrackable { } } + bool IsTracked() const { return info_ != nullptr; } + private: friend class test::LifetimeTrackingTest; // nullptr if this object is not tracked by any LifetimeTracker. diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/common/platform/default/quiche_platform_impl/quiche_time_utils_impl.h b/naiveproxy/src/net/third_party/quiche/src/quiche/common/platform/default/quiche_platform_impl/quiche_time_utils_impl.h index 5106e19b37..ea0d8204d8 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/common/platform/default/quiche_platform_impl/quiche_time_utils_impl.h +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/common/platform/default/quiche_platform_impl/quiche_time_utils_impl.h @@ -8,12 +8,12 @@ #include #include +#include "quiche/common/platform/api/quiche_export.h" + namespace quiche { -std::optional QuicheUtcDateTimeToUnixSecondsImpl(int year, int month, - int day, int hour, - int minute, - int second); +QUICHE_EXPORT std::optional QuicheUtcDateTimeToUnixSecondsImpl( + int year, int month, int day, int hour, int minute, int second); } // namespace quiche diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/common/quiche_feature_flags_list.h b/naiveproxy/src/net/third_party/quiche/src/quiche/common/quiche_feature_flags_list.h index 1c7b8bd712..0219d68128 100755 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/common/quiche_feature_flags_list.h +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/common/quiche_feature_flags_list.h @@ -9,16 +9,17 @@ #if defined(QUICHE_FLAG) QUICHE_FLAG(bool, quiche_reloadable_flag_enable_h3_origin_frame, false, true, "If true, enables support for parsing HTTP/3 ORIGIN frames.") +QUICHE_FLAG(bool, quiche_reloadable_flag_quic_ack_ce_immediately, true, true, "When true, acks a CE-marked packet immediately, unless the previous packet was also CE-marked.") QUICHE_FLAG(bool, quiche_reloadable_flag_quic_act_upon_invalid_header, true, true, "If true, reject or send error response code upon receiving invalid request or response headers.") QUICHE_FLAG(bool, quiche_reloadable_flag_quic_add_stream_info_to_idle_close_detail, false, true, "If true, include stream information in idle timeout connection close detail.") QUICHE_FLAG(bool, quiche_reloadable_flag_quic_allow_client_enabled_bbr_v2, true, true, "If true, allow client to enable BBRv2 on server via connection option 'B2ON'.") -QUICHE_FLAG(bool, quiche_reloadable_flag_quic_avoid_nested_close_connection, false, true, "If true, if QuicConnection::CloseConnection triggers a nested call to itself, make the nested call a no-op.") QUICHE_FLAG(bool, quiche_reloadable_flag_quic_bbr2_extra_acked_window, false, true, "When true, the BBR4 copt sets the extra_acked window to 20 RTTs and BBR5 sets it to 40 RTTs.") QUICHE_FLAG(bool, quiche_reloadable_flag_quic_bbr2_probe_two_rounds, true, true, "When true, the BB2U copt causes BBR2 to wait two rounds with out draining the queue before exiting PROBE_UP and BB2S has the same effect in STARTUP.") QUICHE_FLAG(bool, quiche_reloadable_flag_quic_bbr2_simplify_inflight_hi, true, true, "When true, the BBHI copt causes QUIC BBRv2 to use a simpler algorithm for raising inflight_hi in PROBE_UP.") QUICHE_FLAG(bool, quiche_reloadable_flag_quic_block_until_settings_received_copt, true, true, "If enabled and a BSUS connection is received, blocks server connections until SETTINGS frame is received.") -QUICHE_FLAG(bool, quiche_reloadable_flag_quic_buffered_store_set_client_cid, false, true, "If true, QuicBufferedPacketStore will set client CID in packets it generates.") -QUICHE_FLAG(bool, quiche_reloadable_flag_quic_can_send_ack_frequency, true, true, "If true, ack frequency frame can be sent from server to client.") +QUICHE_FLAG(bool, quiche_reloadable_flag_quic_buffered_store_set_client_cid, true, true, "If true, QuicBufferedPacketStore will set client CID in packets it generates.") +QUICHE_FLAG(bool, quiche_reloadable_flag_quic_can_send_ack_frequency, false, false, "If true, ack frequency frame can be sent from server to client.") +QUICHE_FLAG(bool, quiche_reloadable_flag_quic_chaos_protector_avoid_copy, true, true, "When true, avoid unnecessary copy in QuicChaosProtector.") QUICHE_FLAG(bool, quiche_reloadable_flag_quic_conservative_bursts, false, false, "If true, set burst token to 2 in cwnd bootstrapping experiment.") QUICHE_FLAG(bool, quiche_reloadable_flag_quic_conservative_cwnd_and_pacing_gains, false, false, "If true, uses conservative cwnd gain and pacing gain when cwnd gets bootstrapped.") QUICHE_FLAG(bool, quiche_reloadable_flag_quic_default_enable_5rto_blackhole_detection2, true, true, "If true, default-enable 5RTO blachole detection.") @@ -31,9 +32,8 @@ QUICHE_FLAG(bool, quiche_reloadable_flag_quic_disable_version_draft_29, false, f QUICHE_FLAG(bool, quiche_reloadable_flag_quic_disable_version_q046, false, true, "If true, disable QUIC version Q046.") QUICHE_FLAG(bool, quiche_reloadable_flag_quic_disable_version_rfcv1, false, false, "If true, disable QUIC version h3 (RFCv1).") QUICHE_FLAG(bool, quiche_reloadable_flag_quic_discard_initial_packet_with_key_dropped, false, true, "If true, discard INITIAL packet if the key has been dropped.") -QUICHE_FLAG(bool, quiche_reloadable_flag_quic_dispatcher_only_serialize_close_if_closed_by_self, false, false, "If true, QuicDispatcher::CleanUpSession only serializes a connection close if the connection is closed by self, did not complete handshake and does not have termination packets.") -QUICHE_FLAG(bool, quiche_reloadable_flag_quic_ecn_in_first_ack, false, true, "When true, reports ECN in counts in the ACK of the a client initial that goes in the buffered packet store.") -QUICHE_FLAG(bool, quiche_reloadable_flag_quic_enable_chaos_protection_v2, false, true, "If true, enable Chaos Protection v2 and use new QuicChaosProtector implementation.") +QUICHE_FLAG(bool, quiche_reloadable_flag_quic_dispatcher_only_serialize_close_if_closed_by_self, true, true, "If true, QuicDispatcher::CleanUpSession only serializes a connection close if the connection is closed by self, did not complete handshake and does not have termination packets.") +QUICHE_FLAG(bool, quiche_reloadable_flag_quic_enable_chaos_protection_v2, true, true, "If true, enable Chaos Protection v2 and use new QuicChaosProtector implementation.") QUICHE_FLAG(bool, quiche_reloadable_flag_quic_enable_disable_resumption, true, true, "If true, disable resumption when receiving NRES connection option.") QUICHE_FLAG(bool, quiche_reloadable_flag_quic_enable_mtu_discovery_at_server, false, false, "If true, QUIC will default enable MTU discovery at server, with a target of 1450 bytes.") QUICHE_FLAG(bool, quiche_reloadable_flag_quic_enable_server_on_wire_ping, true, true, "If true, enable server retransmittable on wire PING.") @@ -44,29 +44,31 @@ QUICHE_FLAG(bool, quiche_reloadable_flag_quic_gfe_allow_alps_new_codepoint, true QUICHE_FLAG(bool, quiche_reloadable_flag_quic_ignore_gquic_probing, true, true, "If true, QUIC server will not respond to gQUIC probing packet(PING + PADDING) but treat it as a regular packet.") QUICHE_FLAG(bool, quiche_reloadable_flag_quic_limit_new_streams_per_loop_2, true, true, "If true, when the peer sends connection options \\\'SLP1\\\', \\\'SLP2\\\' and \\\'SLPF\\\', internet facing GFEs will only allow a limited number of new requests to be processed per event loop, and postpone the rest to the following event loops. Also guard QuicConnection to iterate through all decrypters at each encryption level to get cipher id for a request.") QUICHE_FLAG(bool, quiche_reloadable_flag_quic_no_path_degrading_before_handshake_confirmed, true, true, "If true, an endpoint does not detect path degrading or blackholing until handshake gets confirmed.") +QUICHE_FLAG(bool, quiche_reloadable_flag_quic_no_vn_in_response_to_vn, false, false, "If true, QUIC will not send a version negotiation in response to a version negotiation packet.") QUICHE_FLAG(bool, quiche_reloadable_flag_quic_no_write_control_frame_upon_connection_close, false, true, "If trrue, early return before write control frame in OnCanWrite() if the connection is already closed.") QUICHE_FLAG(bool, quiche_reloadable_flag_quic_no_write_control_frame_upon_connection_close2, false, false, "If true, QuicSession will block outgoing control frames when the connection is closed.") QUICHE_FLAG(bool, quiche_reloadable_flag_quic_notify_ack_listener_earlier, false, false, "If true, call QuicAckListenerInterface::OnPacketAcked() before moving the stream to closed stream list.") QUICHE_FLAG(bool, quiche_reloadable_flag_quic_notify_stream_soon_to_destroy, false, false, "If true, notify each QUIC stream before it gets destroyed and update ACK listener before that.") +QUICHE_FLAG(bool, quiche_reloadable_flag_quic_on_packet_header_return_connected, false, true, "If true, QuicConnection::OnPacketHeader will return connected_ at the end of the function.") QUICHE_FLAG(bool, quiche_reloadable_flag_quic_optimize_qpack_blocking_manager, false, false, "If true, optimize qpack_blocking_manager for CPU efficiency.") QUICHE_FLAG(bool, quiche_reloadable_flag_quic_pacing_remove_non_initial_burst, false, false, "If true, remove the non-initial burst in QUIC PacingSender.") QUICHE_FLAG(bool, quiche_reloadable_flag_quic_parse_cert_compression_algos_from_chlo, true, true, "If true, parse offered cert compression algorithms from received CHLOs.") -QUICHE_FLAG(bool, quiche_reloadable_flag_quic_parse_transport_parameters_from_chlo, false, false, "If true, parse QUIC transport parameters from received CHLOs.") +QUICHE_FLAG(bool, quiche_reloadable_flag_quic_parse_transport_parameters_from_chlo, true, true, "If true, parse QUIC transport parameters from received CHLOs.") QUICHE_FLAG(bool, quiche_reloadable_flag_quic_priority_respect_incremental, false, false, "If true, respect the incremental parameter of each stream in QuicWriteBlockedList.") +QUICHE_FLAG(bool, quiche_reloadable_flag_quic_receive_ack_frequency, false, false, "When true, advertises support for ACK_FREQUENCY and IMMEDIATE_ACK from draft-ietf-quic-ack-frequency-10 and processes them correctly.") QUICHE_FLAG(bool, quiche_reloadable_flag_quic_require_handshake_confirmation, true, true, "If true, require handshake confirmation for QUIC connections, functionally disabling 0-rtt handshakes.") -QUICHE_FLAG(bool, quiche_reloadable_flag_quic_send_placeholder_ticket_when_encrypt_ticket_fails, true, true, "If true, when TicketCrypter fails to encrypt a session ticket, quic::TlsServerHandshaker will send a placeholder ticket, instead of an empty one, to the client.") QUICHE_FLAG(bool, quiche_reloadable_flag_quic_stop_reading_also_stops_header_decompression, true, true, "If true, QUIC stream will not continue decompressing buffer headers after StopReading() called.") QUICHE_FLAG(bool, quiche_reloadable_flag_quic_test_peer_addr_change_after_normalize, false, false, "If true, QuicConnection::ProcessValidatedPacket will use normalized address to test peer address changes.") QUICHE_FLAG(bool, quiche_reloadable_flag_quic_testonly_default_false, false, false, "A testonly reloadable flag that will always default to false.") QUICHE_FLAG(bool, quiche_reloadable_flag_quic_testonly_default_true, true, true, "A testonly reloadable flag that will always default to true.") -QUICHE_FLAG(bool, quiche_reloadable_flag_quic_update_transmission_info_on_frame_acked, false, true, "If true, QuicUnackedPacketMap will update transmission info after session_notifier_->OnFrameAcked.") +QUICHE_FLAG(bool, quiche_reloadable_flag_quic_update_transmission_info_on_frame_acked, true, true, "If true, QuicUnackedPacketMap will update transmission info after session_notifier_->OnFrameAcked.") QUICHE_FLAG(bool, quiche_reloadable_flag_quic_use_alarm_multiplexer, false, false, "Manages all of the connection alarms via QuicAlarmMultiplexer.") QUICHE_FLAG(bool, quiche_reloadable_flag_quic_use_received_client_addresses_cache, true, true, "If true, use a LRU cache to record client addresses of packets received on server's original address.") -QUICHE_FLAG(bool, quiche_restart_flag_quic_support_flow_label2, false, true, "If true, QUIC will support reading and writing IPv6 flow labels.") +QUICHE_FLAG(bool, quiche_reloadable_flag_quic_version_negotiation_rfc, false, true, "If true, use the RFC version of the version negotiation transport parameter.") +QUICHE_FLAG(bool, quiche_restart_flag_quic_support_flow_label2, true, true, "If true, QUIC will support reading and writing IPv6 flow labels.") QUICHE_FLAG(bool, quiche_restart_flag_quic_support_release_time_for_gso, false, false, "If true, QuicGsoBatchWriter will support release time if it is available and the process has the permission to do so.") QUICHE_FLAG(bool, quiche_restart_flag_quic_testonly_default_false, false, false, "A testonly restart flag that will always default to false.") QUICHE_FLAG(bool, quiche_restart_flag_quic_testonly_default_true, true, true, "A testonly restart flag that will always default to true.") -QUICHE_FLAG(bool, quiche_restart_flag_quic_use_new_qpack_blocking_manager, true, true, "If true, QUIC will use NewQpackBlockingManager instead of QpackBlockingManager.") #endif // clang-format on diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/http2/adapter/header_validator.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/http2/adapter/header_validator.cc index 6d8685851f..d7b68739b1 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/http2/adapter/header_validator.cc +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/http2/adapter/header_validator.cc @@ -148,8 +148,12 @@ HeaderValidator::HeaderStatus HeaderValidator::ValidateSingleHeader( } else if (value.empty()) { pseudo_header_state_[STATE_PATH_IS_EMPTY] = true; return HEADER_FIELD_INVALID; - } else if (validate_path_ && - !IsValidPath(value, allow_fragment_in_path_)) { + } else if (validate_path_) { + if (!IsValidPath(value, allow_fragment_in_path_)) { + return HEADER_FIELD_INVALID; + } + } else if (value.find_first_of(" \t") != absl::string_view::npos) { + // Tab and space are not valid path characters. return HEADER_FIELD_INVALID; } if (value[0] == '/') { diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/chlo_extractor.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/chlo_extractor.cc index 94af81d154..1a105c5e47 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/chlo_extractor.cc +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/chlo_extractor.cc @@ -15,6 +15,7 @@ #include "quiche/quic/core/crypto/quic_decrypter.h" #include "quiche/quic/core/crypto/quic_encrypter.h" #include "quiche/quic/core/frames/quic_ack_frequency_frame.h" +#include "quiche/quic/core/frames/quic_immediate_ack_frame.h" #include "quiche/quic/core/frames/quic_reset_stream_at_frame.h" #include "quiche/quic/core/quic_framer.h" #include "quiche/quic/core/quic_types.h" @@ -81,7 +82,8 @@ class ChloFramerVisitor : public QuicFramerVisitorInterface, bool OnPaddingFrame(const QuicPaddingFrame& frame) override; bool OnMessageFrame(const QuicMessageFrame& frame) override; bool OnHandshakeDoneFrame(const QuicHandshakeDoneFrame& frame) override; - bool OnAckFrequencyFrame(const QuicAckFrequencyFrame& farme) override; + bool OnAckFrequencyFrame(const QuicAckFrequencyFrame& frame) override; + bool OnImmediateAckFrame(const QuicImmediateAckFrame& frame) override; bool OnResetStreamAtFrame(const QuicResetStreamAtFrame& frame) override; void OnPacketComplete() override {} bool IsValidStatelessResetToken( @@ -311,6 +313,11 @@ bool ChloFramerVisitor::OnAckFrequencyFrame( return true; } +bool ChloFramerVisitor::OnImmediateAckFrame( + const QuicImmediateAckFrame& /*frame*/) { + return true; +} + bool ChloFramerVisitor::IsValidStatelessResetToken( const StatelessResetToken& /*token*/) const { return false; diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/crypto/crypto_protocol.h b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/crypto/crypto_protocol.h index b5acba6c7d..c1bf0dbc41 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/crypto/crypto_protocol.h +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/crypto/crypto_protocol.h @@ -49,7 +49,7 @@ using ServerConfigID = std::string; // "QNZR", "B2HI", "H2PR", "FIFO", "LIFO", "RRWS", "QNSP", "B2CL", "CHSP", // "BPTE", "ACKD", "AKD2", "AKD4", "MAD1", "MAD4", "MAD5", "ACD0", "ACKQ", // "TLPR", "CCS\0", "PDP4", "NCHP", "NBPE", "2RTO", "3RTO", "4RTO", "6RTO", -// "PDP1", "PDP2", "PDP3", "PDP5", "QLVE", "RVCM", "BBPD", "TPC\0" +// "PDP1", "PDP2", "PDP3", "PDP5", "QLVE", "RVCM", "BBPD", "TPC\0", "AFFE" DEFINE_STATIC_QUIC_TAG(CHLO); // Client hello DEFINE_STATIC_QUIC_TAG(SHLO); // Server hello @@ -212,8 +212,6 @@ DEFINE_STATIC_QUIC_TAG(AKD3); // Ack decimation style acking // with 1/8 RTT acks. DEFINE_STATIC_QUIC_TAG(AKDU); // Unlimited number of packets // received before acking -DEFINE_STATIC_QUIC_TAG(AFFE); // Enable client receiving - // AckFrequencyFrame. DEFINE_STATIC_QUIC_TAG(AFF1); // Use SRTT in building // AckFrequencyFrame. DEFINE_STATIC_QUIC_TAG(AFF2); // Send AckFrequencyFrame upon @@ -304,6 +302,8 @@ DEFINE_STATIC_QUIC_TAG(CRNT); DEFINE_STATIC_QUIC_TAG(PRGC); // Prague Cubic congestion // control (client-only) +DEFINE_STATIC_QUIC_TAG(CQBC); // Client-only Cubic congestion control. Used + // for a control in the PRGC experiment. // Optional support of truncated Connection IDs. If sent by a peer, the value // is the minimum number of bytes allowed for the connection ID sent to the diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/crypto/transport_parameters.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/crypto/transport_parameters.cc index f03e67e1d1..86e9cbdcc0 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/crypto/transport_parameters.cc +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/crypto/transport_parameters.cc @@ -7,7 +7,6 @@ #include #include #include -#include #include #include #include @@ -20,6 +19,7 @@ #include "openssl/digest.h" #include "openssl/sha.h" #include "quiche/quic/core/quic_connection_id.h" +#include "quiche/quic/core/quic_constants.h" #include "quiche/quic/core/quic_data_reader.h" #include "quiche/quic/core/quic_data_writer.h" #include "quiche/quic/core/quic_types.h" @@ -27,7 +27,11 @@ #include "quiche/quic/core/quic_versions.h" #include "quiche/quic/platform/api/quic_bug_tracker.h" #include "quiche/quic/platform/api/quic_flag_utils.h" +#include "quiche/quic/platform/api/quic_flags.h" #include "quiche/quic/platform/api/quic_ip_address.h" +#include "quiche/common/platform/api/quiche_logging.h" +#include "quiche/common/quiche_data_writer.h" +#include "quiche/common/quiche_endian.h" namespace quic { @@ -72,8 +76,11 @@ enum TransportParameters::TransportParameterId : uint64_t { kGoogleQuicVersion = 0x4752, // Used to transmit version and supported_versions. - kMinAckDelay = 0xDE1A, // draft-iyengar-quic-delayed-ack. - kVersionInformation = 0xFF73DB, // draft-ietf-quic-version-negotiation. + kMinAckDelay = 0xDE1A, // draft-iyengar-quic-delayed-ack. + kMinAckDelayDraft10 = 0xFF04DE1B, // draft-ietf-quic-delayed-ack-10. + kVersionInformationDraft = + 0xFF73DB, // draft-ietf-quic-version-negotiation-13. + kVersionInformation = 0x11, // RFC 9368. // draft-ietf-quic-reliable-stream-reset. kReliableStreamReset = 0x17F7586D2CB571, @@ -145,8 +152,17 @@ std::string TransportParameterIdToString( case TransportParameters::kGoogleQuicVersion: return "google-version"; case TransportParameters::kMinAckDelay: + case TransportParameters::kMinAckDelayDraft10: return "min_ack_delay_us"; case TransportParameters::kVersionInformation: + if (!GetQuicReloadableFlag(quic_version_negotiation_rfc)) { + break; + } + return "version_information"; + case TransportParameters::kVersionInformationDraft: + if (GetQuicReloadableFlag(quic_version_negotiation_rfc)) { + break; + } return "version_information"; case TransportParameters::kReliableStreamReset: return "reliable_stream_reset"; @@ -154,6 +170,48 @@ std::string TransportParameterIdToString( return absl::StrCat("Unknown(", param_id, ")"); } +bool WriteIntegerTlv(QuicDataWriter* writer, + TransportParameters::TransportParameterId id, + uint64_t value) { + if (!writer->WriteVarInt62(id)) { + QUIC_BUG(quic_bug_10743_1) + << "Failed to write param_id " << TransportParameterIdToString(id); + return false; + } + const quiche::QuicheVariableLengthIntegerLength value_length = + QuicDataWriter::GetVarInt62Len(value); + if (!writer->WriteVarInt62(value_length)) { + QUIC_BUG(quic_bug_10743_2) << "Failed to write value_length for " + << TransportParameterIdToString(id); + return false; + } + if (!writer->WriteVarInt62WithForcedLength(value, value_length)) { + QUIC_BUG(quic_bug_10743_3) + << "Failed to write value for " << TransportParameterIdToString(id); + return false; + } + return true; +} + +// Just read the value, because the type and length have already been parsed to +// identify the parameter as an integer and initialize |reader|. +bool ReadIntegerValue(QuicDataReader* reader, + TransportParameters::TransportParameterId param_id, + uint64_t& value, std::string* error_details) { + if (!reader->ReadVarInt62(&value)) { + *error_details = + "Failed to parse value " + TransportParameterIdToString(param_id); + return false; + } + if (!reader->IsDoneReading()) { + *error_details = absl::StrCat( + "Received unexpected ", reader->BytesRemaining(), + " bytes after parsing ", TransportParameterIdToString(param_id)); + return false; + } + return true; +} + bool TransportParameterIdIsKnown( TransportParameters::TransportParameterId param_id) { switch (param_id) { @@ -181,9 +239,13 @@ bool TransportParameterIdIsKnown( case TransportParameters::kGoogleConnectionOptions: case TransportParameters::kGoogleQuicVersion: case TransportParameters::kMinAckDelay: - case TransportParameters::kVersionInformation: + case TransportParameters::kMinAckDelayDraft10: case TransportParameters::kReliableStreamReset: return true; + case TransportParameters::kVersionInformation: + return GetQuicReloadableFlag(quic_version_negotiation_rfc); + case TransportParameters::kVersionInformationDraft: + return !GetQuicReloadableFlag(quic_version_negotiation_rfc); } return false; } @@ -226,21 +288,7 @@ bool TransportParameters::IntegerParameter::Write( // Do not write if the value is default. return true; } - if (!writer->WriteVarInt62(param_id_)) { - QUIC_BUG(quic_bug_10743_1) << "Failed to write param_id for " << *this; - return false; - } - const quiche::QuicheVariableLengthIntegerLength value_length = - QuicDataWriter::GetVarInt62Len(value_); - if (!writer->WriteVarInt62(value_length)) { - QUIC_BUG(quic_bug_10743_2) << "Failed to write value_length for " << *this; - return false; - } - if (!writer->WriteVarInt62WithForcedLength(value_, value_length)) { - QUIC_BUG(quic_bug_10743_3) << "Failed to write value for " << *this; - return false; - } - return true; + return WriteIntegerTlv(writer, param_id_, value_); } bool TransportParameters::IntegerParameter::Read(QuicDataReader* reader, @@ -251,19 +299,7 @@ bool TransportParameters::IntegerParameter::Read(QuicDataReader* reader, return false; } has_been_read_ = true; - - if (!reader->ReadVarInt62(&value_)) { - *error_details = - "Failed to parse value for " + TransportParameterIdToString(param_id_); - return false; - } - if (!reader->IsDoneReading()) { - *error_details = - absl::StrCat("Received unexpected ", reader->BytesRemaining(), - " bytes after parsing ", this->ToString(false)); - return false; - } - return true; + return ReadIntegerValue(reader, param_id_, value_, error_details); } std::string TransportParameters::IntegerParameter::ToString( @@ -426,6 +462,10 @@ std::string TransportParameters::ToString() const { rv += ack_delay_exponent.ToString(/*for_use_in_list=*/true); rv += max_ack_delay.ToString(/*for_use_in_list=*/true); rv += min_ack_delay_us.ToString(/*for_use_in_list=*/true); + if (min_ack_delay_us_draft10.has_value()) { + absl::StrAppend(&rv, " ", TransportParameterIdToString(kMinAckDelayDraft10), + " ", *min_ack_delay_us_draft10); + } if (disable_active_migration) { rv += " " + TransportParameterIdToString(kDisableActiveMigration); } @@ -536,6 +576,7 @@ TransportParameters::TransportParameters(const TransportParameters& other) ack_delay_exponent(other.ack_delay_exponent), max_ack_delay(other.max_ack_delay), min_ack_delay_us(other.min_ack_delay_us), + min_ack_delay_us_draft10(other.min_ack_delay_us_draft10), disable_active_migration(other.disable_active_migration), active_connection_id_limit(other.active_connection_id_limit), initial_source_connection_id(other.initial_source_connection_id), @@ -576,6 +617,7 @@ bool TransportParameters::operator==(const TransportParameters& rhs) const { ack_delay_exponent.value() == rhs.ack_delay_exponent.value() && max_ack_delay.value() == rhs.max_ack_delay.value() && min_ack_delay_us.value() == rhs.min_ack_delay_us.value() && + min_ack_delay_us_draft10 == rhs.min_ack_delay_us_draft10 && disable_active_migration == rhs.disable_active_migration && active_connection_id_limit.value() == rhs.active_connection_id_limit.value() && @@ -767,6 +809,7 @@ bool SerializeTransportParameters(const TransportParameters& in, kIntegerParameterLength + // ack_delay_exponent kIntegerParameterLength + // max_ack_delay kIntegerParameterLength + // min_ack_delay_us + kIntegerParameterLength + // min_ack_delay_us_draft10 kTypeAndValueLength + // disable_active_migration kPreferredAddressParameterLength + // preferred_address kIntegerParameterLength + // active_connection_id_limit @@ -794,6 +837,7 @@ bool SerializeTransportParameters(const TransportParameters& in, TransportParameters::kAckDelayExponent, TransportParameters::kMaxAckDelay, TransportParameters::kMinAckDelay, + TransportParameters::kMinAckDelayDraft10, TransportParameters::kActiveConnectionIdLimit, TransportParameters::kMaxDatagramFrameSize, TransportParameters::kReliableStreamReset, @@ -998,9 +1042,18 @@ bool SerializeTransportParameters(const TransportParameters& in, } break; // min_ack_delay_us case TransportParameters::kMinAckDelay: { - if (!in.min_ack_delay_us.Write(&writer)) { - QUIC_BUG(Failed to write min_ack_delay_us) - << "Failed to write min_ack_delay_us for " << in; + QUICHE_DCHECK(in.min_ack_delay_us.value() == 0); + } break; + // min_ack_delay_us_draft10 + case TransportParameters::kMinAckDelayDraft10: { + if (!in.min_ack_delay_us_draft10.has_value()) { + break; + } + if (!WriteIntegerTlv(&writer, parameter_id, + *in.min_ack_delay_us_draft10)) { + QUIC_BUG(quic_bug_min_ack_delay_failed_write) + << "Failed to write " + << " min_ack_delay_us_draft10 for " << in; return false; } } break; @@ -1243,7 +1296,15 @@ bool SerializeTransportParameters(const TransportParameters& in, const uint64_t version_information_length = sizeof(in.version_information->chosen_version) + sizeof(QuicVersionLabel) * other_versions.size(); - if (!writer.WriteVarInt62(TransportParameters::kVersionInformation) || + TransportParameters::TransportParameterId version_information_param_id = + TransportParameters::kVersionInformation; + if (!GetQuicReloadableFlag(quic_version_negotiation_rfc)) { + version_information_param_id = + TransportParameters::kVersionInformationDraft; + } else { + QUIC_RELOADABLE_FLAG_COUNT_N(quic_version_negotiation_rfc, 1, 3); + } + if (!writer.WriteVarInt62(version_information_param_id) || !writer.WriteVarInt62( /* transport parameter length */ version_information_length) || !writer.WriteUInt32(in.version_information->chosen_version)) { @@ -1549,6 +1610,52 @@ bool ParseTransportParameters(ParsedQuicVersion version, } } break; case TransportParameters::kVersionInformation: { + if (!GetQuicReloadableFlag(quic_version_negotiation_rfc)) { + // Treat this as an unknown parameter. + if (out->custom_parameters.find(param_id) != + out->custom_parameters.end()) { + *error_details = "Received a second unknown parameter" + + TransportParameterIdToString(param_id); + return false; + } + out->custom_parameters[param_id] = + std::string(value_reader.ReadRemainingPayload()); + break; + } + QUIC_RELOADABLE_FLAG_COUNT_N(quic_version_negotiation_rfc, 2, 3); + if (out->version_information.has_value()) { + *error_details = "Received a second version_information"; + return false; + } + out->version_information = TransportParameters::VersionInformation(); + if (!value_reader.ReadUInt32( + &out->version_information->chosen_version)) { + *error_details = "Failed to read chosen version"; + return false; + } + while (!value_reader.IsDoneReading()) { + QuicVersionLabel other_version; + if (!value_reader.ReadUInt32(&other_version)) { + *error_details = "Failed to parse other version"; + return false; + } + out->version_information->other_versions.push_back(other_version); + } + } break; + case TransportParameters::kVersionInformationDraft: { + if (GetQuicReloadableFlag(quic_version_negotiation_rfc)) { + QUIC_RELOADABLE_FLAG_COUNT_N(quic_version_negotiation_rfc, 3, 3); + // Treat this as an unknown parameter. + if (out->custom_parameters.find(param_id) != + out->custom_parameters.end()) { + *error_details = "Received a second unknown parameter" + + TransportParameterIdToString(param_id); + return false; + } + out->custom_parameters[param_id] = + std::string(value_reader.ReadRemainingPayload()); + break; + } if (out->version_information.has_value()) { *error_details = "Received a second version_information"; return false; @@ -1572,6 +1679,20 @@ bool ParseTransportParameters(ParsedQuicVersion version, parse_success = out->min_ack_delay_us.Read(&value_reader, error_details); break; + case TransportParameters::kMinAckDelayDraft10: { + if (out->min_ack_delay_us_draft10.has_value()) { + *error_details = "Received a second min_ack_delay_us_draft10"; + return false; + } + uint64_t delay_value; + parse_success = ReadIntegerValue( + &value_reader, TransportParameters::kMinAckDelayDraft10, + delay_value, error_details); + if (!parse_success) { + return false; + } + out->min_ack_delay_us_draft10 = delay_value; + } break; default: if (out->custom_parameters.find(param_id) != out->custom_parameters.end()) { diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/crypto/transport_parameters.h b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/crypto/transport_parameters.h index 5efba82098..4696278d20 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/crypto/transport_parameters.h +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/crypto/transport_parameters.h @@ -226,6 +226,11 @@ struct QUICHE_EXPORT TransportParameters { // Minimum amount of time in microseconds by which the endpoint will // delay sending acknowledgments. Used to enable sender control of ack delay. IntegerParameter min_ack_delay_us; + // There is no "default" value for this. If it is not nullopt, it should be + // sent regardless of the default value. Even if the incoming value matches + // the default, it indicates readiness to receive ACK_FREQUENCY and + // IMMEDIATE_ACK frames. + std::optional min_ack_delay_us_draft10; // Indicates lack of support for connection migration. bool disable_active_migration; diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/frames/quic_frame.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/frames/quic_frame.cc index f79870300d..7a6453827d 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/frames/quic_frame.cc +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/frames/quic_frame.cc @@ -9,6 +9,7 @@ #include #include +#include "quiche/quic/core/frames/quic_immediate_ack_frame.h" #include "quiche/quic/core/frames/quic_new_connection_id_frame.h" #include "quiche/quic/core/frames/quic_reset_stream_at_frame.h" #include "quiche/quic/core/frames/quic_retire_connection_id_frame.h" @@ -87,6 +88,9 @@ QuicFrame::QuicFrame(QuicNewTokenFrame* frame) QuicFrame::QuicFrame(QuicAckFrequencyFrame* frame) : type(ACK_FREQUENCY_FRAME), ack_frequency_frame(frame) {} +QuicFrame::QuicFrame(QuicImmediateAckFrame frame) + : immediate_ack_frame(frame) {} + QuicFrame::QuicFrame(QuicResetStreamAtFrame* frame) : type(RESET_STREAM_AT_FRAME), reset_stream_at_frame(frame) {} @@ -108,7 +112,8 @@ void DeleteFrame(QuicFrame* frame) { frame->type != WINDOW_UPDATE_FRAME && frame->type != BLOCKED_FRAME && frame->type != STOP_SENDING_FRAME && frame->type != PATH_CHALLENGE_FRAME && - frame->type != PATH_RESPONSE_FRAME) { + frame->type != PATH_RESPONSE_FRAME && + frame->type != IMMEDIATE_ACK_FRAME) { QUICHE_CHECK(!frame->delete_forbidden) << *frame; } #endif // QUIC_FRAME_DEBUG @@ -127,6 +132,7 @@ void DeleteFrame(QuicFrame* frame) { case STOP_SENDING_FRAME: case PATH_CHALLENGE_FRAME: case PATH_RESPONSE_FRAME: + case IMMEDIATE_ACK_FRAME: break; case ACK_FRAME: delete frame->ack_frame; @@ -436,6 +442,9 @@ QuicFrame CopyQuicFrame(quiche::QuicheBufferAllocator* allocator, case ACK_FREQUENCY_FRAME: copy = QuicFrame(new QuicAckFrequencyFrame(*frame.ack_frequency_frame)); break; + case IMMEDIATE_ACK_FRAME: + copy = QuicFrame(QuicImmediateAckFrame(frame.immediate_ack_frame)); + break; case RESET_STREAM_AT_FRAME: copy = QuicFrame(new QuicResetStreamAtFrame(*frame.reset_stream_at_frame)); @@ -542,6 +551,9 @@ std::ostream& operator<<(std::ostream& os, const QuicFrame& frame) { case ACK_FREQUENCY_FRAME: os << "type { ACK_FREQUENCY_FRAME } " << *(frame.ack_frequency_frame); break; + case IMMEDIATE_ACK_FRAME: + os << "type { IMMEDIATE_ACK_FRAME } " << frame.immediate_ack_frame; + break; case RESET_STREAM_AT_FRAME: os << "type { RESET_STREAM_AT_FRAME } " << *(frame.reset_stream_at_frame); break; diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/frames/quic_frame.h b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/frames/quic_frame.h index ffb9f77ced..3485e4e808 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/frames/quic_frame.h +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/frames/quic_frame.h @@ -18,6 +18,7 @@ #include "quiche/quic/core/frames/quic_crypto_frame.h" #include "quiche/quic/core/frames/quic_goaway_frame.h" #include "quiche/quic/core/frames/quic_handshake_done_frame.h" +#include "quiche/quic/core/frames/quic_immediate_ack_frame.h" #include "quiche/quic/core/frames/quic_max_streams_frame.h" #include "quiche/quic/core/frames/quic_message_frame.h" #include "quiche/quic/core/frames/quic_mtu_discovery_frame.h" @@ -65,6 +66,7 @@ struct QUICHE_EXPORT QuicFrame { explicit QuicFrame(QuicStopSendingFrame frame); explicit QuicFrame(QuicPathChallengeFrame frame); explicit QuicFrame(QuicPathResponseFrame frame); + explicit QuicFrame(QuicImmediateAckFrame immediate_ack_frame); explicit QuicFrame(QuicAckFrame* frame); explicit QuicFrame(QuicRstStreamFrame* frame); @@ -99,6 +101,7 @@ struct QUICHE_EXPORT QuicFrame { QuicStopSendingFrame stop_sending_frame; QuicPathChallengeFrame path_challenge_frame; QuicPathResponseFrame path_response_frame; + QuicImmediateAckFrame immediate_ack_frame; // Out of line frames. struct { diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/frames/quic_immediate_ack_frame.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/frames/quic_immediate_ack_frame.cc new file mode 100644 index 0000000000..bd107f8b5d --- /dev/null +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/frames/quic_immediate_ack_frame.cc @@ -0,0 +1,23 @@ +// Copyright (c) 2025 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "quiche/quic/core/frames/quic_immediate_ack_frame.h" + +#include + +#include "quiche/quic/core/frames/quic_inlined_frame.h" +#include "quiche/quic/core/quic_types.h" + +namespace quic { + +QuicImmediateAckFrame::QuicImmediateAckFrame() + : QuicInlinedFrame(IMMEDIATE_ACK_FRAME) {} + +std::ostream& operator<<(std::ostream& os, + const QuicImmediateAckFrame& /*immediate_ack_frame*/) { + os << "{ }\n"; + return os; +} + +} // namespace quic diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/frames/quic_immediate_ack_frame.h b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/frames/quic_immediate_ack_frame.h new file mode 100644 index 0000000000..0ae26049b3 --- /dev/null +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/frames/quic_immediate_ack_frame.h @@ -0,0 +1,30 @@ +// Copyright (c) 2025 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef QUICHE_QUIC_CORE_FRAMES_QUIC_IMMEDIATE_ACK_FRAME_H_ +#define QUICHE_QUIC_CORE_FRAMES_QUIC_IMMEDIATE_ACK_FRAME_H_ + +#include + +#include "quiche/quic/core/frames/quic_inlined_frame.h" +#include "quiche/quic/core/quic_types.h" +#include "quiche/common/platform/api/quiche_export.h" + +namespace quic { + +// A frame that allows the sender to request an immediate ack from the receiver. +// Not a retransmittable frame. +struct QUICHE_EXPORT QuicImmediateAckFrame + : QuicInlinedFrame { + QuicImmediateAckFrame(); + + friend QUICHE_EXPORT std::ostream& operator<<( + std::ostream& os, const QuicImmediateAckFrame& immediate_ack_frame); + + QuicFrameType type; +}; + +} // namespace quic + +#endif // QUICHE_QUIC_CORE_FRAMES_QUIC_IMMEDIATE_ACK_FRAME_H_ diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/qpack/qpack_blocking_manager.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/qpack/qpack_blocking_manager.cc deleted file mode 100644 index 73589c827d..0000000000 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/qpack/qpack_blocking_manager.cc +++ /dev/null @@ -1,204 +0,0 @@ -// Copyright (c) 2019 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "quiche/quic/core/qpack/qpack_blocking_manager.h" - -#include -#include - -#include "quiche/quic/platform/api/quic_flag_utils.h" -#include "quiche/quic/platform/api/quic_flags.h" - -namespace quic { - -QpackBlockingManager::QpackBlockingManager() : known_received_count_(0) {} - -bool QpackBlockingManager::OnHeaderAcknowledgement(QuicStreamId stream_id) { - auto it = header_blocks_.find(stream_id); - if (it == header_blocks_.end()) { - return false; - } - - QUICHE_DCHECK(!it->second.empty()); - - const HeaderBlock& header_block = it->second.front(); - QUICHE_DCHECK(!header_block.indices.empty()); - - if (known_received_count_ < header_block.required_insert_count) { - known_received_count_ = header_block.required_insert_count; - if (optimize_qpack_blocking_manager_) { - OnKnownReceivedCountIncreased(); - } - } - - DecreaseReferenceCounts(header_block.indices); - - it->second.pop_front(); - if (it->second.empty()) { - header_blocks_.erase(it); - } - - return true; -} - -void QpackBlockingManager::OnStreamCancellation(QuicStreamId stream_id) { - auto it = header_blocks_.find(stream_id); - if (it == header_blocks_.end()) { - return; - } - - for (const HeaderBlock& header_block : it->second) { - DecreaseReferenceCounts(header_block.indices); - } - - header_blocks_.erase(it); - if (optimize_qpack_blocking_manager_) { - QUIC_RELOADABLE_FLAG_COUNT_N(quic_optimize_qpack_blocking_manager, 1, 5); - blocked_streams_.erase(stream_id); - } -} - -bool QpackBlockingManager::OnInsertCountIncrement(uint64_t increment) { - if (increment > - std::numeric_limits::max() - known_received_count_) { - return false; - } - - known_received_count_ += increment; - if (optimize_qpack_blocking_manager_) { - OnKnownReceivedCountIncreased(); - } - return true; -} - -void QpackBlockingManager::OnHeaderBlockSent(QuicStreamId stream_id, - IndexSet indices, - uint64_t required_insert_count) { - QUICHE_DCHECK(!indices.empty()); - - IncreaseReferenceCounts(indices); - header_blocks_[stream_id].push_back( - {std::move(indices), required_insert_count}); - if (optimize_qpack_blocking_manager_ && - required_insert_count > known_received_count_) { - auto it = blocked_streams_.find(stream_id); - if (it != blocked_streams_.end()) { - QUIC_RELOADABLE_FLAG_COUNT_N(quic_optimize_qpack_blocking_manager, 2, 5); - it->second = std::max(it->second, required_insert_count); - } else { - QUIC_RELOADABLE_FLAG_COUNT_N(quic_optimize_qpack_blocking_manager, 3, 5); - blocked_streams_[stream_id] = required_insert_count; - } - } -} - -bool QpackBlockingManager::blocking_allowed_on_stream( - QuicStreamId stream_id, uint64_t maximum_blocked_streams) const { - if (optimize_qpack_blocking_manager_) { - // Sending blocked reference is allowed if: - // 1) Stream |stream_id| is already blocked, or - // 2) The number of blocked streams is less than the limit. - QUIC_RELOADABLE_FLAG_COUNT_N(quic_optimize_qpack_blocking_manager, 4, 5); - return blocked_streams_.contains(stream_id) || - blocked_streams_.size() < maximum_blocked_streams; - } - // This should be the most common case: the limit is larger than the number of - // streams that have unacknowledged header blocks (regardless of whether they - // are blocked or not) plus one for stream |stream_id|. - if (header_blocks_.size() + 1 <= maximum_blocked_streams) { - return true; - } - - // This should be another common case: no blocked stream allowed. - if (maximum_blocked_streams == 0) { - return false; - } - - uint64_t blocked_stream_count = 0; - for (const auto& header_blocks_for_stream : header_blocks_) { - for (const HeaderBlock& header_block : header_blocks_for_stream.second) { - if (header_block.required_insert_count > known_received_count_) { - if (header_blocks_for_stream.first == stream_id) { - // Sending blocking references is allowed if stream |stream_id| is - // already blocked. - return true; - } - ++blocked_stream_count; - // If stream |stream_id| is already blocked, then it is not counted yet, - // therefore the number of blocked streams is at least - // |blocked_stream_count + 1|, which cannot be more than - // |maximum_blocked_streams| by API contract. - // If stream |stream_id| is not blocked, then blocking will increase the - // blocked stream count to at least |blocked_stream_count + 1|. If that - // is larger than |maximum_blocked_streams|, then blocking is not - // allowed on stream |stream_id|. - if (blocked_stream_count + 1 > maximum_blocked_streams) { - return false; - } - break; - } - } - } - - // Stream |stream_id| is not blocked. - // If there are no blocked streams, then - // |blocked_stream_count + 1 <= maximum_blocked_streams| because - // |maximum_blocked_streams| is larger than zero. - // If there are are blocked streams, then - // |blocked_stream_count + 1 <= maximum_blocked_streams| otherwise the method - // would have returned false when |blocked_stream_count| was incremented. - // Therefore blocking on |stream_id| is allowed. - return true; -} - -uint64_t QpackBlockingManager::smallest_blocking_index() const { - return entry_reference_counts_.empty() - ? std::numeric_limits::max() - : entry_reference_counts_.begin()->first; -} - -// static -uint64_t QpackBlockingManager::RequiredInsertCount(const IndexSet& indices) { - return *indices.rbegin() + 1; -} - -void QpackBlockingManager::IncreaseReferenceCounts(const IndexSet& indices) { - for (const uint64_t index : indices) { - auto it = entry_reference_counts_.lower_bound(index); - if (it != entry_reference_counts_.end() && it->first == index) { - ++it->second; - } else { - entry_reference_counts_.insert(it, {index, 1}); - } - } -} - -void QpackBlockingManager::DecreaseReferenceCounts(const IndexSet& indices) { - for (const uint64_t index : indices) { - auto it = entry_reference_counts_.find(index); - QUICHE_DCHECK(it != entry_reference_counts_.end()); - QUICHE_DCHECK_NE(0u, it->second); - - if (it->second == 1) { - entry_reference_counts_.erase(it); - } else { - --it->second; - } - } -} - -void QpackBlockingManager::OnKnownReceivedCountIncreased() { - QUICHE_DCHECK(optimize_qpack_blocking_manager_); - for (auto blocked_it = blocked_streams_.begin(); - blocked_it != blocked_streams_.end();) { - if (blocked_it->second > known_received_count_) { - ++blocked_it; - continue; - } - QUIC_RELOADABLE_FLAG_COUNT_N(quic_optimize_qpack_blocking_manager, 5, 5); - blocked_streams_.erase(blocked_it++); - } -} - -} // namespace quic diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/qpack/qpack_blocking_manager.h b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/qpack/qpack_blocking_manager.h deleted file mode 100644 index a8d0c35939..0000000000 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/qpack/qpack_blocking_manager.h +++ /dev/null @@ -1,117 +0,0 @@ -// Copyright (c) 2019 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef QUICHE_QUIC_CORE_QPACK_QPACK_BLOCKING_MANAGER_H_ -#define QUICHE_QUIC_CORE_QPACK_QPACK_BLOCKING_MANAGER_H_ - -#include -#include -#include - -#include "absl/container/btree_map.h" -#include "absl/container/btree_set.h" -#include "absl/container/flat_hash_map.h" -#include "quiche/quic/core/quic_types.h" -#include "quiche/quic/platform/api/quic_export.h" - -namespace quic { - -namespace test { - -class QpackBlockingManagerPeer; - -} // namespace test - -// Class to keep track of blocked streams and blocking dynamic table entries: -// https://rfc-editor.org/rfc/rfc9204.html#section-2.2.1. -// https://rfc-editor.org/rfc/rfc9204.html#section-2.1.2 -class QUICHE_EXPORT QpackBlockingManager { - public: - using IndexSet = absl::btree_multiset; - - QpackBlockingManager(); - - // Called when a Header Acknowledgement instruction is received on the decoder - // stream. Returns false if there are no outstanding header blocks to be - // acknowledged on |stream_id|. - bool OnHeaderAcknowledgement(QuicStreamId stream_id); - - // Called when a Stream Cancellation instruction is received on the decoder - // stream. - void OnStreamCancellation(QuicStreamId stream_id); - - // Called when an Insert Count Increment instruction is received on the - // decoder stream. Returns true if Known Received Count is successfully - // updated. Returns false on overflow. - bool OnInsertCountIncrement(uint64_t increment); - - // Called when sending a header block containing references to dynamic table - // entries with |indices|. |indices| must not be empty. - void OnHeaderBlockSent(QuicStreamId stream_id, IndexSet indices, - uint64_t required_insert_count); - - // Returns true if sending blocking references on stream |stream_id| would not - // increase the total number of blocked streams above - // |maximum_blocked_streams|. Note that if |stream_id| is already blocked - // then it is always allowed to send more blocking references on it. - // Behavior is undefined if |maximum_blocked_streams| is smaller than number - // of currently blocked streams. - bool blocking_allowed_on_stream(QuicStreamId stream_id, - uint64_t maximum_blocked_streams) const; - - // Returns the index of the blocking entry with the smallest index, - // or std::numeric_limits::max() if there are no blocking entries. - uint64_t smallest_blocking_index() const; - - // Returns the Known Received Count as defined at - // https://rfc-editor.org/rfc/rfc9204.html#section-2.1.4. - uint64_t known_received_count() const { return known_received_count_; } - - // Required Insert Count for set of indices. - // TODO(fayang): move this method to qpack_encoder once deprecating - // optimize_qpack_blocking_manager flag. - static uint64_t RequiredInsertCount(const IndexSet& indices); - - private: - friend test::QpackBlockingManagerPeer; - - // A stream typically has only one header block, except for the rare cases of - // 1xx responses and trailers. Even if there are multiple header blocks sent - // on a single stream, they might not be blocked at the same time. Use - // std::list instead of quiche::QuicheCircularDeque because it has lower - // memory footprint when holding few elements. - struct HeaderBlock { - const IndexSet indices; - const uint64_t required_insert_count = 0; - }; - using HeaderBlocks = - absl::flat_hash_map>; - - // Increase or decrease the reference count for each index in |indices|. - void IncreaseReferenceCounts(const IndexSet& indices); - void DecreaseReferenceCounts(const IndexSet& indices); - - // Called to cleanup blocked_streams_ when known_received_count is increased. - void OnKnownReceivedCountIncreased(); - - // Multiset of indices in each header block for each stream. - // Must not contain a stream id with an empty queue. - HeaderBlocks header_blocks_; - - // Number of references in |header_blocks_| for each entry index. - absl::btree_map entry_reference_counts_; - - uint64_t known_received_count_; - - // Mapping from blocked streams to their required insert count (> - // known_received_count_). - absl::flat_hash_map blocked_streams_; - - const bool optimize_qpack_blocking_manager_ = - GetQuicReloadableFlag(quic_optimize_qpack_blocking_manager); -}; - -} // namespace quic - -#endif // QUICHE_QUIC_CORE_QPACK_QPACK_BLOCKING_MANAGER_H_ diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/qpack/qpack_blocking_manager_shim.h b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/qpack/qpack_blocking_manager_shim.h deleted file mode 100644 index 6dc3783f88..0000000000 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/qpack/qpack_blocking_manager_shim.h +++ /dev/null @@ -1,174 +0,0 @@ -// Copyright (c) 2024 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef QUICHE_QUIC_CORE_QPACK_QPACK_BLOCKING_MANAGER_SHIM_H_ -#define QUICHE_QUIC_CORE_QPACK_QPACK_BLOCKING_MANAGER_SHIM_H_ - -#include -#include - -#include "absl/types/variant.h" -#include "quiche/quic/core/qpack/new_qpack_blocking_manager.h" -#include "quiche/quic/core/qpack/qpack_blocking_manager.h" -#include "quiche/quic/core/quic_types.h" -#include "quiche/quic/platform/api/quic_flag_utils.h" -#include "quiche/quic/platform/api/quic_flags.h" -#include "quiche/common/platform/api/quiche_export.h" -#include "quiche/common/platform/api/quiche_logging.h" - -namespace quic { - -class QUICHE_EXPORT QpackBlockingManagerShim { - public: - struct IndexSet : absl::variant { - IndexSet() { - if (use_new_qpack_blocking_manager()) { - emplace(); - } else { - emplace(); - } - } - - QpackBlockingManager::IndexSet& old_variant() { - QUICHE_DCHECK(!use_new_qpack_blocking_manager()); - return absl::get(*this); - } - - const QpackBlockingManager::IndexSet& old_variant() const { - QUICHE_DCHECK(!use_new_qpack_blocking_manager()); - return absl::get(*this); - } - - NewQpackBlockingManager::IndexSet& new_variant() { - QUICHE_DCHECK(use_new_qpack_blocking_manager()); - return absl::get(*this); - } - - const NewQpackBlockingManager::IndexSet& new_variant() const { - QUICHE_DCHECK(use_new_qpack_blocking_manager()); - return absl::get(*this); - } - - void insert(uint64_t index) { - if (use_new_qpack_blocking_manager()) { - new_variant().insert(index); - } else { - old_variant().insert(index); - } - } - - bool empty() const { - if (use_new_qpack_blocking_manager()) { - return new_variant().empty(); - } - return old_variant().empty(); - } - }; - - QpackBlockingManagerShim() { - if (use_new_qpack_blocking_manager()) { - manager_.emplace(); - } else { - manager_.emplace(); - } - } - - bool OnHeaderAcknowledgement(QuicStreamId stream_id) { - if (use_new_qpack_blocking_manager()) { - return new_manager().OnHeaderAcknowledgement(stream_id); - } - return old_manager().OnHeaderAcknowledgement(stream_id); - } - - void OnStreamCancellation(QuicStreamId stream_id) { - if (use_new_qpack_blocking_manager()) { - new_manager().OnStreamCancellation(stream_id); - } else { - old_manager().OnStreamCancellation(stream_id); - } - } - - bool OnInsertCountIncrement(uint64_t increment) { - if (use_new_qpack_blocking_manager()) { - return new_manager().OnInsertCountIncrement(increment); - } - return old_manager().OnInsertCountIncrement(increment); - } - - void OnHeaderBlockSent(QuicStreamId stream_id, IndexSet indices, - uint64_t required_insert_count) { - if (use_new_qpack_blocking_manager()) { - new_manager().OnHeaderBlockSent( - stream_id, std::move(indices.new_variant()), required_insert_count); - } else { - old_manager().OnHeaderBlockSent( - stream_id, std::move(indices.old_variant()), required_insert_count); - } - } - - bool blocking_allowed_on_stream(QuicStreamId stream_id, - uint64_t maximum_blocked_streams) const { - if (use_new_qpack_blocking_manager()) { - return new_manager().blocking_allowed_on_stream(stream_id, - maximum_blocked_streams); - } - return old_manager().blocking_allowed_on_stream(stream_id, - maximum_blocked_streams); - } - - uint64_t smallest_blocking_index() const { - if (use_new_qpack_blocking_manager()) { - return new_manager().smallest_blocking_index(); - } - return old_manager().smallest_blocking_index(); - } - - uint64_t known_received_count() const { - if (use_new_qpack_blocking_manager()) { - return new_manager().known_received_count(); - } - return old_manager().known_received_count(); - } - - static uint64_t RequiredInsertCount(const IndexSet& indices) { - if (use_new_qpack_blocking_manager()) { - return NewQpackBlockingManager::RequiredInsertCount( - indices.new_variant()); - } - return QpackBlockingManager::RequiredInsertCount(indices.old_variant()); - } - - private: - static bool use_new_qpack_blocking_manager() { - static bool use_new = []() { - bool value = GetQuicRestartFlag(quic_use_new_qpack_blocking_manager); - if (value) { - QUIC_RESTART_FLAG_COUNT(quic_use_new_qpack_blocking_manager); - } - return value; - }(); - return use_new; - } - - QpackBlockingManager& old_manager() { - return absl::get(manager_); - } - const QpackBlockingManager& old_manager() const { - return absl::get(manager_); - } - - NewQpackBlockingManager& new_manager() { - return absl::get(manager_); - } - const NewQpackBlockingManager& new_manager() const { - return absl::get(manager_); - } - - absl::variant manager_; -}; - -} // namespace quic - -#endif // QUICHE_QUIC_CORE_QPACK_QPACK_BLOCKING_MANAGER_SHIM_H_ diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/qpack/qpack_encoder.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/qpack/qpack_encoder.cc index 59dd991c02..8fb2ce1593 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/qpack/qpack_encoder.cc +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/qpack/qpack_encoder.cc @@ -51,7 +51,7 @@ QpackEncoder::~QpackEncoder() {} // static QpackEncoder::Representation QpackEncoder::EncodeIndexedHeaderField( bool is_static, uint64_t index, - QpackBlockingManagerShim::IndexSet* referred_indices) { + NewQpackBlockingManager::IndexSet* referred_indices) { // Add |index| to |*referred_indices| only if entry is in the dynamic table. if (!is_static) { referred_indices->insert(index); @@ -63,7 +63,7 @@ QpackEncoder::Representation QpackEncoder::EncodeIndexedHeaderField( QpackEncoder::Representation QpackEncoder::EncodeLiteralHeaderFieldWithNameReference( bool is_static, uint64_t index, absl::string_view value, - QpackBlockingManagerShim::IndexSet* referred_indices) { + NewQpackBlockingManager::IndexSet* referred_indices) { // Add |index| to |*referred_indices| only if entry is in the dynamic table. if (!is_static) { referred_indices->insert(index); @@ -80,7 +80,7 @@ QpackEncoder::Representation QpackEncoder::EncodeLiteralHeaderField( QpackEncoder::Representations QpackEncoder::FirstPassEncode( QuicStreamId stream_id, const quiche::HttpHeaderBlock& header_list, - QpackBlockingManagerShim::IndexSet* referred_indices, + NewQpackBlockingManager::IndexSet* referred_indices, QuicByteCount* encoder_stream_sent_byte_count) { // If previous instructions are buffered in |encoder_stream_sender_|, // do not count them towards the current header block. @@ -395,7 +395,7 @@ std::string QpackEncoder::EncodeHeaderList( QuicByteCount* encoder_stream_sent_byte_count) { // Keep track of all dynamic table indices that this header block refers to so // that it can be passed to QpackBlockingManager. - QpackBlockingManagerShim::IndexSet referred_indices; + NewQpackBlockingManager::IndexSet referred_indices; // First pass: encode into |representations|. Representations representations = @@ -405,7 +405,7 @@ std::string QpackEncoder::EncodeHeaderList( const uint64_t required_insert_count = referred_indices.empty() ? 0 - : QpackBlockingManagerShim::RequiredInsertCount(referred_indices); + : NewQpackBlockingManager::RequiredInsertCount(referred_indices); if (!referred_indices.empty()) { blocking_manager_.OnHeaderBlockSent(stream_id, std::move(referred_indices), required_insert_count); diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/qpack/qpack_encoder.h b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/qpack/qpack_encoder.h index afb7a5511c..57d12edb7b 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/qpack/qpack_encoder.h +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/qpack/qpack_encoder.h @@ -11,7 +11,7 @@ #include #include "absl/strings/string_view.h" -#include "quiche/quic/core/qpack/qpack_blocking_manager_shim.h" +#include "quiche/quic/core/qpack/new_qpack_blocking_manager.h" #include "quiche/quic/core/qpack/qpack_decoder_stream_receiver.h" #include "quiche/quic/core/qpack/qpack_encoder_stream_sender.h" #include "quiche/quic/core/qpack/qpack_header_table.h" @@ -115,13 +115,13 @@ class QUICHE_EXPORT QpackEncoder : public QpackDecoderStreamReceiver::Delegate { // and optionally update |*referred_indices|. static Representation EncodeIndexedHeaderField( bool is_static, uint64_t index, - QpackBlockingManagerShim::IndexSet* referred_indices); + NewQpackBlockingManager::IndexSet* referred_indices); // Generate literal header field with name reference representation // and optionally update |*referred_indices|. static Representation EncodeLiteralHeaderFieldWithNameReference( bool is_static, uint64_t index, absl::string_view value, - QpackBlockingManagerShim::IndexSet* referred_indices); + NewQpackBlockingManager::IndexSet* referred_indices); // Generate literal header field representation. static Representation EncodeLiteralHeaderField(absl::string_view name, @@ -140,7 +140,7 @@ class QUICHE_EXPORT QpackEncoder : public QpackDecoderStreamReceiver::Delegate { // absl::string_views pointing to strings owned by |*header_list|. Representations FirstPassEncode( QuicStreamId stream_id, const quiche::HttpHeaderBlock& header_list, - QpackBlockingManagerShim::IndexSet* referred_indices, + NewQpackBlockingManager::IndexSet* referred_indices, QuicByteCount* encoder_stream_sent_byte_count); // Performs second pass of two-pass encoding: serializes representations @@ -156,7 +156,7 @@ class QUICHE_EXPORT QpackEncoder : public QpackDecoderStreamReceiver::Delegate { QpackEncoderStreamSender encoder_stream_sender_; QpackEncoderHeaderTable header_table_; uint64_t maximum_blocked_streams_; - QpackBlockingManagerShim blocking_manager_; + NewQpackBlockingManager blocking_manager_; int header_list_count_; }; diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_buffered_packet_store.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_buffered_packet_store.cc index eaeb19d049..432a21c13a 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_buffered_packet_store.cc +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_buffered_packet_store.cc @@ -332,11 +332,8 @@ void QuicBufferedPacketStore::MaybeAckInitialPacket( initial_ack_frame.packets.Add(sent_packet.received_packet_number); } initial_ack_frame.largest_acked = initial_ack_frame.packets.Max(); - if (GetQuicReloadableFlag(quic_ecn_in_first_ack)) { - QUIC_RELOADABLE_FLAG_COUNT(quic_ecn_in_first_ack); - initial_ack_frame.ecn_counters = - SinglePacketEcnCount(packet_info.packet.ecn_codepoint()); - } + initial_ack_frame.ecn_counters = + SinglePacketEcnCount(packet_info.packet.ecn_codepoint()); if (!creator.AddFrame(QuicFrame(&initial_ack_frame), NOT_RETRANSMISSION)) { QUIC_BUG(quic_dispatcher_add_ack_frame_failed) << "Unable to add ack frame to an empty packet while acking packet " diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_chaos_protector.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_chaos_protector.cc index 829573055b..f7a8bc2f11 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_chaos_protector.cc +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_chaos_protector.cc @@ -24,6 +24,8 @@ #include "quiche/quic/core/quic_stream_frame_data_producer.h" #include "quiche/quic/core/quic_types.h" #include "quiche/quic/platform/api/quic_bug_tracker.h" +#include "quiche/quic/platform/api/quic_flag_utils.h" +#include "quiche/quic/platform/api/quic_flags.h" #include "quiche/common/platform/api/quiche_logging.h" #include "quiche/common/simple_buffer_allocator.h" @@ -228,10 +230,14 @@ std::optional QuicChaosProtectorOld::BuildPacket( QuicChaosProtector::QuicChaosProtector(size_t packet_size, EncryptionLevel level, QuicFramer* framer, QuicRandom* random) - : packet_size_(packet_size), + : avoid_copy_(GetQuicReloadableFlag(quic_chaos_protector_avoid_copy)), + packet_size_(packet_size), level_(level), framer_(framer), random_(random) { + if (avoid_copy_) { + QUIC_RELOADABLE_FLAG_COUNT(quic_chaos_protector_avoid_copy); + } QUICHE_DCHECK_NE(framer_, nullptr); QUICHE_DCHECK_NE(framer_->data_producer(), nullptr); QUICHE_DCHECK_NE(random_, nullptr); @@ -295,11 +301,13 @@ std::optional QuicChaosProtector::BuildDataPacket( << header.packet_number; return std::nullopt; } - if (!CopyCryptoDataToLocalBuffer()) { - QUIC_DVLOG(1) << "Failed to copy crypto data to local buffer for initial " - "packet number " - << header.packet_number; - return std::nullopt; + if (!avoid_copy_) { + if (!CopyCryptoDataToLocalBuffer()) { + QUIC_DVLOG(1) << "Failed to copy crypto data to local buffer for initial " + "packet number " + << header.packet_number; + return std::nullopt; + } } SplitCryptoFrame(); AddPingFrames(); @@ -321,6 +329,10 @@ bool QuicChaosProtector::WriteCryptoData(EncryptionLevel level, QuicStreamOffset offset, QuicByteCount data_length, QuicDataWriter* writer) { + if (avoid_copy_) { + QUIC_BUG(chaos avoid copy WriteCryptoData) << "This should never be called"; + return false; + } if (level != level_) { QUIC_BUG(chaos bad level) << "Unexpected " << level << " != " << level_; return false; @@ -341,6 +353,11 @@ bool QuicChaosProtector::WriteCryptoData(EncryptionLevel level, } bool QuicChaosProtector::CopyCryptoDataToLocalBuffer() { + if (avoid_copy_) { + QUIC_BUG(chaos avoid copy CopyCryptoDataToLocalBuffer) + << "This should never be called"; + return false; + } size_t frame_size = QuicDataWriter::GetVarInt62Len(crypto_buffer_offset_) + QuicDataWriter::GetVarInt62Len(crypto_data_length_) + crypto_data_length_; @@ -480,14 +497,18 @@ void QuicChaosProtector::SpreadPadding() { std::optional QuicChaosProtector::BuildPacket( const QuicPacketHeader& header, char* buffer) { - QuicStreamFrameDataProducer* original_data_producer = - framer_->data_producer(); - framer_->set_data_producer(this); + QuicStreamFrameDataProducer* original_data_producer; + if (!avoid_copy_) { + original_data_producer = framer_->data_producer(); + framer_->set_data_producer(this); + } size_t length = framer_->BuildDataPacket(header, frames_, buffer, packet_size_, level_); - framer_->set_data_producer(original_data_producer); + if (!avoid_copy_) { + framer_->set_data_producer(original_data_producer); + } if (length == 0) { QUIC_DVLOG(1) << "Failed to build data packet for initial packet number " << header.packet_number; diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_chaos_protector.h b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_chaos_protector.h index 5dbb3ad17c..bed2d6f73a 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_chaos_protector.h +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_chaos_protector.h @@ -154,6 +154,7 @@ class QUICHE_EXPORT QuicChaosProtector : public QuicStreamFrameDataProducer { std::optional BuildPacket(const QuicPacketHeader& header, char* buffer); + const bool avoid_copy_; // Latched from quic_chaos_protector_avoid_copy flag. size_t packet_size_; std::unique_ptr crypto_frame_buffer_; const char* crypto_data_buffer_ = nullptr; diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_config.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_config.cc index 23fb83a08c..01073f529a 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_config.cc +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_config.cc @@ -5,6 +5,7 @@ #include "quiche/quic/core/quic_config.h" #include +#include #include #include #include @@ -18,6 +19,7 @@ #include "quiche/quic/core/crypto/crypto_protocol.h" #include "quiche/quic/core/quic_connection_id.h" #include "quiche/quic/core/quic_constants.h" +#include "quiche/quic/core/quic_error_codes.h" #include "quiche/quic/core/quic_socket_address_coder.h" #include "quiche/quic/core/quic_types.h" #include "quiche/quic/core/quic_utils.h" @@ -447,6 +449,7 @@ QuicConfig::QuicConfig() stateless_reset_token_(kSRST, PRESENCE_OPTIONAL), max_ack_delay_ms_(kMAD, PRESENCE_OPTIONAL), min_ack_delay_ms_(0, PRESENCE_OPTIONAL), + min_ack_delay_ms_draft10_(0, PRESENCE_OPTIONAL), ack_delay_exponent_(kADE, PRESENCE_OPTIONAL), max_udp_payload_size_(0, PRESENCE_OPTIONAL), max_datagram_frame_size_(0, PRESENCE_OPTIONAL), @@ -631,12 +634,16 @@ uint32_t QuicConfig::ReceivedMaxAckDelayMs() const { return max_ack_delay_ms_.GetReceivedValue(); } -void QuicConfig::SetMinAckDelayMs(uint32_t min_ack_delay_ms) { - min_ack_delay_ms_.SetSendValue(min_ack_delay_ms); +void QuicConfig::SetMinAckDelayDraft10Ms(uint64_t min_ack_delay_ms) { + min_ack_delay_ms_draft10_.SetSendValue(min_ack_delay_ms); } -uint32_t QuicConfig::GetMinAckDelayToSendMs() const { - return min_ack_delay_ms_.GetSendValue(); +bool QuicConfig::HasMinAckDelayDraft10ToSend() const { + return min_ack_delay_ms_draft10_.HasSendValue(); +} + +uint64_t QuicConfig::GetMinAckDelayDraft10ToSendMs() const { + return min_ack_delay_ms_draft10_.GetSendValue(); } bool QuicConfig::HasReceivedMinAckDelayMs() const { @@ -1226,6 +1233,10 @@ bool QuicConfig::FillTransportParameters(TransportParameters* params) const { params->min_ack_delay_us.set_value(min_ack_delay_ms_.GetSendValue() * kNumMicrosPerMilli); } + if (min_ack_delay_ms_draft10_.HasSendValue()) { + params->min_ack_delay_us_draft10 = + min_ack_delay_ms_draft10_.GetSendValue() * kNumMicrosPerMilli; + } params->ack_delay_exponent.set_value(GetAckDelayExponentToSend()); params->disable_active_migration = connection_migration_disabled_.HasSendValue() && @@ -1381,6 +1392,13 @@ QuicErrorCode QuicConfig::ProcessTransportParameters( ¶ms.preferred_address->stateless_reset_token.front())); } } + if (params.min_ack_delay_us.value() > 0 && + params.min_ack_delay_us_draft10.has_value()) { + *error_details = + "Two versions of MinAckDelay. ACK_FREQUENCY frames are " + "ambiguous."; + return IETF_QUIC_PROTOCOL_VIOLATION; + } if (params.min_ack_delay_us.value() != 0) { if (params.min_ack_delay_us.value() > params.max_ack_delay.value() * kNumMicrosPerMilli) { @@ -1390,6 +1408,15 @@ QuicErrorCode QuicConfig::ProcessTransportParameters( min_ack_delay_ms_.SetReceivedValue(params.min_ack_delay_us.value() / kNumMicrosPerMilli); } + if (params.min_ack_delay_us_draft10.has_value()) { + if (*params.min_ack_delay_us_draft10 > + params.max_ack_delay.value() * kNumMicrosPerMilli) { + *error_details = "MinAckDelay is greater than MaxAckDelay."; + return IETF_QUIC_PROTOCOL_VIOLATION; + } + min_ack_delay_ms_draft10_.SetReceivedValue( + *params.min_ack_delay_us_draft10 / kNumMicrosPerMilli); + } } if (params.disable_active_migration) { diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_config.h b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_config.h index cfa3628246..d12200afca 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_config.h +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_config.h @@ -476,10 +476,11 @@ class QUICHE_EXPORT QuicConfig { uint32_t ReceivedMaxAckDelayMs() const; // Manage the IETF QUIC extension Min Ack Delay transport parameter. - // An endpoint uses min_ack_delay to advsertise its support for + // An endpoint uses min_ack_delay to advertise its support for // AckFrequencyFrame sent by peer. - void SetMinAckDelayMs(uint32_t min_ack_delay_ms); - uint32_t GetMinAckDelayToSendMs() const; + void SetMinAckDelayDraft10Ms(uint64_t min_ack_delay_ms); + bool HasMinAckDelayDraft10ToSend() const; + uint64_t GetMinAckDelayDraft10ToSendMs() const; bool HasReceivedMinAckDelayMs() const; uint32_t ReceivedMinAckDelayMs() const; @@ -670,6 +671,7 @@ class QUICHE_EXPORT QuicConfig { // Minimum ack delay. Used to enable sender control of max_ack_delay. // Uses the min_ack_delay transport parameter in IETF QUIC extension. QuicFixedUint32 min_ack_delay_ms_; + QuicFixedUint62 min_ack_delay_ms_draft10_; // The sent exponent is the exponent that this node uses when serializing an // ACK frame (and the peer should use when deserializing the frame); diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_connection.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_connection.cc index 92a9e512f0..8a9b7852dd 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_connection.cc +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_connection.cc @@ -33,6 +33,8 @@ #include "quiche/quic/core/crypto/crypto_utils.h" #include "quiche/quic/core/crypto/quic_decrypter.h" #include "quiche/quic/core/crypto/quic_encrypter.h" +#include "quiche/quic/core/frames/quic_ack_frequency_frame.h" +#include "quiche/quic/core/frames/quic_immediate_ack_frame.h" #include "quiche/quic/core/frames/quic_reset_stream_at_frame.h" #include "quiche/quic/core/quic_bandwidth.h" #include "quiche/quic/core/quic_config.h" @@ -596,6 +598,16 @@ void QuicConnection::SetFromConfig(const QuicConfig& config) { } } + if (config.HasMinAckDelayDraft10ToSend()) { + if (config.GetMinAckDelayDraft10ToSendMs() <= + config.GetMaxAckDelayToSendMs()) { // MinAckDelay is valid. + set_can_receive_ack_frequency_immediate_ack(true); + } else { + QUIC_BUG(quic_bug_min_ack_delay_too_high) + << "MinAckDelay higher than MaxAckDelay"; + } + } + framer_.set_process_reset_stream_at(config.SupportsReliableStreamReset()); } @@ -1320,8 +1332,17 @@ bool QuicConnection::OnPacketHeader(const QuicPacketHeader& header) { default_path_.validated = true; stats_.address_validated_via_token = true; } - QUICHE_DCHECK(connected_); - return true; + + if (!GetQuicReloadableFlag(quic_on_packet_header_return_connected)) { + QUICHE_DCHECK(connected_); + return true; + } + + // TODO(b/389384603): Remove this when deprecating the flag. + if (!connected_) { + QUIC_CODE_COUNT(quic_connection_closed_on_packet_header); + } + return connected_; } bool QuicConnection::OnStreamFrame(const QuicStreamFrame& frame) { @@ -2101,6 +2122,35 @@ bool QuicConnection::OnAckFrequencyFrame(const QuicAckFrequencyFrame& frame) { return true; } +bool QuicConnection::OnImmediateAckFrame(const QuicImmediateAckFrame& frame) { + QUIC_BUG_IF(quic_bug_immediate_ack_frame_connection_closed, !connected_) + << "Processing IMMEDIATE_ACK frame when connection " + "is closed. Received packet info: " + << last_received_packet_info_; + if (debug_visitor_ != nullptr) { + debug_visitor_->OnImmediateAckFrame(frame); + } + if (!UpdatePacketContent(IMMEDIATE_ACK_FRAME)) { + return false; + } + if (!can_receive_ack_frequency_immediate_ack_) { + QUIC_LOG_EVERY_N_SEC(ERROR, 120) << "Got unexpected ImmediateAck Frame."; + return false; + } + QUIC_RELOADABLE_FLAG_COUNT_N(quic_receive_ack_frequency, 1, 2); + if (last_received_packet_info_.decrypted_level == ENCRYPTION_FORWARD_SECURE) { + uber_received_packet_manager_.OnImmediateAckFrame(); + } else { + QUIC_LOG_EVERY_N_SEC(ERROR, 120) + << "Got ImmediateAckFrame at EncryptionLevel " + << EncryptionLevelToString(last_received_packet_info_.decrypted_level); + return false; + } + should_last_packet_instigate_acks_ = false; + MaybeUpdateAckTimeout(); + return true; +} + bool QuicConnection::OnResetStreamAtFrame(const QuicResetStreamAtFrame& frame) { QUIC_BUG_IF(OnResetStreamAtFrame_connection_closed, !connected_) << "Processing RESET_STREAM_AT frame while the connection is closed. " @@ -4577,10 +4627,7 @@ void QuicConnection::CloseConnection( return; } - if (GetQuicReloadableFlag(quic_avoid_nested_close_connection)) { - QUIC_RELOADABLE_FLAG_COUNT(quic_avoid_nested_close_connection); - in_close_connection_ = true; - } + in_close_connection_ = true; absl::Cleanup cleanup = [this]() { in_close_connection_ = false; }; if (ietf_error != NO_IETF_QUIC_ERROR) { diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_connection.h b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_connection.h index 305d1a9b22..b295e59a20 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_connection.h +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_connection.h @@ -32,6 +32,7 @@ #include "quiche/quic/core/crypto/quic_random.h" #include "quiche/quic/core/crypto/transport_parameters.h" #include "quiche/quic/core/frames/quic_ack_frequency_frame.h" +#include "quiche/quic/core/frames/quic_immediate_ack_frame.h" #include "quiche/quic/core/frames/quic_max_streams_frame.h" #include "quiche/quic/core/frames/quic_new_connection_id_frame.h" #include "quiche/quic/core/frames/quic_reset_stream_at_frame.h" @@ -433,6 +434,9 @@ class QUICHE_EXPORT QuicConnectionDebugVisitor // Called when an AckFrequencyFrame has been parsed. virtual void OnAckFrequencyFrame(const QuicAckFrequencyFrame& /*frame*/) {} + // Called when an ImmediateAckFrame has been parsed. + virtual void OnImmediateAckFrame(const QuicImmediateAckFrame& /*frame*/) {} + // Called when a ResetStreamAtFrame has been parsed. virtual void OnResetStreamAtFrame(const QuicResetStreamAtFrame& /*frame*/) {} @@ -755,6 +759,7 @@ class QUICHE_EXPORT QuicConnection bool OnMessageFrame(const QuicMessageFrame& frame) override; bool OnHandshakeDoneFrame(const QuicHandshakeDoneFrame& frame) override; bool OnAckFrequencyFrame(const QuicAckFrequencyFrame& frame) override; + bool OnImmediateAckFrame(const QuicImmediateAckFrame& frame) override; bool OnResetStreamAtFrame(const QuicResetStreamAtFrame& frame) override; void OnPacketComplete() override; bool IsValidStatelessResetToken( @@ -1318,6 +1323,10 @@ class QUICHE_EXPORT QuicConnection can_receive_ack_frequency_frame_ = true; } + void set_can_receive_ack_frequency_immediate_ack(bool can_receive) { + can_receive_ack_frequency_immediate_ack_ = can_receive; + } + bool is_processing_packet() const { return framer_.is_processing_packet(); } bool HasPendingPathValidation() const; @@ -2481,6 +2490,7 @@ class QUICHE_EXPORT QuicConnection // True if AckFrequencyFrame is supported. bool can_receive_ack_frequency_frame_ = false; + bool can_receive_ack_frequency_immediate_ack_ = false; // Indicate whether coalescing is done. bool coalescing_done_ = false; diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_dispatcher.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_dispatcher.cc index cf9ce47469..a47cb0ff6d 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_dispatcher.cc +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_dispatcher.cc @@ -1037,12 +1037,6 @@ void QuicDispatcher::OnConnectionIdRetired( reference_counted_session_map_.erase(server_connection_id); } -void QuicDispatcher::OnConnectionAddedToTimeWaitList( - QuicConnectionId server_connection_id) { - QUIC_DLOG(INFO) << "Connection " << server_connection_id - << " added to time wait list."; -} - void QuicDispatcher::StatelesslyTerminateConnection( const QuicSocketAddress& self_address, const QuicSocketAddress& peer_address, @@ -1554,6 +1548,12 @@ void QuicDispatcher::MaybeResetPacketsWithNoVersion( void QuicDispatcher::MaybeSendVersionNegotiationPacket( const ReceivedPacketInfo& packet_info) { + if (GetQuicReloadableFlag(quic_no_vn_in_response_to_vn) && + packet_info.form == IETF_QUIC_LONG_HEADER_PACKET && + packet_info.long_packet_type == VERSION_NEGOTIATION) { + QUIC_RELOADABLE_FLAG_COUNT(quic_no_vn_in_response_to_vn); + return; + } if (crypto_config()->validate_chlo_size() && packet_info.packet.length() < kMinPacketSizeForVersionNegotiation) { return; diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_dispatcher.h b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_dispatcher.h index 3214a69215..3a3808760e 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_dispatcher.h +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_dispatcher.h @@ -136,12 +136,6 @@ class QUICHE_EXPORT QuicDispatcher QUICHE_DCHECK(false); } - // QuicTimeWaitListManager::Visitor interface implementation - // Called whenever the time wait list manager adds a new connection to the - // time-wait list. - void OnConnectionAddedToTimeWaitList( - QuicConnectionId server_connection_id) override; - using ReferenceCountedSessionMap = absl::flat_hash_map, QuicConnectionIdHash>; diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_framer.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_framer.cc index 32a54dd5da..a727cada53 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_framer.cc +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_framer.cc @@ -32,11 +32,11 @@ #include "quiche/quic/core/crypto/crypto_protocol.h" #include "quiche/quic/core/crypto/crypto_utils.h" #include "quiche/quic/core/crypto/null_decrypter.h" -#include "quiche/quic/core/crypto/null_encrypter.h" #include "quiche/quic/core/crypto/quic_decrypter.h" #include "quiche/quic/core/crypto/quic_encrypter.h" #include "quiche/quic/core/crypto/quic_random.h" #include "quiche/quic/core/frames/quic_ack_frequency_frame.h" +#include "quiche/quic/core/frames/quic_immediate_ack_frame.h" #include "quiche/quic/core/frames/quic_reset_stream_at_frame.h" #include "quiche/quic/core/quic_connection_id.h" #include "quiche/quic/core/quic_constants.h" @@ -56,7 +56,6 @@ #include "quiche/quic/platform/api/quic_flags.h" #include "quiche/quic/platform/api/quic_ip_address_family.h" #include "quiche/quic/platform/api/quic_logging.h" -#include "quiche/quic/platform/api/quic_stack_trace.h" #include "quiche/common/quiche_text_utils.h" #include "quiche/common/wire_serialization.h" @@ -316,8 +315,8 @@ bool IsValidFullPacketNumber(uint64_t full_packet_number, } bool AppendIetfConnectionIds(bool version_flag, bool use_length_prefix, - QuicConnectionId destination_connection_id, - QuicConnectionId source_connection_id, + const QuicConnectionId& destination_connection_id, + const QuicConnectionId& source_connection_id, QuicDataWriter* writer) { if (!version_flag) { return writer->WriteConnectionId(destination_connection_id); @@ -693,6 +692,9 @@ size_t QuicFramer::GetRetransmittableControlFrameSize( return kQuicFrameTypeSize; case ACK_FREQUENCY_FRAME: return GetAckFrequencyFrameSize(*frame.ack_frequency_frame); + case IMMEDIATE_ACK_FRAME: + // IMMEDIATE_ACK has no payload. + return QuicDataWriter::GetVarInt62Len(IETF_IMMEDIATE_ACK); case RESET_STREAM_AT_FRAME: return GetResetStreamAtFrameSize(*frame.reset_stream_at_frame); case STREAM_FRAME: @@ -1209,6 +1211,9 @@ size_t QuicFramer::AppendIetfFrames(const QuicFrames& frames, return 0; } break; + case IMMEDIATE_ACK_FRAME: + // IMMEDIATE_ACK has no payload. + break; case RESET_STREAM_AT_FRAME: QUIC_BUG_IF(reset_stream_at_appended_while_disabled, !process_reset_stream_at_) @@ -3143,6 +3148,18 @@ bool QuicFramer::ProcessIetfFrameData(QuicDataReader* reader, } break; } + case IETF_IMMEDIATE_ACK: { + // IMMEDIATE_ACK has no payload. + QuicImmediateAckFrame frame; + QUIC_DVLOG(2) << ENDPOINT << "Processing IETF immediate ack frame " + << frame; + if (!visitor_->OnImmediateAckFrame(frame)) { + QUIC_DVLOG(1) << "Visitor asked to stop further processing."; + // Returning true since there was no parsing error. + return true; + } + break; + } case IETF_RESET_STREAM_AT: { if (!process_reset_stream_at_) { set_detailed_error("RESET_STREAM_AT not enabled."); @@ -4992,6 +5009,9 @@ bool QuicFramer::AppendIetfFrameType(const QuicFrame& frame, case ACK_FREQUENCY_FRAME: type_byte = IETF_ACK_FREQUENCY; break; + case IMMEDIATE_ACK_FRAME: + type_byte = IETF_IMMEDIATE_ACK; + break; case RESET_STREAM_AT_FRAME: type_byte = IETF_RESET_STREAM_AT; break; diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_framer.h b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_framer.h index db92e0a524..a941e028a5 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_framer.h +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_framer.h @@ -15,11 +15,11 @@ #include "quiche/quic/core/crypto/quic_decrypter.h" #include "quiche/quic/core/crypto/quic_encrypter.h" #include "quiche/quic/core/crypto/quic_random.h" +#include "quiche/quic/core/frames/quic_immediate_ack_frame.h" #include "quiche/quic/core/frames/quic_reset_stream_at_frame.h" #include "quiche/quic/core/quic_connection_id.h" #include "quiche/quic/core/quic_packets.h" #include "quiche/quic/core/quic_types.h" -#include "quiche/quic/platform/api/quic_export.h" namespace quic { @@ -223,6 +223,9 @@ class QUICHE_EXPORT QuicFramerVisitorInterface { // Called when an AckFrequencyFrame has been parsed. virtual bool OnAckFrequencyFrame(const QuicAckFrequencyFrame& frame) = 0; + // Called when an ImmediateAckFrame has been parsed. + virtual bool OnImmediateAckFrame(const QuicImmediateAckFrame& frame) = 0; + // Called when an ResetStreamAtFrame has been parsed. virtual bool OnResetStreamAtFrame(const QuicResetStreamAtFrame& frame) = 0; diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_packet_creator.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_packet_creator.cc index 5ce90333ab..b2d307687c 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_packet_creator.cc +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_packet_creator.cc @@ -1555,13 +1555,19 @@ size_t QuicPacketCreator::GenerateRemainingCryptoFrames( // The only pending data in the packet is non-retransmittable frames. // I'm assuming here that they won't occupy so much of the packet that a // CRYPTO frame won't fit. - QUIC_BUG_IF(quic_bug_10752_26, !HasSoftMaxPacketLength()) << absl::StrCat( - ENDPOINT, "Failed to ConsumeCryptoData at level ", level, - ", pending_frames: ", GetPendingFramesInfo(), - ", has_soft_max_packet_length: ", HasSoftMaxPacketLength(), - ", max_packet_length: ", max_packet_length_, ", transmission_type: ", - TransmissionTypeToString(next_transmission_type_), - ", packet_number: ", packet_number().ToString()); + QUIC_BUG_IF(GenerateRemainingCryptoFrames_failed_to_consume, + !HasSoftMaxPacketLength()) + << absl::StrCat( + ENDPOINT, "Failed to ConsumeCryptoData at level ", + EncryptionLevelToString(level), + ", write_length: ", write_length, ", offset: ", offset, + ", BytesFree(): ", BytesFree(), + ", pending_frames: ", GetPendingFramesInfo(), + ", has_soft_max_packet_length: ", HasSoftMaxPacketLength(), + ", max_packet_length: ", max_packet_length_, + ", transmission_type: ", + TransmissionTypeToString(next_transmission_type_), + ", packet_number: ", packet_number().ToString()); return 0; } total_bytes_consumed += frame.crypto_frame->data_length; @@ -1976,6 +1982,8 @@ bool QuicPacketCreator::AddFrame(const QuicFrame& frame, frame.type != ACK_FREQUENCY_FRAME)) << ENDPOINT << frame.type << " not allowed at " << packet_.encryption_level; + QUICHE_DCHECK(packet_.encryption_level == ENCRYPTION_FORWARD_SECURE || + frame.type != IMMEDIATE_ACK_FRAME); if (frame.type == STREAM_FRAME) { if (MaybeCoalesceStreamFrame(frame.stream_frame)) { diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_received_packet_manager.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_received_packet_manager.cc index 8d56d51dc6..56c97cb0dd 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_received_packet_manager.cc +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_received_packet_manager.cc @@ -83,6 +83,7 @@ void QuicReceivedPacketManager::RecordPacketReceived( ack_frame_.received_packet_times.clear(); } ack_frame_updated_ = true; + ack_now_ = false; // Whether |packet_number| is received out of order. bool packet_reordered = false; @@ -124,6 +125,13 @@ void QuicReceivedPacketManager::RecordPacketReceived( } } + if (GetQuicReloadableFlag(quic_ack_ce_immediately)) { + if (ecn == ECN_CE && !last_packet_was_ce_marked_) { + QUIC_RELOADABLE_FLAG_COUNT_N(quic_ack_ce_immediately, 1, 2); + changed_to_ce_marked_ = true; + } + last_packet_was_ce_marked_ = ecn == ECN_CE; + } if (ecn != ECN_NOT_ECT) { if (!ack_frame_.ecn_counters.has_value()) { ack_frame_.ecn_counters = QuicEcnCounts(); @@ -282,6 +290,13 @@ void QuicReceivedPacketManager::MaybeUpdateAckTimeout( return; } + if (ack_now_) { + // An IMMEDIATE_ACK frame arrived. Send an ack immediately. + QUIC_RELOADABLE_FLAG_COUNT_N(quic_receive_ack_frequency, 2, 2); + ack_timeout_ = now; + return; + } + if (!ignore_order_ && was_last_packet_missing_ && last_sent_largest_acked_.IsInitialized() && last_received_packet_number < last_sent_largest_acked_) { @@ -291,6 +306,15 @@ void QuicReceivedPacketManager::MaybeUpdateAckTimeout( return; } + if (changed_to_ce_marked_) { + // changed_to_ce_marked_ is always false if quic_ack_ce_immediately is + // false, so there's no need to check the feature flag here. + ack_timeout_ = now; + changed_to_ce_marked_ = false; + QUIC_RELOADABLE_FLAG_COUNT_N(quic_ack_ce_immediately, 2, 2); + return; + } + if (!should_last_packet_instigate_acks) { return; } diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_received_packet_manager.h b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_received_packet_manager.h index 1d24651e2e..d1feccc4a9 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_received_packet_manager.h +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_received_packet_manager.h @@ -61,6 +61,10 @@ class QUICHE_EXPORT QuicReceivedPacketManager { // received after this call. void DontWaitForPacketsBefore(QuicPacketNumber least_unacked); + // An IMMEDIATE_ACK frame arrived, so update the ack_timeout_ to now the next + // time it's set. + void OnImmediateAckFrame() { ack_now_ = true; } + // Called to update ack_timeout_ to the time when an ACK needs to be sent. A // caller can decide whether and when to send an ACK by retrieving // ack_timeout_. If ack_timeout_ is not initialized, no ACK needs to be sent. @@ -206,6 +210,15 @@ class QUICHE_EXPORT QuicReceivedPacketManager { // Whether the most recent packet was missing before it was received. bool was_last_packet_missing_; + // Was the previous received packet CE-marked? + bool last_packet_was_ce_marked_ = false; + // The current packet is CE-marked, and the previous packet was not. This + // condition should trigger an immediate ACK. + bool changed_to_ce_marked_ = false; + // Because of an IMMEDIATE_ACK frame, the next call to MaybeUpdateAckTimeout + // should set the ack timeout to now. + bool ack_now_ = false; + // Last sent largest acked, which gets updated when ACK was successfully sent. QuicPacketNumber last_sent_largest_acked_; diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_sent_packet_manager.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_sent_packet_manager.cc index 7b270f263e..5917ac87ac 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_sent_packet_manager.cc +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_sent_packet_manager.cc @@ -137,10 +137,6 @@ void QuicSentPacketManager::SetFromConfig(const QuicConfig& config) { } // Configure congestion control. - if (perspective == Perspective::IS_CLIENT && - config.HasClientRequestedIndependentOption(kPRGC, perspective)) { - SetSendAlgorithm(kPragueCubic); - } if (config.HasClientRequestedIndependentOption(kTBBR, perspective)) { SetSendAlgorithm(kBBR); } @@ -157,6 +153,13 @@ void QuicSentPacketManager::SetFromConfig(const QuicConfig& config) { config.HasClientRequestedIndependentOption(kQBIC, perspective))) { SetSendAlgorithm(kCubicBytes); } + if (perspective == Perspective::IS_CLIENT) { + if (config.HasClientRequestedIndependentOption(kPRGC, perspective)) { + SetSendAlgorithm(kPragueCubic); + } else if (config.HasClientRequestedIndependentOption(kCQBC, perspective)) { + SetSendAlgorithm(kCubicBytes); + } + } // Initial window. if (config.HasClientRequestedIndependentOption(kIW03, perspective)) { diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_session.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_session.cc index a804c479a7..6bfff8e38d 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_session.cc +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_session.cc @@ -23,6 +23,7 @@ #include "quiche/quic/core/frames/quic_window_update_frame.h" #include "quiche/quic/core/quic_connection.h" #include "quiche/quic/core/quic_connection_context.h" +#include "quiche/quic/core/quic_constants.h" #include "quiche/quic/core/quic_error_codes.h" #include "quiche/quic/core/quic_flow_controller.h" #include "quiche/quic/core/quic_stream.h" @@ -178,15 +179,11 @@ void QuicSession::Initialize() { } else if (config_.HasClientSentConnectionOption(kCHP2, perspective_)) { config_.SetDiscardLengthToSend(kDefaultMaxPacketSize * 2); } + } else if (GetQuicReloadableFlag(quic_receive_ack_frequency) && + connection_->version().HasIetfQuicFrames()) { + config_.SetMinAckDelayDraft10Ms(kDefaultMinAckDelayTimeMs); } connection_->SetFromConfig(config_); - if (perspective_ == Perspective::IS_CLIENT) { - if (config_.HasClientRequestedIndependentOption(kAFFE, perspective_) && - version().HasIetfQuicFrames()) { - connection_->set_can_receive_ack_frequency_frame(); - config_.SetMinAckDelayMs(kDefaultMinAckDelayTimeMs); - } - } if (perspective() == Perspective::IS_SERVER && connection_->version().handshake_protocol == PROTOCOL_TLS1_3) { config_.SetStatelessResetTokenToSend(GetStatelessResetToken()); @@ -2333,17 +2330,19 @@ size_t QuicSession::GetNumActiveStreams() const { num_zombie_streams_; } -void QuicSession::MarkConnectionLevelWriteBlocked(QuicStreamId id) { +bool QuicSession::MarkConnectionLevelWriteBlocked(QuicStreamId id) { + bool ok = true; if (GetOrCreateStream(id) == nullptr) { + ok = false; QUIC_BUG(quic_bug_10866_11) << "Marking unknown stream " << id << " blocked."; - QUIC_LOG_FIRST_N(ERROR, 2) << QuicStackTrace(); } QUIC_DVLOG(1) << ENDPOINT << "Adding stream " << id << " to write-blocked list"; write_blocked_streams_->AddStream(id); + return ok; } bool QuicSession::HasDataToWrite() const { diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_session.h b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_session.h index 23537f0c1c..e50e185b12 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_session.h +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_session.h @@ -410,7 +410,9 @@ class QUICHE_EXPORT QuicSession // connection-level flow control but not by its own stream-level flow control. // The stream will be given a chance to write when a connection-level // WINDOW_UPDATE arrives. - virtual void MarkConnectionLevelWriteBlocked(QuicStreamId id); + // TODO(b/235204908) Remove the return value. + // Returns false if an error occurred. + bool MarkConnectionLevelWriteBlocked(QuicStreamId id); // Called to close zombie stream |id|. void MaybeCloseZombieStream(QuicStreamId id); diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_stream_send_buffer.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_stream_send_buffer.cc index 003a0403cd..3acd2cbec1 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_stream_send_buffer.cc +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_stream_send_buffer.cc @@ -50,8 +50,7 @@ bool StreamPendingRetransmission::operator==( QuicStreamSendBuffer::QuicStreamSendBuffer( quiche::QuicheBufferAllocator* allocator) - : current_end_offset_(0), - stream_offset_(0), + : stream_offset_(0), allocator_(allocator), stream_bytes_written_(0), stream_bytes_outstanding_(0), @@ -60,6 +59,8 @@ QuicStreamSendBuffer::QuicStreamSendBuffer( QuicStreamSendBuffer::~QuicStreamSendBuffer() {} void QuicStreamSendBuffer::SaveStreamData(absl::string_view data) { + QUIC_DVLOG(2) << "Save stream data offset " << stream_offset_ << " length " + << data.length(); QUICHE_DCHECK(!data.empty()); // Latch the maximum data slice size. @@ -84,11 +85,6 @@ void QuicStreamSendBuffer::SaveMemSlice(quiche::QuicheMemSlice slice) { return; } size_t length = slice.length(); - // Need to start the offsets at the right interval. - if (interval_deque_.Empty()) { - const QuicStreamOffset end = stream_offset_ + length; - current_end_offset_ = std::max(current_end_offset_, end); - } BufferedSlice bs = BufferedSlice(std::move(slice), stream_offset_); interval_deque_.PushBack(std::move(bs)); stream_offset_ += length; @@ -116,9 +112,6 @@ void QuicStreamSendBuffer::OnStreamDataConsumed(size_t bytes_consumed) { bool QuicStreamSendBuffer::WriteStreamData(QuicStreamOffset offset, QuicByteCount data_length, QuicDataWriter* writer) { - QUIC_BUG_IF(quic_bug_12823_1, current_end_offset_ < offset) - << "Tried to write data out of sequence. last_offset_end:" - << current_end_offset_ << ", offset:" << offset; // The iterator returned from |interval_deque_| will automatically advance // the internal write index for the QuicIntervalDeque. The incrementing is // done in operator++. @@ -139,9 +132,6 @@ bool QuicStreamSendBuffer::WriteStreamData(QuicStreamOffset offset, } offset += copy_length; data_length -= copy_length; - const QuicStreamOffset new_end = - slice_it->offset + slice_it->slice.length(); - current_end_offset_ = std::max(current_end_offset_, new_end); } return data_length == 0; } @@ -149,6 +139,8 @@ bool QuicStreamSendBuffer::WriteStreamData(QuicStreamOffset offset, bool QuicStreamSendBuffer::OnStreamDataAcked( QuicStreamOffset offset, QuicByteCount data_length, QuicByteCount* newly_acked_length) { + QUIC_DVLOG(2) << "Marking data acked at offset " << offset << " length " + << data_length; *newly_acked_length = 0; if (data_length == 0) { return true; @@ -273,12 +265,6 @@ bool QuicStreamSendBuffer::FreeMemSlices(QuicStreamOffset start, void QuicStreamSendBuffer::CleanUpBufferedSlices() { while (!interval_deque_.Empty() && interval_deque_.DataBegin()->slice.empty()) { - QUIC_BUG_IF(quic_bug_12823_2, - interval_deque_.DataBegin()->offset > current_end_offset_) - << "Fail to pop front from interval_deque_. Front element contained " - "a slice whose data has not all be written. Front offset " - << interval_deque_.DataBegin()->offset << " length " - << interval_deque_.DataBegin()->slice.length(); interval_deque_.PopFront(); } } diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_stream_send_buffer.h b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_stream_send_buffer.h index b892cdf391..d87272ac2a 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_stream_send_buffer.h +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_stream_send_buffer.h @@ -60,7 +60,10 @@ struct QUICHE_EXPORT StreamPendingRetransmission { // QuicStreamSendBuffer contains a list of QuicStreamDataSlices. New data slices // are added to the tail of the list. Data slices are removed from the head of // the list when they get fully acked. Stream data can be retrieved and acked -// across slice boundaries. +// across slice boundaries. Stream data must be saved before being written, and +// it cannot be written after it is marked as acked. Stream data can be written +// out-of-order within those bounds, but note that in-order wites are O(1) +// whereas out-of-order writes are O(log(n)), see QuicIntervalDeque for details. class QUICHE_EXPORT QuicStreamSendBuffer { public: explicit QuicStreamSendBuffer(quiche::QuicheBufferAllocator* allocator); @@ -80,7 +83,10 @@ class QUICHE_EXPORT QuicStreamSendBuffer { // Called when |bytes_consumed| bytes has been consumed by the stream. void OnStreamDataConsumed(size_t bytes_consumed); - // Write |data_length| of data starts at |offset|. + // Write |data_length| of data starts at |offset|. Returns true if all data + // was successfully written. Returns false if the writer fails to write, or if + // the data was already marked as acked, or if the data was never saved in the + // first place. bool WriteStreamData(QuicStreamOffset offset, QuicByteCount data_length, QuicDataWriter* writer); @@ -136,12 +142,9 @@ class QUICHE_EXPORT QuicStreamSendBuffer { // not exist or has been acked. bool FreeMemSlices(QuicStreamOffset start, QuicStreamOffset end); - // Cleanup empty slices in order from buffered_slices_. + // Cleanup acked data from the start of the interval. void CleanUpBufferedSlices(); - // |current_end_offset_| stores the end offset of the current slice to ensure - // data isn't being written out of order when using the |interval_deque_|. - QuicStreamOffset current_end_offset_; QuicIntervalDeque interval_deque_; // Offset of next inserted byte. diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_tag.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_tag.cc index 73d13d8a38..27a71e495b 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_tag.cc +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_tag.cc @@ -5,6 +5,8 @@ #include "quiche/quic/core/quic_tag.h" #include +#include +#include #include #include @@ -12,8 +14,7 @@ #include "absl/strings/ascii.h" #include "absl/strings/escaping.h" #include "absl/strings/str_split.h" -#include "quiche/quic/platform/api/quic_flag_utils.h" -#include "quiche/quic/platform/api/quic_flags.h" +#include "absl/strings/string_view.h" #include "quiche/common/quiche_text_utils.h" namespace quic { @@ -80,8 +81,8 @@ bool ContainsQuicTag(const QuicTagVector& tag_vector, QuicTag tag) { QuicTag ParseQuicTag(absl::string_view tag_string) { quiche::QuicheTextUtils::RemoveLeadingAndTrailingWhitespace(&tag_string); std::string tag_bytes; - if (tag_string.length() == 8) { - tag_bytes = absl::HexStringToBytes(tag_string); + if (tag_string.length() == 8 && + absl::HexStringToBytes(tag_string, &tag_bytes)) { tag_string = tag_bytes; } QuicTag tag = 0; diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_tag.h b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_tag.h index f130a575d8..2736aac8a7 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_tag.h +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_tag.h @@ -50,9 +50,13 @@ QUICHE_EXPORT bool FindMutualQuicTag(const QuicTagVector& our_tags, QUICHE_EXPORT std::string QuicTagToString(QuicTag tag); // Utility function that converts a string of the form "ABCD" to its -// corresponding QuicTag. Note that tags that are less than four characters -// long are right-padded with zeroes. Tags that contain non-ASCII characters -// are represented as 8-character-long hexadecimal strings. +// corresponding QuicTag. Note that `tag_string` will have leading and trailing +// whitespace removed and will then be converted to a QuicTag as follows: +// - If the tag string is 8 bytes in length and all bytes are valid hexidecimal +// ASCII characters, then the returned QuicTag will have a corresponding +// hexidecimal value. +// - Otherwise, the QuicTag will be produced using the first four bytes of the +// tag string, right-padding with zeroes if there are fewer than four bytes. QUICHE_EXPORT QuicTag ParseQuicTag(absl::string_view tag_string); // Utility function that converts a string of the form "ABCD,EFGH" to a vector diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_time_wait_list_manager.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_time_wait_list_manager.cc index 5b31654b7e..c20412c313 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_time_wait_list_manager.cc +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_time_wait_list_manager.cc @@ -119,7 +119,7 @@ void QuicTimeWaitListManager::RemoveConnectionDataFromMap( void QuicTimeWaitListManager::AddConnectionIdToTimeWait( TimeWaitAction action, TimeWaitConnectionInfo info) { QUICHE_DCHECK(!info.active_connection_ids.empty()); - const QuicConnectionId& canonical_connection_id = + const QuicConnectionId canonical_connection_id = info.active_connection_ids.front(); QUICHE_DCHECK(action != SEND_TERMINATION_PACKETS || !info.termination_packets.empty()); @@ -135,11 +135,6 @@ void QuicTimeWaitListManager::AddConnectionIdToTimeWait( int64_t max_connections = GetQuicFlag(quic_time_wait_list_max_connections); QUICHE_DCHECK(connection_id_map_.empty() || num_connections() < static_cast(max_connections)); - if (new_connection_id) { - for (const auto& cid : info.active_connection_ids) { - visitor_->OnConnectionAddedToTimeWaitList(cid); - } - } AddConnectionIdDataToMap(canonical_connection_id, num_packets, action, std::move(info)); } diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_time_wait_list_manager.h b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_time_wait_list_manager.h index 377346ede6..87371ce69a 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_time_wait_list_manager.h +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_time_wait_list_manager.h @@ -82,10 +82,6 @@ class QUICHE_EXPORT QuicTimeWaitListManager class QUICHE_EXPORT Visitor : public QuicSession::Visitor { public: - // Called after the given connection is added to the time-wait list. - virtual void OnConnectionAddedToTimeWaitList( - QuicConnectionId connection_id) = 0; - void OnPathDegrading() override {} }; diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_trace_visitor.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_trace_visitor.cc index 2b049ca1cb..4644e0d79a 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_trace_visitor.cc +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_trace_visitor.cc @@ -78,6 +78,7 @@ void QuicTraceVisitor::OnPacketSent( case MTU_DISCOVERY_FRAME: case STOP_WAITING_FRAME: case ACK_FRAME: + case IMMEDIATE_ACK_FRAME: QUIC_BUG(quic_bug_12732_1) << "Frames of type are not retransmittable and are not supposed " "to be in retransmittable_frames"; @@ -227,6 +228,7 @@ void QuicTraceVisitor::PopulateFrameInfo(const QuicFrame& frame, case CRYPTO_FRAME: case NEW_TOKEN_FRAME: case ACK_FREQUENCY_FRAME: + case IMMEDIATE_ACK_FRAME: case RESET_STREAM_AT_FRAME: break; diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_types.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_types.cc index fff80a9781..aa69d02a08 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_types.cc +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_types.cc @@ -160,6 +160,7 @@ std::string QuicFrameTypeToString(QuicFrameType t) { RETURN_STRING_LITERAL(NEW_TOKEN_FRAME) RETURN_STRING_LITERAL(RETIRE_CONNECTION_ID_FRAME) RETURN_STRING_LITERAL(ACK_FREQUENCY_FRAME) + RETURN_STRING_LITERAL(IMMEDIATE_ACK_FRAME) RETURN_STRING_LITERAL(RESET_STREAM_AT_FRAME) RETURN_STRING_LITERAL(NUM_FRAME_TYPES) } diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_types.h b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_types.h index 2ffd82480a..f0649bd846 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_types.h +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_types.h @@ -275,6 +275,7 @@ enum QuicFrameType : uint8_t { NEW_TOKEN_FRAME, RETIRE_CONNECTION_ID_FRAME, ACK_FREQUENCY_FRAME, + IMMEDIATE_ACK_FRAME, RESET_STREAM_AT_FRAME, NUM_FRAME_TYPES @@ -332,6 +333,8 @@ enum QuicIetfFrameType : uint64_t { IETF_APPLICATION_CLOSE = 0x1d, IETF_HANDSHAKE_DONE = 0x1e, + // See draft-ietf-quic-ack-frequency. + IETF_IMMEDIATE_ACK = 0x1f, // The MESSAGE frame type has not yet been fully standardized. // QUIC versions starting with 46 and before 99 use 0x20-0x21. diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_udp_socket_posix.inc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_udp_socket_posix.inc index c368f2b7d7..88bdf8648f 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_udp_socket_posix.inc +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_udp_socket_posix.inc @@ -235,7 +235,7 @@ bool QuicUdpSocketApi::SetupSocket(QuicUdpSocketFd fd, int address_family, << "IPv6 socket"; return false; } -#if defined(__linux__) +#if defined(__linux__) && !defined(__ANDROID__) if (GetQuicRestartFlag(quic_support_flow_label2)) { QUIC_RESTART_FLAG_COUNT_N(quic_support_flow_label2, 5, 6); if (setsockopt(fd, SOL_IPV6, IPV6_FLOWINFO, &set, sizeof(set)) != 0) { diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_unacked_packet_map.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_unacked_packet_map.cc index d3e3ed35cd..6192e00e95 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_unacked_packet_map.cc +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_unacked_packet_map.cc @@ -57,6 +57,7 @@ enum QuicFrameTypeBitfield : uint32_t { kRetireConnectionIdFrameBitfield = 1 << 21, kAckFrequencyFrameBitfield = 1 << 22, kResetStreamAtFrameBitfield = 1 << 23, + kImmediateAckFrameBitfield = 1 << 24, }; QuicFrameTypeBitfield GetFrameTypeBitfield(QuicFrameType type) { @@ -107,6 +108,8 @@ QuicFrameTypeBitfield GetFrameTypeBitfield(QuicFrameType type) { return kRetireConnectionIdFrameBitfield; case ACK_FREQUENCY_FRAME: return kAckFrequencyFrameBitfield; + case IMMEDIATE_ACK_FRAME: + return kImmediateAckFrameBitfield; case RESET_STREAM_AT_FRAME: return kResetStreamAtFrameBitfield; case NUM_FRAME_TYPES: diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_utils.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_utils.cc index e2663f3d11..1bdf108340 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_utils.cc +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_utils.cc @@ -248,6 +248,7 @@ bool QuicUtils::IsRetransmittableFrame(QuicFrameType type) { case MTU_DISCOVERY_FRAME: case PATH_CHALLENGE_FRAME: case PATH_RESPONSE_FRAME: + case IMMEDIATE_ACK_FRAME: return false; default: return true; @@ -508,13 +509,14 @@ bool QuicUtils::IsConnectionIdLengthValidForVersion( // static bool QuicUtils::IsConnectionIdValidForVersion( - QuicConnectionId connection_id, QuicTransportVersion transport_version) { + const QuicConnectionId& connection_id, + QuicTransportVersion transport_version) { return IsConnectionIdLengthValidForVersion(connection_id.length(), transport_version); } StatelessResetToken QuicUtils::GenerateStatelessResetToken( - QuicConnectionId connection_id) { + const QuicConnectionId& connection_id) { static_assert(sizeof(absl::uint128) == sizeof(StatelessResetToken), "bad size"); static_assert(alignof(absl::uint128) >= alignof(StatelessResetToken), diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_utils.h b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_utils.h index 3a74856f72..9d173e775e 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_utils.h +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/quic_utils.h @@ -183,7 +183,8 @@ class QUICHE_EXPORT QuicUtils { // Returns true if the connection ID is valid for this QUIC version. static bool IsConnectionIdValidForVersion( - QuicConnectionId connection_id, QuicTransportVersion transport_version); + const QuicConnectionId& connection_id, + QuicTransportVersion transport_version); // Returns a connection ID suitable for QUIC use-cases that do not need the // connection ID for multiplexing. If the version allows variable lengths, @@ -192,7 +193,7 @@ class QUICHE_EXPORT QuicUtils { // Generates a 128bit stateless reset token based on a connection ID. static StatelessResetToken GenerateStatelessResetToken( - QuicConnectionId connection_id); + const QuicConnectionId& connection_id); // Determines packet number space from |encryption_level|. static PacketNumberSpace GetPacketNumberSpace( diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/tls_chlo_extractor.h b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/tls_chlo_extractor.h index 297063c487..f24da4587e 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/tls_chlo_extractor.h +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/tls_chlo_extractor.h @@ -13,12 +13,12 @@ #include "absl/types/span.h" #include "openssl/ssl.h" #include "quiche/quic/core/frames/quic_ack_frequency_frame.h" +#include "quiche/quic/core/frames/quic_immediate_ack_frame.h" #include "quiche/quic/core/frames/quic_reset_stream_at_frame.h" #include "quiche/quic/core/quic_framer.h" #include "quiche/quic/core/quic_packets.h" #include "quiche/quic/core/quic_stream_sequencer.h" #include "quiche/quic/core/quic_types.h" -#include "quiche/quic/platform/api/quic_export.h" namespace quic { @@ -184,6 +184,9 @@ class QUICHE_EXPORT TlsChloExtractor bool OnAckFrequencyFrame(const QuicAckFrequencyFrame& /*frame*/) override { return true; } + bool OnImmediateAckFrame(const QuicImmediateAckFrame& /*frame*/) override { + return true; + } bool OnResetStreamAtFrame(const QuicResetStreamAtFrame& /*frame*/) override { return true; } diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/tls_server_handshaker.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/tls_server_handshaker.cc index 20a3f7514b..57784be247 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/tls_server_handshaker.cc +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/tls_server_handshaker.cc @@ -787,9 +787,7 @@ int TlsServerHandshaker::SessionTicketSeal(uint8_t* out, size_t* out_len, QUICHE_DCHECK(proof_source_->GetTicketCrypter()); std::vector ticket = proof_source_->GetTicketCrypter()->Encrypt(in, ticket_encryption_key_); - if (GetQuicReloadableFlag( - quic_send_placeholder_ticket_when_encrypt_ticket_fails) && - ticket.empty()) { + if (ticket.empty()) { QUIC_CODE_COUNT(quic_tls_server_handshaker_send_placeholder_ticket); const absl::string_view kTicketFailurePlaceholder = "TICKET FAILURE"; const absl::string_view kTicketWithSizeLimit = @@ -974,8 +972,6 @@ ssl_select_cert_result_t TlsServerHandshaker::EarlySelectCertCallback( } else { QUIC_CODE_COUNT(quic_tls_server_hostname_same); } - } else { - QUIC_LOG(INFO) << "No hostname indicated in SNI"; } std::string error_details; diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/uber_received_packet_manager.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/uber_received_packet_manager.cc index b82ab9cf10..2f64754577 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/uber_received_packet_manager.cc +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/uber_received_packet_manager.cc @@ -72,6 +72,16 @@ void UberReceivedPacketManager::DontWaitForPacketsBefore( .DontWaitForPacketsBefore(least_unacked); } +void UberReceivedPacketManager::OnImmediateAckFrame() { + if (!supports_multiple_packet_number_spaces_) { + QUIC_BUG(quic_bug_10495_4) + << "Received ImmediateAckFrame when multiple packet number spaces " + "is not supported"; + return; + } + received_packet_managers_[APPLICATION_DATA].OnImmediateAckFrame(); +} + void UberReceivedPacketManager::MaybeUpdateAckTimeout( bool should_last_packet_instigate_acks, EncryptionLevel decrypted_packet_level, diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/uber_received_packet_manager.h b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/uber_received_packet_manager.h index 7f4c7ccf6a..4d60ce0c63 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/uber_received_packet_manager.h +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/core/uber_received_packet_manager.h @@ -43,6 +43,9 @@ class QUICHE_EXPORT UberReceivedPacketManager { void DontWaitForPacketsBefore(EncryptionLevel decrypted_packet_level, QuicPacketNumber least_unacked); + // Trigger an immediate ACK. + void OnImmediateAckFrame(); + // Called after header of last received packet has been successfully processed // to update ACK timeout. void MaybeUpdateAckTimeout(bool should_last_packet_instigate_acks, diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/masque/masque_tcp_client_bin.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/masque/masque_tcp_client_bin.cc new file mode 100644 index 0000000000..fc5cad3680 --- /dev/null +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/masque/masque_tcp_client_bin.cc @@ -0,0 +1,431 @@ +// Copyright 2025 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// This binary contains minimal code to send an HTTP/1.1 over TLS over TCP +// request. It will be refactored to allow layering, with the goal of being able +// to use MASQUE over HTTP/2, and CONNECT in our MASQUE code. + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "absl/status/status.h" +#include "absl/status/statusor.h" +#include "absl/strings/match.h" +#include "absl/strings/str_cat.h" +#include "openssl/boringssl/src/include/openssl/base.h" +#include "openssl/boringssl/src/include/openssl/bio.h" +#include "openssl/boringssl/src/include/openssl/err.h" +#include "openssl/boringssl/src/include/openssl/pool.h" +#include "openssl/boringssl/src/include/openssl/ssl.h" +#include "openssl/boringssl/src/include/openssl/stack.h" +#include "quiche/quic/core/connecting_client_socket.h" +#include "quiche/quic/core/crypto/proof_verifier.h" +#include "quiche/quic/core/io/event_loop_socket_factory.h" +#include "quiche/quic/core/io/quic_default_event_loop.h" +#include "quiche/quic/core/io/quic_event_loop.h" +#include "quiche/quic/core/quic_default_clock.h" +#include "quiche/quic/core/quic_time.h" +#include "quiche/quic/core/quic_types.h" +#include "quiche/quic/platform/api/quic_default_proof_providers.h" +#include "quiche/quic/platform/api/quic_socket_address.h" +#include "quiche/quic/tools/fake_proof_verifier.h" +#include "quiche/quic/tools/quic_name_lookup.h" +#include "quiche/quic/tools/quic_url.h" +#include "quiche/common/platform/api/quiche_command_line_flags.h" +#include "quiche/common/platform/api/quiche_logging.h" +#include "quiche/common/platform/api/quiche_mem_slice.h" +#include "quiche/common/platform/api/quiche_system_event_loop.h" +#include "quiche/common/simple_buffer_allocator.h" + +DEFINE_QUICHE_COMMAND_LINE_FLAG( + bool, disable_certificate_verification, false, + "If true, don't verify the server certificate."); + +DEFINE_QUICHE_COMMAND_LINE_FLAG(int, address_family, 0, + "IP address family to use. Must be 0, 4 or 6. " + "Defaults to 0 which means any."); + +namespace quic { + +namespace { + +class MasqueTlsTcpClientHandler : public ConnectingClientSocket::AsyncVisitor { + public: + explicit MasqueTlsTcpClientHandler(QuicEventLoop *event_loop, QuicUrl url, + bool disable_certificate_verification, + int address_family_for_lookup) + : event_loop_(event_loop), + socket_factory_(std::make_unique( + event_loop_, quiche::SimpleBufferAllocator::Get())), + url_(url), + disable_certificate_verification_(disable_certificate_verification), + address_family_for_lookup_(address_family_for_lookup) {} + + ~MasqueTlsTcpClientHandler() override { + if (socket_) { + socket_->Disconnect(); + } + } + + bool Start() { + if (disable_certificate_verification_) { + proof_verifier_ = std::make_unique(); + } else { + proof_verifier_ = CreateDefaultProofVerifier(url_.host()); + } + socket_address_ = tools::LookupAddress( + address_family_for_lookup_, url_.host(), absl::StrCat(url_.port())); + if (!socket_address_.IsInitialized()) { + QUICHE_LOG(ERROR) << "Failed to resolve address for \"" << url_.host() + << "\""; + return false; + } + socket_ = socket_factory_->CreateTcpClientSocket(socket_address_, + /*receive_buffer_size=*/0, + /*send_buffer_size=*/0, + /*async_visitor=*/this); + if (!socket_) { + QUICHE_LOG(ERROR) << "Failed to create TCP socket for " + << socket_address_; + return false; + } + socket_->ConnectAsync(); + return true; + } + + static enum ssl_verify_result_t VerifyCallback(SSL *ssl, uint8_t *out_alert) { + return static_cast(SSL_get_app_data(ssl)) + ->VerifyCertificate(out_alert); + } + + enum ssl_verify_result_t VerifyCertificate(uint8_t *out_alert) { + const STACK_OF(CRYPTO_BUFFER) *cert_chain = + SSL_get0_peer_certificates(ssl_.get()); + if (cert_chain == nullptr) { + QUICHE_LOG(ERROR) << "No certificate chain"; + *out_alert = SSL_AD_INTERNAL_ERROR; + return ssl_verify_invalid; + } + std::vector certs; + for (CRYPTO_BUFFER *cert : cert_chain) { + certs.push_back( + std::string(reinterpret_cast(CRYPTO_BUFFER_data(cert)), + CRYPTO_BUFFER_len(cert))); + } + const uint8_t *ocsp_response_raw; + size_t ocsp_response_len; + SSL_get0_ocsp_response(ssl_.get(), &ocsp_response_raw, &ocsp_response_len); + std::string ocsp_response(reinterpret_cast(ocsp_response_raw), + ocsp_response_len); + const uint8_t *sct_list_raw; + size_t sct_list_len; + SSL_get0_signed_cert_timestamp_list(ssl_.get(), &sct_list_raw, + &sct_list_len); + std::string cert_sct(reinterpret_cast(sct_list_raw), + sct_list_len); + std::string error_details; + std::unique_ptr details; + QuicAsyncStatus verify_status = proof_verifier_->VerifyCertChain( + url_.host(), url_.port(), certs, ocsp_response, cert_sct, + /*context=*/nullptr, &error_details, &details, out_alert, + /*callback=*/nullptr); + if (verify_status != QUIC_SUCCESS) { + // TODO(dschinazi) properly handle QUIC_PENDING. + QUICHE_LOG(ERROR) << "Failed to verify certificate" + << (verify_status == QUIC_PENDING ? " (pending)" : "") + << ": " << error_details; + return ssl_verify_invalid; + } + QUICHE_LOG(INFO) << "Successfully verified certificate"; + return ssl_verify_ok; + } + + // From ConnectingClientSocket::AsyncVisitor. + void ConnectComplete(absl::Status status) override { + if (!status.ok()) { + QUICHE_LOG(ERROR) << "Failed to TCP connect to " << socket_address_ + << ": " << status; + done_ = true; + return; + } + + QUICHE_LOG(INFO) << "TCP connected to " << socket_address_; + + ssl_.reset((SSL_new(MasqueSslCtx()))); + + SSL_set_min_proto_version(ssl_.get(), TLS1_2_VERSION); + SSL_set_max_proto_version(ssl_.get(), TLS1_3_VERSION); + if (SSL_set_app_data(ssl_.get(), this) != 1) { + QUICHE_LOG(FATAL) << "SSL_set_app_data failed"; + return; + } + SSL_set_custom_verify(ssl_.get(), SSL_VERIFY_PEER, &VerifyCallback); + + if (SSL_set_tlsext_host_name(ssl_.get(), url_.host().c_str()) != 1) { + QUICHE_LOG(FATAL) << "SSL_set_tlsext_host_name failed"; + return; + } + + BIO *tls_io = nullptr; + if (BIO_new_bio_pair(&transport_io_, kBioBufferSize, &tls_io, + kBioBufferSize) != 1) { + QUICHE_LOG(FATAL) << "BIO_new_bio_pair failed"; + return; + } + SSL_set_bio(ssl_.get(), tls_io, tls_io); + BIO_free(tls_io); + + int ret = SSL_connect(ssl_.get()); + if (ret != 1) { + int ssl_err = SSL_get_error(ssl_.get(), ret); + if (ssl_err == SSL_ERROR_WANT_READ) { + QUICHE_LOG(INFO) << "SSL_connect will require another read"; + SendToTransport(); + socket_->ReceiveAsync(kBioBufferSize); + return; + } + PrintSSLError("Error while TLS connecting", ssl_err, ret); + done_ = true; + return; + } + QUICHE_LOG(INFO) << "TLS connected"; + + tls_connected_ = true; + MaybeSendRequest(); + socket_->ReceiveAsync(kBioBufferSize); + } + + void ReceiveComplete(absl::StatusOr data) override { + if (!data.ok()) { + QUICHE_LOG(ERROR) << "Failed to receive transport data: " + << data.status(); + done_ = true; + return; + } + if (data->empty()) { + QUICHE_LOG(INFO) << "Transport read closed"; + done_ = true; + return; + } + QUICHE_DVLOG(1) << "Transport received " << data->length() << " bytes"; + int write_ret = BIO_write(transport_io_, data->data(), data->length()); + if (write_ret < 0) { + QUICHE_LOG(ERROR) << "Failed to write data from transport to TLS"; + int ssl_err = SSL_get_error(ssl_.get(), write_ret); + PrintSSLError("Error while writing data from transport to TLS", ssl_err, + write_ret); + done_ = true; + return; + } + if (write_ret != static_cast(data->length())) { + QUICHE_LOG(ERROR) << "Short write from transport to TLS: " << write_ret + << " != " << data->length(); + done_ = true; + return; + } + QUICHE_DVLOG(1) << "Wrote " << data->length() + << " bytes from transport to TLS"; + int handshake_ret = SSL_do_handshake(ssl_.get()); + if (handshake_ret != 1) { + int ssl_err = SSL_get_error(ssl_.get(), handshake_ret); + if (ssl_err == SSL_ERROR_WANT_READ) { + SendToTransport(); + socket_->ReceiveAsync(kBioBufferSize); + return; + } + PrintSSLError("Error while performing TLS handshake", ssl_err, + handshake_ret); + done_ = true; + return; + } + tls_connected_ = true; + MaybeSendRequest(); + uint8_t buffer[kBioBufferSize] = {}; + int ssl_read_ret = SSL_read(ssl_.get(), buffer, sizeof(buffer) - 1); + if (ssl_read_ret < 0) { + int ssl_err = SSL_get_error(ssl_.get(), ssl_read_ret); + if (ssl_err == SSL_ERROR_WANT_READ) { + SendToTransport(); + socket_->ReceiveAsync(kBioBufferSize); + return; + } + PrintSSLError("Error while reading from TLS", ssl_err, ssl_read_ret); + done_ = true; + return; + } + if (ssl_read_ret == 0) { + QUICHE_LOG(INFO) << "TLS read closed"; + done_ = true; + return; + } + std::cout << buffer << std::endl; + done_ = true; + } + + void SendComplete(absl::Status status) override { + if (!status.ok()) { + QUICHE_LOG(ERROR) << "Transport send failed: " << status; + done_ = true; + return; + } + SendToTransport(); + } + + bool IsDone() const { return done_; } + + private: + static SSL_CTX *MasqueSslCtx() { + static bssl::UniquePtr ctx(SSL_CTX_new(TLS_method())); + return ctx.get(); + } + + static void PrintSSLError(const char *msg, int ssl_err, int ret) { + switch (ssl_err) { + case SSL_ERROR_SSL: + QUICHE_LOG(ERROR) << msg << ": " + << ERR_reason_error_string(ERR_peek_error()); + break; + case SSL_ERROR_SYSCALL: + if (ret == 0) { + QUICHE_LOG(ERROR) << msg << ": peer closed connection"; + } else { + QUICHE_LOG(ERROR) << msg << ": " << strerror(errno); + } + break; + case SSL_ERROR_ZERO_RETURN: + QUICHE_LOG(ERROR) << msg << ": received close_notify"; + break; + default: + QUICHE_LOG(ERROR) << msg << ": unexpected error: " + << SSL_error_description(ssl_err); + break; + } + ERR_print_errors_fp(stderr); + } + + void MaybeSendRequest() { + if (!tls_connected_) { + return; + } + std::string request = absl::StrCat("GET ", url_.path(), + " HTTP/1.1\r\nHost: ", url_.HostPort(), + "\r\nConnection: close\r\n\r\n"); + const int request_length = request.size(); + int ssl_write_ret = SSL_write(ssl_.get(), request.c_str(), request_length); + if (ssl_write_ret <= 0) { + int ssl_err = SSL_get_error(ssl_.get(), ssl_write_ret); + PrintSSLError("Error while writing request to TLS", ssl_err, + ssl_write_ret); + done_ = true; + return; + } + if (ssl_write_ret != request_length) { + QUICHE_LOG(ERROR) << "Request TLS short write " << ssl_write_ret << " < " + << request_length; + done_ = true; + return; + } + QUICHE_DVLOG(1) << "Sent request to TLS"; + SendToTransport(); + } + + void SendToTransport() { + char buffer[kBioBufferSize]; + int read_ret = BIO_read(transport_io_, buffer, sizeof(buffer)); + if (read_ret == 0) { + QUICHE_LOG(ERROR) << "TCP closed while TLS waiting for handshake read"; + } else if (read_ret < 0) { + QUICHE_LOG(ERROR) << "Error while reading from transport_io_: " + << read_ret; + } else { + QUICHE_DVLOG(1) << "TLS wrote " << read_ret << " bytes to transport"; + socket_->SendAsync(std::string(buffer, read_ret)); + } + } + + static constexpr size_t kBioBufferSize = 16384; + QuicEventLoop *event_loop_; // Not owned. + std::unique_ptr socket_factory_; + QuicUrl url_; + bool disable_certificate_verification_; + int address_family_for_lookup_; + std::unique_ptr proof_verifier_; + QuicSocketAddress socket_address_; + std::unique_ptr socket_; + BIO *transport_io_ = nullptr; + bssl::UniquePtr ssl_; + bool tls_connected_ = false; + bool done_ = false; +}; + +int RunMasqueTcpClient(int argc, char *argv[]) { + const char *usage = "Usage: masque_tcp_client "; + std::vector urls = + quiche::QuicheParseCommandLineFlags(usage, argc, argv); + if (urls.size() != 1) { + quiche::QuichePrintCommandLineFlagHelp(usage); + return 1; + } + + quiche::QuicheSystemEventLoop system_event_loop("masque_client"); + const bool disable_certificate_verification = + quiche::GetQuicheCommandLineFlag(FLAGS_disable_certificate_verification); + + const int address_family = + quiche::GetQuicheCommandLineFlag(FLAGS_address_family); + int address_family_for_lookup; + if (address_family == 0) { + address_family_for_lookup = AF_UNSPEC; + } else if (address_family == 4) { + address_family_for_lookup = AF_INET; + } else if (address_family == 6) { + address_family_for_lookup = AF_INET6; + } else { + QUICHE_LOG(ERROR) << "Invalid address_family " << address_family; + return 1; + } + std::unique_ptr event_loop = + GetDefaultEventLoop()->Create(QuicDefaultClock::Get()); + + QuicUrl url(urls[0], "https"); + if (url.host().empty() && !absl::StrContains(urls[0], "://")) { + url = QuicUrl(absl::StrCat("https://", urls[0])); + } + if (url.host().empty()) { + QUICHE_LOG(ERROR) << "Failed to parse URL \"" << urls[0] << "\""; + return 1; + } + + MasqueTlsTcpClientHandler tls_handler(event_loop.get(), url, + disable_certificate_verification, + address_family_for_lookup); + if (!tls_handler.Start()) { + return 1; + } + while (!tls_handler.IsDone()) { + event_loop->RunEventLoopOnce(QuicTime::Delta::FromMilliseconds(50)); + } + + return 0; +} + +} // namespace + +} // namespace quic + +int main(int argc, char *argv[]) { + return quic::RunMasqueTcpClient(argc, argv); +} diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_framer.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_framer.cc index f4bbe4724d..e06183a511 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_framer.cc +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_framer.cc @@ -376,10 +376,6 @@ quiche::QuicheBuffer MoqtFramer::SerializeClientSetup( const MoqtClientSetup& message) { absl::InlinedVector int_parameters; absl::InlinedVector string_parameters; - if (message.role.has_value()) { - int_parameters.push_back( - IntParameter(MoqtSetupParameter::kRole, *message.role)); - } if (message.max_subscribe_id.has_value()) { int_parameters.push_back(IntParameter(MoqtSetupParameter::kMaxSubscribeId, *message.max_subscribe_id)); @@ -404,10 +400,6 @@ quiche::QuicheBuffer MoqtFramer::SerializeClientSetup( quiche::QuicheBuffer MoqtFramer::SerializeServerSetup( const MoqtServerSetup& message) { absl::InlinedVector int_parameters; - if (message.role.has_value()) { - int_parameters.push_back( - IntParameter(MoqtSetupParameter::kRole, *message.role)); - } if (message.max_subscribe_id.has_value()) { int_parameters.push_back(IntParameter(MoqtSetupParameter::kMaxSubscribeId, *message.max_subscribe_id)); diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_messages.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_messages.cc index 3e0a226abd..7b535f20a5 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_messages.cc +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_messages.cc @@ -16,6 +16,7 @@ #include "absl/strings/string_view.h" #include "absl/types/span.h" #include "quiche/quic/platform/api/quic_bug_tracker.h" +#include "quiche/common/platform/api/quiche_bug_tracker.h" #include "quiche/web_transport/web_transport.h" namespace moqt { @@ -199,7 +200,11 @@ bool FullTrackName::operator<(const FullTrackName& other) const { return absl::c_lexicographical_compare(tuple_, other.tuple_); } FullTrackName::FullTrackName(absl::Span elements) - : tuple_(elements.begin(), elements.end()) {} + : tuple_(elements.begin(), elements.end()) { + QUICHE_BUG_IF(Moqt_namespace_too_large_03, + std::size(elements) > (kMaxNamespaceElements + 1)) + << "Constructing a namespace that is too large."; +} absl::Status MoqtStreamErrorToStatus(webtransport::StreamErrorCode error_code, absl::string_view reason_phrase) { diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_messages.h b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_messages.h index 508d1032a5..e022e28351 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_messages.h +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_messages.h @@ -24,6 +24,7 @@ #include "quiche/quic/core/quic_types.h" #include "quiche/quic/core/quic_versions.h" #include "quiche/quic/moqt/moqt_priority.h" +#include "quiche/common/platform/api/quiche_bug_tracker.h" #include "quiche/common/platform/api/quiche_export.h" #include "quiche/web_transport/web_transport.h" @@ -40,6 +41,8 @@ enum class MoqtVersion : uint64_t { inline constexpr MoqtVersion kDefaultMoqtVersion = MoqtVersion::kDraft07; inline constexpr uint64_t kDefaultInitialMaxSubscribeId = 100; +inline constexpr uint64_t kMinNamespaceElements = 1; +inline constexpr uint64_t kMaxNamespaceElements = 32; struct QUICHE_EXPORT MoqtSessionParameters { // TODO: support multiple versions. @@ -118,6 +121,8 @@ enum class QUICHE_EXPORT MoqtError : uint64_t { kParameterLengthMismatch = 0x5, kTooManySubscribes = 0x6, kGoawayTimeout = 0x10, + kControlMessageTimeout = 0x11, + kDataStreamTimeout = 0x12, }; // Error codes used by MoQT to reset streams. @@ -128,13 +133,6 @@ inline constexpr webtransport::StreamErrorCode kResetCodeSubscriptionGone = 0x01; inline constexpr webtransport::StreamErrorCode kResetCodeTimedOut = 0x02; -enum class QUICHE_EXPORT MoqtRole : uint64_t { - kPublisher = 0x1, - kSubscriber = 0x2, - kPubSub = 0x3, - kRoleMax = 0x3, -}; - enum class QUICHE_EXPORT MoqtSetupParameter : uint64_t { kRole = 0x0, kPath = 0x1, @@ -159,6 +157,7 @@ enum class QUICHE_EXPORT MoqtTrackRequestParameter : uint64_t { enum class MoqtAnnounceErrorCode : uint64_t { kInternalError = 0, kAnnounceNotSupported = 1, + kNotASubscribedNamespace = 2, }; enum class QUICHE_EXPORT SubscribeErrorCode : uint64_t { @@ -189,7 +188,11 @@ class FullTrackName { explicit FullTrackName( std::initializer_list elements) : FullTrackName(absl::Span( - std::data(elements), std::size(elements))) {} + std::data(elements), std::size(elements))) { + QUICHE_BUG_IF(Moqt_namespace_too_large_02, + elements.size() > (kMaxNamespaceElements + 1)) + << "Constructing a namespace that is too large."; + } explicit FullTrackName(absl::string_view ns, absl::string_view name) : FullTrackName({ns, name}) {} FullTrackName() : FullTrackName({}) {} @@ -197,6 +200,9 @@ class FullTrackName { std::string ToString() const; void AddElement(absl::string_view element) { + QUICHE_BUG_IF(Moqt_namespace_too_large_01, + tuple_.size() > (kMaxNamespaceElements + 1)) + << "Constructing a namespace that is too large."; tuple_.push_back(std::string(element)); } // Remove the last element to convert a name to a namespace. @@ -306,7 +312,6 @@ H AbslHashValue(H h, const FullSequence& m) { struct QUICHE_EXPORT MoqtClientSetup { std::vector supported_versions; - std::optional role; std::optional path; std::optional max_subscribe_id; bool supports_object_ack = false; @@ -314,7 +319,6 @@ struct QUICHE_EXPORT MoqtClientSetup { struct QUICHE_EXPORT MoqtServerSetup { MoqtVersion selected_version; - std::optional role; std::optional max_subscribe_id; bool supports_object_ack = false; }; diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_parser.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_parser.cc index b8d77d10e8..d1ab1f2437 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_parser.cc +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_parser.cc @@ -11,7 +11,6 @@ #include #include #include -#include #include "absl/base/casts.h" #include "absl/cleanup/cleanup.h" @@ -260,21 +259,6 @@ size_t MoqtControlParser::ProcessClientSetup(quic::QuicDataReader& reader) { } auto key = static_cast(type); switch (key) { - case MoqtSetupParameter::kRole: - if (setup.role.has_value()) { - ParseError("ROLE parameter appears twice in SETUP"); - return 0; - } - uint64_t index; - if (!StringViewToVarInt(value, index)) { - return 0; - } - if (index > static_cast(MoqtRole::kRoleMax)) { - ParseError("Invalid ROLE parameter"); - return 0; - } - setup.role = static_cast(index); - break; case MoqtSetupParameter::kPath: if (uses_web_transport_) { ParseError( @@ -312,10 +296,6 @@ size_t MoqtControlParser::ProcessClientSetup(quic::QuicDataReader& reader) { break; } } - if (!setup.role.has_value()) { - ParseError("ROLE parameter missing from CLIENT_SETUP message"); - return 0; - } if (!uses_web_transport_ && !setup.path.has_value()) { ParseError("PATH SETUP parameter missing from Client message over QUIC"); return 0; @@ -344,21 +324,6 @@ size_t MoqtControlParser::ProcessServerSetup(quic::QuicDataReader& reader) { } auto key = static_cast(type); switch (key) { - case MoqtSetupParameter::kRole: - if (setup.role.has_value()) { - ParseError("ROLE parameter appears twice in SETUP"); - return 0; - } - uint64_t index; - if (!StringViewToVarInt(value, index)) { - return 0; - } - if (index > static_cast(MoqtRole::kRoleMax)) { - ParseError("Invalid ROLE parameter"); - return 0; - } - setup.role = static_cast(index); - break; case MoqtSetupParameter::kPath: ParseError("PATH parameter in SERVER_SETUP"); return 0; @@ -387,10 +352,6 @@ size_t MoqtControlParser::ProcessServerSetup(quic::QuicDataReader& reader) { break; } } - if (!setup.role.has_value()) { - ParseError("ROLE parameter missing from SERVER_SETUP message"); - return 0; - } visitor_.OnServerSetupMessage(setup); return reader.PreviouslyReadPayload().length(); } @@ -972,7 +933,12 @@ bool MoqtControlParser::ReadTrackNamespace(quic::QuicDataReader& reader, QUICHE_DCHECK(full_track_name.empty()); uint64_t num_elements; if (!reader.ReadVarInt62(&num_elements)) { - return 0; + return false; + } + if (num_elements == 0 || num_elements > kMaxNamespaceElements) { + ParseError(MoqtError::kProtocolViolation, + "Invalid number of namespace elements"); + return false; } for (uint64_t i = 0; i < num_elements; ++i) { absl::string_view element; diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_parser.h b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_parser.h index 1b4de801d2..b05fdccdd3 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_parser.h +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_parser.h @@ -202,6 +202,13 @@ class QUICHE_EXPORT MoqtDataParser { // Returns the type of the unidirectional stream, if already known. std::optional stream_type() const { return type_; } + // Returns the track alias, if already known. + std::optional track_alias() const { + return (next_input_ == kStreamType || next_input_ == kTrackAlias) + ? std::optional() + : metadata_.track_alias; + } + private: friend class test::MoqtDataParserPeer; diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_priority.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_priority.cc index b55546e10f..9a5eb207c6 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_priority.cc +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_priority.cc @@ -29,24 +29,8 @@ constexpr uint64_t OnlyLowestNBits(uint64_t value) { // 62: 0 for data streams, 1 for control streams // 54-61: subscriber priority // 46-53: publisher priority -// (if stream-per-group) -// 0-45: group ID -// (if stream-per-object) // 20-45: group ID -// 0-19: object ID - -webtransport::SendOrder SendOrderForStream(MoqtPriority subscriber_priority, - MoqtPriority publisher_priority, - uint64_t group_id, - MoqtDeliveryOrder delivery_order) { - const int64_t track_bits = (Flip<8>(subscriber_priority) << 54) | - (Flip<8>(publisher_priority) << 46); - group_id = OnlyLowestNBits<46>(group_id); - if (delivery_order == MoqtDeliveryOrder::kAscending) { - group_id = Flip<46>(group_id); - } - return track_bits | group_id; -} +// 0-19: object (for Datagrams) or subgroup (for streams) ID webtransport::SendOrder SendOrderForStream(MoqtPriority subscriber_priority, MoqtPriority publisher_priority, @@ -64,6 +48,19 @@ webtransport::SendOrder SendOrderForStream(MoqtPriority subscriber_priority, return track_bits | (group_id << 20) | subgroup_id; } +webtransport::SendOrder SendOrderForDatagram(MoqtPriority subscriber_priority, + MoqtPriority publisher_priority, + uint64_t group_id, + uint64_t object_id, + MoqtDeliveryOrder delivery_order) { + return SendOrderForStream(subscriber_priority, publisher_priority, group_id, + object_id, delivery_order); +} + +webtransport::SendOrder SendOrderForFetch(MoqtPriority subscriber_priority) { + return (Flip<8>(subscriber_priority) << 54); +} + webtransport::SendOrder UpdateSendOrderForSubscriberPriority( const webtransport::SendOrder send_order, MoqtPriority subscriber_priority) { diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_priority.h b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_priority.h index a16d7e075b..ffbd32ded4 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_priority.h +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_priority.h @@ -25,12 +25,18 @@ enum class MoqtDeliveryOrder : uint8_t { // Computes WebTransport send order for an MoQT data stream with the specified // parameters. -QUICHE_EXPORT webtransport::SendOrder SendOrderForStream( - MoqtPriority subscriber_priority, MoqtPriority publisher_priority, - uint64_t group_id, MoqtDeliveryOrder delivery_order); QUICHE_EXPORT webtransport::SendOrder SendOrderForStream( MoqtPriority subscriber_priority, MoqtPriority publisher_priority, uint64_t group_id, uint64_t subgroup_id, MoqtDeliveryOrder delivery_order); +// This is just a wrapper for SendOrderForStream, that uses the object ID where +// the subgroup ID would normally go. +QUICHE_EXPORT webtransport::SendOrder SendOrderForDatagram( + MoqtPriority subscriber_priority, MoqtPriority publisher_priority, + uint64_t group_id, uint64_t object_id, MoqtDeliveryOrder delivery_order); +// Determine the send order for FETCH. As all objects are on one stream, only +// subscriber priority matters. +QUICHE_EXPORT webtransport::SendOrder SendOrderForFetch( + MoqtPriority subscriber_priority); // Returns |send_order| updated with the new |subscriber_priority|. QUICHE_EXPORT webtransport::SendOrder UpdateSendOrderForSubscriberPriority( diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_publisher.h b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_publisher.h index 010db7fc58..0f378edaf4 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_publisher.h +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_publisher.h @@ -77,7 +77,9 @@ class MoqtFetchTask { // Sets the callback that is called when GetNextObject() has previously // returned kPending, but now a new object (or potentially an error or an - // end-of-fetch) is available. + // end-of-fetch) is available. The application is responsible for calling + // GetNextObject() until it gets kPending; no further callback will occur + // until then. virtual void SetObjectAvailableCallback( ObjectsAvailableCallback callback) = 0; diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_session.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_session.cc index 8496188dba..6d5e4d7c68 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_session.cc +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_session.cc @@ -36,6 +36,7 @@ #include "quiche/quic/platform/api/quic_logging.h" #include "quiche/common/platform/api/quiche_bug_tracker.h" #include "quiche/common/platform/api/quiche_logging.h" +#include "quiche/common/platform/api/quiche_mem_slice.h" #include "quiche/common/quiche_buffer_allocator.h" #include "quiche/common/quiche_stream.h" #include "quiche/common/simple_buffer_allocator.h" @@ -146,7 +147,6 @@ void MoqtSession::OnSessionReady() { control_stream_ = control_stream->GetStreamId(); MoqtClientSetup setup = MoqtClientSetup{ .supported_versions = std::vector{parameters_.version}, - .role = MoqtRole::kPubSub, .max_subscribe_id = parameters_.max_subscribe_id, .supports_object_ack = parameters_.support_object_acks, }; @@ -243,11 +243,6 @@ bool MoqtSession::SubscribeAnnounces( FullTrackName track_namespace, MoqtOutgoingSubscribeAnnouncesCallback callback, MoqtSubscribeParameters parameters) { - if (peer_role_ == MoqtRole::kSubscriber) { - std::move(callback)(track_namespace, SubscribeErrorCode::kInternalError, - "SUBSCRIBE_ANNOUNCES cannot be sent to subscriber"); - return false; - } MoqtSubscribeAnnounces message; message.track_namespace = track_namespace; message.parameters = std::move(parameters); @@ -273,13 +268,6 @@ bool MoqtSession::UnsubscribeAnnounces(FullTrackName track_namespace) { void MoqtSession::Announce(FullTrackName track_namespace, MoqtOutgoingAnnounceCallback announce_callback) { - if (peer_role_ == MoqtRole::kPublisher) { - std::move(announce_callback)( - track_namespace, - MoqtAnnounceErrorReason{MoqtAnnounceErrorCode::kInternalError, - "ANNOUNCE cannot be sent to Publisher"}); - return; - } if (outgoing_announces_.contains(track_namespace)) { std::move(announce_callback)( track_namespace, @@ -313,9 +301,6 @@ bool MoqtSession::Unannounce(FullTrackName track_namespace) { void MoqtSession::CancelAnnounce(FullTrackName track_namespace, MoqtAnnounceErrorCode code, absl::string_view reason) { - if (peer_role_ == MoqtRole::kSubscriber) { - return; - } MoqtAnnounceCancel message{track_namespace, code, std::string(reason)}; SendControlMessage(framer_.SerializeAnnounceCancel(message)); @@ -421,6 +406,7 @@ void MoqtSession::Unsubscribe(const FullTrackName& name) { if (track == nullptr) { return; } + QUIC_DLOG(INFO) << ENDPOINT << "Sent UNSUBSCRIBE message for " << name; MoqtUnsubscribe message; message.subscribe_id = track->subscribe_id(); SendControlMessage(framer_.SerializeUnsubscribe(message)); @@ -436,10 +422,6 @@ bool MoqtSession::Fetch(const FullTrackName& name, MoqtPriority priority, std::optional delivery_order, MoqtSubscribeParameters parameters) { - if (peer_role_ == MoqtRole::kSubscriber) { - QUIC_DLOG(INFO) << ENDPOINT << "Tried to send FETCH to subscriber peer"; - return false; - } // TODO(martinduke): support authorization info if (next_subscribe_id_ >= peer_max_subscribe_id_) { QUIC_DLOG(INFO) << ENDPOINT << "Tried to send FETCH with ID " @@ -524,7 +506,7 @@ bool MoqtSession::SubscribeIsDone(uint64_t subscribe_id, SubscribeDoneCode code, subscribe_done.final_id = subscription.largest_sent(); SendControlMessage(framer_.SerializeSubscribeDone(subscribe_done)); QUIC_DLOG(INFO) << ENDPOINT << "Sent SUBSCRIBE_DONE message for " - << subscribe_id; + << subscription.publisher().GetTrackName(); // Clean up the subscription published_subscriptions_.erase(it); for (webtransport::StreamId stream_id : streams_to_reset) { @@ -540,10 +522,6 @@ bool MoqtSession::SubscribeIsDone(uint64_t subscribe_id, SubscribeDoneCode code, bool MoqtSession::Subscribe(MoqtSubscribe& message, SubscribeRemoteTrack::Visitor* visitor, std::optional provided_track_alias) { - if (peer_role_ == MoqtRole::kSubscriber) { - QUIC_DLOG(INFO) << ENDPOINT << "Tried to send SUBSCRIBE to subscriber peer"; - return false; - } // TODO(martinduke): support authorization info if (next_subscribe_id_ >= peer_max_subscribe_id_) { QUIC_DLOG(INFO) << ENDPOINT << "Tried to send SUBSCRIBE with ID " @@ -628,7 +606,8 @@ webtransport::Stream* MoqtSession::OpenDataStream( return new_stream; } -bool MoqtSession::OpenDataStream(std::shared_ptr fetch) { +bool MoqtSession::OpenDataStream(std::shared_ptr fetch, + webtransport::SendOrder send_order) { webtransport::Stream* new_stream = session_->OpenOutgoingUnidirectionalStream(); if (new_stream == nullptr) { @@ -642,6 +621,8 @@ bool MoqtSession::OpenDataStream(std::shared_ptr fetch) { if (new_stream->CanWrite()) { new_stream->visitor()->OnCanWrite(); } + new_stream->SetPriority(webtransport::StreamPriority{ + /*send_group_id=*/kMoqtSendGroupId, send_order}); return true; } @@ -678,7 +659,8 @@ void MoqtSession::OnCanCreateNewOutgoingUnidirectionalStream() { if (subscription == published_subscriptions_.end()) { auto fetch = incoming_fetches_.find(next->subscription_id); // Create the stream if the fetch still exists. - if (fetch != incoming_fetches_.end() && !OpenDataStream(fetch->second)) { + if (fetch != incoming_fetches_.end() && + !OpenDataStream(fetch->second, next->send_order)) { return; // A QUIC_BUG has fired because this shouldn't happen. } // FETCH needs only one stream, and can be deleted from the queue. Or, @@ -723,11 +705,6 @@ void MoqtSession::GrantMoreSubscribes(uint64_t num_subscribes) { } bool MoqtSession::ValidateSubscribeId(uint64_t subscribe_id) { - if (peer_role_ == MoqtRole::kPublisher) { - QUIC_DLOG(INFO) << ENDPOINT << "Publisher peer sent SUBSCRIBE"; - Error(MoqtError::kProtocolViolation, "Received SUBSCRIBE from publisher"); - return false; - } if (subscribe_id >= local_max_subscribe_id_) { QUIC_DLOG(INFO) << ENDPOINT << "Received SUBSCRIBE with too large ID"; Error(MoqtError::kTooManySubscribes, @@ -806,18 +783,16 @@ void MoqtSession::ControlStream::OnClientSetupMessage( if (session_->parameters_.perspective == Perspective::IS_SERVER) { MoqtServerSetup response; response.selected_version = session_->parameters_.version; - response.role = MoqtRole::kPubSub; response.max_subscribe_id = session_->parameters_.max_subscribe_id; response.supports_object_ack = session_->parameters_.support_object_acks; SendOrBufferMessage(session_->framer_.SerializeServerSetup(response)); QUIC_DLOG(INFO) << ENDPOINT << "Sent the SETUP message"; } - // TODO: handle role and path. + // TODO: handle path. if (message.max_subscribe_id.has_value()) { session_->peer_max_subscribe_id_ = *message.max_subscribe_id; } std::move(session_->callbacks_.session_established_callback)(); - session_->peer_role_ = *message.role; } void MoqtSession::ControlStream::OnServerSetupMessage( @@ -836,12 +811,11 @@ void MoqtSession::ControlStream::OnServerSetupMessage( } session_->peer_supports_object_ack_ = message.supports_object_ack; QUIC_DLOG(INFO) << ENDPOINT << "Received the SETUP message"; - // TODO: handle role and path. + // TODO: handle path. if (message.max_subscribe_id.has_value()) { session_->peer_max_subscribe_id_ = *message.max_subscribe_id; } std::move(session_->callbacks_.session_established_callback)(); - session_->peer_role_ = *message.role; } void MoqtSession::ControlStream::SendSubscribeError( @@ -959,7 +933,6 @@ void MoqtSession::ControlStream::OnSubscribeOkMessage( subscribe->visitor()->OnReply(track->full_track_name(), message.largest_id, std::nullopt); } - subscribe->OnObjectOrOk(); } void MoqtSession::ControlStream::OnSubscribeErrorMessage( @@ -1007,6 +980,12 @@ void MoqtSession::ControlStream::OnSubscribeErrorMessage( void MoqtSession::ControlStream::OnUnsubscribeMessage( const MoqtUnsubscribe& message) { + auto it = session_->published_subscriptions_.find(message.subscribe_id); + if (it == session_->published_subscriptions_.end()) { + return; + } + QUIC_DLOG(INFO) << ENDPOINT << "Received an UNSUBSCRIBE for " + << it->second->publisher().GetTrackName(); session_->SubscribeIsDone(message.subscribe_id, SubscribeDoneCode::kUnsubscribed, ""); } @@ -1029,12 +1008,6 @@ void MoqtSession::ControlStream::OnSubscribeUpdateMessage( void MoqtSession::ControlStream::OnAnnounceMessage( const MoqtAnnounce& message) { - if (session_->peer_role_ == MoqtRole::kSubscriber) { - QUIC_DLOG(INFO) << ENDPOINT << "Subscriber peer sent SUBSCRIBE"; - session_->Error(MoqtError::kProtocolViolation, - "Received ANNOUNCE from Subscriber"); - return; - } std::optional error = session_->callbacks_.incoming_announce_callback(message.track_namespace, AnnounceEvent::kAnnounce); @@ -1161,12 +1134,6 @@ void MoqtSession::ControlStream::OnUnsubscribeAnnouncesMessage( void MoqtSession::ControlStream::OnMaxSubscribeIdMessage( const MoqtMaxSubscribeId& message) { - if (session_->peer_role_ == MoqtRole::kSubscriber) { - QUIC_DLOG(INFO) << ENDPOINT << "Subscriber peer sent MAX_SUBSCRIBE_ID"; - session_->Error(MoqtError::kProtocolViolation, - "Received MAX_SUBSCRIBE_ID from Subscriber"); - return; - } if (message.max_subscribe_id < session_->peer_max_subscribe_id_) { QUIC_DLOG(INFO) << ENDPOINT << "Peer sent MAX_SUBSCRIBE_ID message with " @@ -1225,16 +1192,13 @@ void MoqtSession::ControlStream::OnFetchMessage(const MoqtFetch& message) { message.group_order.value_or((*track_publisher)->GetDeliveryOrder()); fetch_ok.largest_id = result.first->second->fetch_task()->GetLargestId(); SendOrBufferMessage(session_->framer_.SerializeFetchOk(fetch_ok)); + webtransport::SendOrder send_order = + SendOrderForFetch(message.subscriber_priority); if (!session_->session()->CanOpenNextOutgoingUnidirectionalStream() || - !session_->OpenDataStream(result.first->second)) { + !session_->OpenDataStream(result.first->second, send_order)) { // Put the FETCH in the queue for a new stream. - session_->UpdateQueuedSendOrder( - message.subscribe_id, std::nullopt, - SendOrderForStream(message.subscriber_priority, - (*track_publisher)->GetPublisherPriority(), - /*group_id=*/0, - message.group_order.value_or( - (*track_publisher)->GetDeliveryOrder()))); + session_->UpdateQueuedSendOrder(message.subscribe_id, std::nullopt, + send_order); } } @@ -1385,19 +1349,112 @@ void MoqtSession::IncomingDataStream::OnObjectMessage(const MoqtObject& message, return; } track->OnObjectOrOk(); - SubscribeRemoteTrack* subscribe = static_cast(track); - if (subscribe->visitor() != nullptr) { - subscribe->visitor()->OnObjectFragment( - track->full_track_name(), - FullSequence{message.group_id, message.subgroup_id.value_or(0), - message.object_id}, - message.publisher_priority, message.object_status, payload, - end_of_message); + if (!track->is_fetch()) { + SubscribeRemoteTrack* subscribe = static_cast(track); + if (subscribe->visitor() != nullptr) { + subscribe->visitor()->OnObjectFragment( + track->full_track_name(), + FullSequence{message.group_id, message.subgroup_id.value_or(0), + message.object_id}, + message.publisher_priority, message.object_status, payload, + end_of_message); + } + } else { // FETCH + UpstreamFetch* fetch = static_cast(track); + UpstreamFetch::UpstreamFetchTask* task = fetch->task(); + if (task == nullptr) { + // The application killed the FETCH. + stream_->SendStopSending(kResetCodeSubscriptionGone); + return; + } + if (!task->HasObject()) { + task->NewObject(message); + } + if (task->NeedsMorePayload() && !payload.empty()) { + task->AppendPayloadToObject(payload); + } } partial_object_.clear(); } -void MoqtSession::IncomingDataStream::OnCanRead() { parser_.ReadAllData(); } +MoqtSession::IncomingDataStream::~IncomingDataStream() { + if (parser_.track_alias().has_value() && + parser_.stream_type() == MoqtDataStreamType::kStreamHeaderFetch && + track_.IsValid()) { + session_->upstream_by_id_.erase(*parser_.track_alias()); + } +} + +void MoqtSession::IncomingDataStream::MaybeReadOneObject() { + if (!parser_.track_alias().has_value() || + parser_.stream_type() != MoqtDataStreamType::kStreamHeaderFetch) { + QUICHE_BUG(quic_bug_read_one_object_parser_unexpected_state) + << "Requesting object, parser in unexpected state"; + } + RemoteTrack* track = session_->RemoteTrackById(*parser_.track_alias()); + if (track == nullptr || !track->is_fetch()) { + QUICHE_BUG(quic_bug_read_one_object_track_unexpected_state) + << "Requesting object, track in unexpected state"; + return; + } + UpstreamFetch* fetch = static_cast(track); + UpstreamFetch::UpstreamFetchTask* task = fetch->task(); + if (task == nullptr) { + return; + } + if (task->HasObject() && !task->NeedsMorePayload()) { + return; + } + parser_.ReadAtMostOneObject(); + // If it read an object, it called OnObjectMessage and may have altered the + // task's object state. + if (task->HasObject() && !task->NeedsMorePayload()) { + task->NotifyNewObject(); + } +} + +void MoqtSession::IncomingDataStream::OnCanRead() { + if (!parser_.stream_type().has_value()) { + parser_.ReadStreamType(); + if (!parser_.stream_type().has_value()) { + return; + } + } + if (parser_.stream_type() != MoqtDataStreamType::kStreamHeaderFetch) { + parser_.ReadAllData(); + return; + } + bool learned_track_alias = false; + if (!parser_.track_alias().has_value()) { + learned_track_alias = true; + parser_.ReadTrackAlias(); + if (!parser_.track_alias().has_value()) { + return; + } + } + auto it = session_->upstream_by_id_.find(*parser_.track_alias()); + if (it == session_->upstream_by_id_.end()) { + QUIC_DLOG(INFO) << ENDPOINT << "Received object for a track with no FETCH"; + // This is a not a session error because there might be an UNSUBSCRIBE in + // flight. + stream_->SendStopSending(kResetCodeSubscriptionGone); + return; + } + if (it->second == nullptr) { + QUICHE_BUG(quiche_bug_moqt_fetch_pointer_is_null) + << "Fetch pointer is null"; + return; + } + UpstreamFetch* fetch = static_cast(it->second.get()); + if (learned_track_alias) { + // If the task already exists (FETCH_OK has arrived), the callback will + // immediately execute to read the first object. Otherwise, it will only + // execute when the task is created or a cached object is read. + fetch->OnStreamOpened([this]() { MaybeReadOneObject(); }); + return; + } + MaybeReadOneObject(); +} void MoqtSession::IncomingDataStream::OnControlMessageReceived() { session_->Error(MoqtError::kProtocolViolation, @@ -1584,9 +1641,9 @@ webtransport::SendOrder MoqtSession::PublishedSubscription::GetSendOrder( MoqtDeliveryOrder delivery_order = subscriber_delivery_order().value_or( track_publisher_->GetDeliveryOrder()); if (forwarding_preference == MoqtForwardingPreference::kDatagram) { - QUICHE_BUG(quic_bug_GetSendOrder_for_Datagram) - << "Datagram Track requesting SendOrder"; - return 0; + return SendOrderForDatagram(subscriber_priority_, publisher_priority, + sequence.group, sequence.object, + delivery_order); } return SendOrderForStream(subscriber_priority_, publisher_priority, sequence.group, sequence.subgroup, delivery_order); diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_session.h b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_session.h index adf4b7e4d8..be9800c24e 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_session.h +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_session.h @@ -314,6 +314,7 @@ class QUICHE_EXPORT MoqtSession : public webtransport::SessionVisitor { public: IncomingDataStream(MoqtSession* session, webtransport::Stream* stream) : session_(session), stream_(stream), parser_(stream, this) {} + ~IncomingDataStream(); // webtransport::StreamVisitor implementation. void OnCanRead() override; @@ -335,6 +336,8 @@ class QUICHE_EXPORT MoqtSession : public webtransport::SessionVisitor { webtransport::Stream* stream() const { return stream_; } + void MaybeReadOneObject(); + private: friend class test::MoqtSessionPeer; void OnControlMessageReceived(); @@ -566,7 +569,8 @@ class QUICHE_EXPORT MoqtSession : public webtransport::SessionVisitor { webtransport::Stream* OpenDataStream(PublishedSubscription& subscription, FullSequence first_object); // Returns false if creation failed. - [[nodiscard]] bool OpenDataStream(std::shared_ptr fetch); + [[nodiscard]] bool OpenDataStream(std::shared_ptr fetch, + webtransport::SendOrder send_order); SubscribeRemoteTrack* RemoteTrackByAlias(uint64_t track_alias); RemoteTrack* RemoteTrackById(uint64_t subscribe_id); @@ -667,11 +671,6 @@ class QUICHE_EXPORT MoqtSession : public webtransport::SessionVisitor { absl::flat_hash_map outgoing_subscribe_announces_; - // The role the peer advertised in its SETUP message. Initialize it to avoid - // an uninitialized value if no SETUP arrives or it arrives with no Role - // parameter, and other checks have changed/been disabled. - MoqtRole peer_role_ = MoqtRole::kPubSub; - // The minimum subscribe ID the peer can use that is monotonically increasing. uint64_t next_incoming_subscribe_id_ = 0; // The maximum subscribe ID sent to the peer. Peer-generated IDs must be less diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_track.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_track.cc index 31980d11b5..8f6a77e1b8 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_track.cc +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_track.cc @@ -4,6 +4,7 @@ #include "quiche/quic/moqt/moqt_track.h" +#include #include #include #include @@ -12,7 +13,10 @@ #include "absl/strings/string_view.h" #include "quiche/quic/moqt/moqt_messages.h" #include "quiche/quic/moqt/moqt_publisher.h" -#include "quiche/common/platform/api/quiche_logging.h" +#include "quiche/common/platform/api/quiche_bug_tracker.h" +#include "quiche/common/platform/api/quiche_mem_slice.h" +#include "quiche/common/quiche_buffer_allocator.h" +#include "quiche/common/simple_buffer_allocator.h" #include "quiche/web_transport/web_transport.h" namespace moqt { @@ -39,6 +43,18 @@ void UpstreamFetch::OnFetchResult(FullSequence largest_id, absl::Status status, std::move(callback)); task_ = task->weak_ptr(); std::move(ok_callback_)(std::move(task)); + if (can_read_callback_) { + task_.GetIfAvailable()->set_can_read_callback( + std::move(can_read_callback_)); + } +} + +void UpstreamFetch::OnStreamOpened(CanReadCallback can_read_callback) { + if (task_.IsValid()) { + task_.GetIfAvailable()->set_can_read_callback(std::move(can_read_callback)); + } else { + can_read_callback_ = std::move(can_read_callback); + } } UpstreamFetch::UpstreamFetchTask::~UpstreamFetchTask() { @@ -56,17 +72,52 @@ UpstreamFetch::UpstreamFetchTask::GetNextObject(PublishedObject& output) { if (eof_) { return kEof; } + need_object_available_callback_ = true; return kPending; } - output = *std::move(next_object_); + if (!payload_.empty()) { + quiche::QuicheMemSlice message_slice(std::move(payload_)); + output.payload = std::move(message_slice); + } + output.sequence = FullSequence(next_object_->group_id, + next_object_->subgroup_id.value_or(0), + next_object_->object_id); + output.status = next_object_->object_status; + output.publisher_priority = next_object_->publisher_priority; + output.fin_after_this = false; + if (output.sequence == largest_id_) { // This is the last object. + eof_ = true; + } next_object_.reset(); + can_read_callback_(); return kSuccess; } -void UpstreamFetch::UpstreamFetchTask::NewObject(PublishedObject& object) { - QUICHE_DCHECK(!next_object_.has_value()); - next_object_ = std::move(object); - if (object_available_callback_) { +void UpstreamFetch::UpstreamFetchTask::NewObject(const MoqtObject& message) { + next_object_ = message; + payload_ = quiche::QuicheBuffer(quiche::SimpleBufferAllocator::Get(), + message.payload_length); +} + +void UpstreamFetch::UpstreamFetchTask::AppendPayloadToObject( + absl::string_view payload) { + QUICHE_BUG_IF(quic_bug_AppendPayloadToObjectCalledEarly, + !next_object_.has_value()) + << "AppendPayloadToObject called without an object"; + QUICHE_BUG_IF(quic_bug_AlreadyGotPayload, next_object_->payload_length == 0) + << "AppendPayloadToObject called after payload was already full"; + // Copy |payload| to the right spot in the buffer. + memcpy(payload_.data() + payload_.size() - next_object_->payload_length, + payload.data(), payload.length()); + next_object_->payload_length -= payload.length(); +} + +void UpstreamFetch::UpstreamFetchTask::NotifyNewObject() { + QUICHE_BUG_IF(quic_bug_NotifyNewObjectCalledEarly, + !next_object_.has_value() || next_object_->payload_length > 0) + << "NotifyNewObject called without a full object in store"; + if (need_object_available_callback_ && object_available_callback_) { + need_object_available_callback_ = false; object_available_callback_(); } } diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_track.h b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_track.h index fe158e1dfb..6c8bab32de 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_track.h +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/moqt_track.h @@ -17,6 +17,7 @@ #include "quiche/quic/moqt/moqt_priority.h" #include "quiche/quic/moqt/moqt_publisher.h" #include "quiche/quic/moqt/moqt_subscribe_windows.h" +#include "quiche/common/quiche_buffer_allocator.h" #include "quiche/common/quiche_callbacks.h" #include "quiche/common/quiche_weak_ptr.h" #include "quiche/web_transport/web_transport.h" @@ -195,13 +196,27 @@ class UpstreamFetch : public RemoteTrack { return weak_ptr_factory_.Create(); } - // Manage the relationship with the data stream. - void OnStreamOpened(CanReadCallback callback) { + // MoqtSession should not use this function; use + // UpstreamFetch::OnStreamOpened() instead, in case the task does not exist + // yet. + void set_can_read_callback(CanReadCallback callback) { can_read_callback_ = std::move(callback); + can_read_callback_(); // Accept the first object. } // Called when the data stream receives a new object. - void NewObject(PublishedObject& object); + void NewObject(const MoqtObject& message); + void AppendPayloadToObject(absl::string_view payload); + // MoqtSession calls this for a hint if the object has been read. + bool HasObject() const { return next_object_.has_value(); } + bool NeedsMorePayload() const { + return next_object_.has_value() && next_object_->payload_length > 0; + } + // MoqtSession calls NotifyNewObject() after NewObject() because it has to + // exit the parser loop before the callback possibly causes another read. + // Furthermore, NewObject() may be a partial object, and so + // NotifyNewObject() is called only when the object is complete. + void NotifyNewObject(); // Deletes callbacks to session or stream, updates the status. If |error| // has no value, will append an EOF to the object stream. @@ -214,10 +229,22 @@ class UpstreamFetch : public RemoteTrack { absl::Status status_; TaskDestroyedCallback task_destroyed_callback_; - // Object delivery state. - std::optional next_object_; + // Object delivery state. The payload_length member is used to track the + // payload bytes not yet received. The application receives a + // PublishedObject that is constructed from next_object_ and payload_. + std::optional next_object_; + // Store payload separately. Will be converted into QuicheMemSlice only when + // complete, since QuicheMemSlice is immutable. + quiche::QuicheBuffer payload_; + + // The task should only call object_available_callback_ when the last result + // was kPending. Otherwise, there can be recursive loops of + // GetNextObjectResult(). + bool need_object_available_callback_ = true; bool eof_ = false; // The next object is EOF. + // The Fetch task signals the application when it has new objects. ObjectsAvailableCallback object_available_callback_; + // The Fetch task signals the stream when it has dispensed of an object. CanReadCallback can_read_callback_; // Must be last. @@ -230,9 +257,16 @@ class UpstreamFetch : public RemoteTrack { UpstreamFetchTask* task() { return task_.GetIfAvailable(); } + // Manage the relationship with the data stream. + void OnStreamOpened(CanReadCallback callback); + private: quiche::QuicheWeakPtr task_; + // Before FetchTask is created, an incoming stream will register the callback + // here instead. + CanReadCallback can_read_callback_; + // Initial values from Fetch() call. FetchResponseCallback ok_callback_; // Will be destroyed on FETCH_OK. }; diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/test_tools/moqt_session_peer.h b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/test_tools/moqt_session_peer.h index e867376154..46c8121e6f 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/test_tools/moqt_session_peer.h +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/test_tools/moqt_session_peer.h @@ -10,6 +10,8 @@ #include #include + +#include "absl/status/status.h" #include "quiche/quic/moqt/moqt_messages.h" #include "quiche/quic/moqt/moqt_parser.h" #include "quiche/quic/moqt/moqt_priority.h" @@ -57,6 +59,14 @@ class MoqtSessionPeer { return new_stream; } + static std::unique_ptr + CreateIncomingStreamVisitor(MoqtSession* session, + webtransport::Stream* stream) { + auto new_stream = + std::make_unique(session, stream); + return new_stream; + } + // In the test OnSessionReady, the session creates a stream and then passes // its unique_ptr to the mock webtransport stream. This function casts // that unique_ptr into a MoqtSession::Stream*, which is a private class of @@ -111,10 +121,6 @@ class MoqtSessionPeer { priority); } - static void set_peer_role(MoqtSession* session, MoqtRole role) { - session->peer_role_ = role; - } - static SubscribeRemoteTrack* remote_track(MoqtSession* session, uint64_t track_alias) { return session->RemoteTrackByAlias(track_alias); @@ -156,6 +162,43 @@ class MoqtSessionPeer { uint64_t subscribe_id) { return *session->published_subscriptions_[subscribe_id]->largest_sent(); } + + // Adds an upstream fetch and a stream ready to receive data. + static std::unique_ptr CreateUpstreamFetch( + MoqtSession* session, webtransport::Stream* stream) { + MoqtFetch fetch_message = { + 0, + FullTrackName{"foo", "bar"}, + 128, + std::nullopt, + FullSequence{0, 0}, + 4, + std::nullopt, + MoqtSubscribeParameters(), + }; + std::unique_ptr task; + auto [it, success] = session->upstream_by_id_.try_emplace( + 0, std::make_unique( + fetch_message, [&](std::unique_ptr fetch_task) { + task = std::move(fetch_task); + })); + QUICHE_DCHECK(success); + UpstreamFetch* fetch = static_cast(it->second.get()); + // Initialize the fetch task + fetch->OnFetchResult( + FullSequence{4, 10}, absl::OkStatus(), + [=, session_ptr = session, fetch_id = fetch_message.subscribe_id]() { + session_ptr->CancelFetch(fetch_id); + }); + ; + auto mock_session = + static_cast(session->session()); + EXPECT_CALL(*mock_session, AcceptIncomingUnidirectionalStream()) + .WillOnce(testing::Return(stream)) + .WillOnce(testing::Return(nullptr)); + session->OnIncomingUnidirectionalStreamAvailable(); + return task; + } }; } // namespace moqt::test diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/test_tools/moqt_test_message.h b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/test_tools/moqt_test_message.h index 41652e24c4..64732c4c84 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/test_tools/moqt_test_message.h +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/test_tools/moqt_test_message.h @@ -330,8 +330,8 @@ class QUICHE_NO_EXPORT ClientSetupMessage : public TestMessageBase { if (webtrans) { // Should not send PATH. client_setup_.path = std::nullopt; - raw_packet_[2] = 0x0a; // adjust payload length (-5) - raw_packet_[6] = 0x02; // only two parameters + raw_packet_[2] = 0x07; // adjust payload length (-5) + raw_packet_[6] = 0x01; // only two parameters SetWireImage(raw_packet_, sizeof(raw_packet_) - 5); } else { SetWireImage(raw_packet_, sizeof(raw_packet_)); @@ -352,10 +352,6 @@ class QUICHE_NO_EXPORT ClientSetupMessage : public TestMessageBase { return false; } } - if (cast.role != client_setup_.role) { - QUIC_LOG(INFO) << "CLIENT_SETUP role mismatch"; - return false; - } if (cast.path != client_setup_.path) { QUIC_LOG(INFO) << "CLIENT_SETUP path mismatch"; return false; @@ -369,11 +365,11 @@ class QUICHE_NO_EXPORT ClientSetupMessage : public TestMessageBase { void ExpandVarints() override { if (client_setup_.path.has_value()) { - ExpandVarintsImpl("--vvvvvvv-vv-vv---"); + ExpandVarintsImpl("--vvvvvvv-vv---"); // first two bytes are already a 2B varint. Also, don't expand parameter // varints because that messes up the parameter length field. } else { - ExpandVarintsImpl("--vvvvvvv-vv-"); + ExpandVarintsImpl("--vvvvvvv-"); } } @@ -382,18 +378,16 @@ class QUICHE_NO_EXPORT ClientSetupMessage : public TestMessageBase { } private: - uint8_t raw_packet_[18] = { - 0x40, 0x40, 0x0f, // type + uint8_t raw_packet_[15] = { + 0x40, 0x40, 0x0c, // type 0x02, 0x01, 0x02, // versions - 0x03, // 3 parameters - 0x00, 0x01, 0x03, // role = PubSub + 0x02, // 3 parameters 0x02, 0x01, 0x32, // max_subscribe_id = 50 0x01, 0x03, 0x66, 0x6f, 0x6f, // path = "foo" }; MoqtClientSetup client_setup_ = { /*supported_versions=*/std::vector( {static_cast(1), static_cast(2)}), - /*role=*/MoqtRole::kPubSub, /*path=*/"foo", /*max_subscribe_id=*/50, }; @@ -411,10 +405,6 @@ class QUICHE_NO_EXPORT ServerSetupMessage : public TestMessageBase { QUIC_LOG(INFO) << "SERVER_SETUP selected version mismatch"; return false; } - if (cast.role != server_setup_.role) { - QUIC_LOG(INFO) << "SERVER_SETUP role mismatch"; - return false; - } if (cast.max_subscribe_id != server_setup_.max_subscribe_id) { QUIC_LOG(INFO) << "SERVER_SETUP max_subscribe_id mismatch"; return false; @@ -423,8 +413,8 @@ class QUICHE_NO_EXPORT ServerSetupMessage : public TestMessageBase { } void ExpandVarints() override { - ExpandVarintsImpl("--vvvvv-vv-"); // first two bytes are already a 2b - // varint + ExpandVarintsImpl("--vvvvv-"); // first two bytes are already a 2b + // varint } MessageStructuredData structured_data() const override { @@ -432,15 +422,13 @@ class QUICHE_NO_EXPORT ServerSetupMessage : public TestMessageBase { } private: - uint8_t raw_packet_[11] = { - 0x40, 0x41, 0x08, // type - 0x01, 0x02, // version, two parameters - 0x00, 0x01, 0x03, // role = PubSub + uint8_t raw_packet_[8] = { + 0x40, 0x41, 0x05, // type + 0x01, 0x01, // version, two parameters 0x02, 0x01, 0x32, // max_subscribe_id = 50 }; MoqtServerSetup server_setup_ = { /*selected_version=*/static_cast(1), - /*role=*/MoqtRole::kPubSub, /*max_subscribe_id=*/50, }; }; diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/tools/chat_client.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/tools/chat_client.cc index e98cf759ce..fa0c7db589 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/tools/chat_client.cc +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/tools/chat_client.cc @@ -7,17 +7,14 @@ #include #include -#include #include #include #include -#include #include #include -#include #include "absl/container/flat_hash_map.h" -#include "absl/strings/str_split.h" +#include "absl/functional/bind_front.h" #include "absl/strings/string_view.h" #include "quiche/quic/core/crypto/proof_verifier.h" #include "quiche/quic/core/io/quic_default_event_loop.h" @@ -29,7 +26,7 @@ #include "quiche/quic/moqt/moqt_outgoing_queue.h" #include "quiche/quic/moqt/moqt_priority.h" #include "quiche/quic/moqt/moqt_session.h" -#include "quiche/quic/moqt/moqt_track.h" +#include "quiche/quic/moqt/tools/moq_chat.h" #include "quiche/quic/moqt/tools/moqt_client.h" #include "quiche/quic/platform/api/quic_default_proof_providers.h" #include "quiche/quic/platform/api/quic_socket_address.h" @@ -39,13 +36,60 @@ #include "quiche/common/quiche_buffer_allocator.h" #include "quiche/common/simple_buffer_allocator.h" -namespace moqt { +namespace moqt::moq_chat { + +std::optional ChatClient::OnIncomingAnnounce( + const moqt::FullTrackName& track_namespace, AnnounceEvent announce_type) { + if (track_namespace == GetUserNamespace(my_track_name_)) { + // Ignore ANNOUNCE for my own track. + return std::optional(); + } + std::optional track_name = ConstructTrackNameFromNamespace( + track_namespace, GetChatId(my_track_name_)); + if (announce_type == AnnounceEvent::kUnannounce) { + std::cout << "UNANNOUNCE for " << track_namespace.ToString() << "\n"; + if (track_name.has_value() && other_users_.contains(*track_name)) { + session_->Unsubscribe(*track_name); + other_users_.erase(*track_name); + } + return std::nullopt; + } + std::cout << "ANNOUNCE for " << track_namespace.ToString() << "\n"; + if (!track_name.has_value()) { + std::cout << "ANNOUNCE rejected, invalid namespace\n"; + return std::make_optional( + MoqtAnnounceErrorCode::kNotASubscribedNamespace, + "Not a subscribed namespace"); + } + if (other_users_.contains(*track_name)) { + std::cout << "Duplicate ANNOUNCE, send OK and ignore\n"; + return std::nullopt; + } + if (GetUsername(my_track_name_) == GetUsername(*track_name)) { + std::cout << "ANNOUNCE for a previous instance of my track, " + "do not subscribe\n"; + return std::nullopt; + } + if (session_->SubscribeCurrentGroup( + *track_name, &remote_track_visitor_, + MoqtSubscribeParameters{std::string(GetUsername(my_track_name_)), + std::nullopt, std::nullopt, std::nullopt})) { + ++subscribes_to_make_; + other_users_.emplace(*track_name); + } + return std::nullopt; // Send ANNOUNCE_OK. +} ChatClient::ChatClient(const quic::QuicServerId& server_id, bool ignore_certificate, std::unique_ptr interface, + absl::string_view chat_id, absl::string_view username, + absl::string_view localhost, quic::QuicEventLoop* event_loop) - : event_loop_(event_loop), interface_(std::move(interface)) { + : my_track_name_(ConstructTrackName(chat_id, username, localhost)), + event_loop_(event_loop), + remote_track_visitor_(this), + interface_(std::move(interface)) { if (event_loop_ == nullptr) { quic::QuicDefaultClock* clock = quic::QuicDefaultClock::Get(); local_event_loop_ = quic::GetDefaultEventLoop()->Create(clock); @@ -72,10 +116,13 @@ ChatClient::ChatClient(const quic::QuicServerId& server_id, std::cerr << "Closed session, reason = " << error_message << "\n"; session_is_open_ = false; connect_failed_ = true; + session_ = nullptr; }; session_callbacks_.session_deleted_callback = [this]() { session_ = nullptr; }; + session_callbacks_.incoming_announce_callback = + absl::bind_front(&ChatClient::OnIncomingAnnounce, this); interface_->Initialize( [this](absl::string_view input_message) { OnTerminalLineInput(input_message); @@ -83,10 +130,7 @@ ChatClient::ChatClient(const quic::QuicServerId& server_id, event_loop_); } -bool ChatClient::Connect(absl::string_view path, absl::string_view username, - absl::string_view chat_id) { - username_ = username; - chat_strings_.emplace(chat_id); +bool ChatClient::Connect(absl::string_view path) { client_->Connect(std::string(path), std::move(session_callbacks_)); while (!session_is_open_ && !connect_failed_) { RunEventLoop(); @@ -99,6 +143,13 @@ void ChatClient::OnTerminalLineInput(absl::string_view input_message) { return; } if (input_message == "/exit") { + // Clean teardown of SUBSCRIBE_ANNOUNCES, ANNOUNCE, SUBSCRIBE. + session_->UnsubscribeAnnounces(GetChatNamespace(my_track_name_)); + session_->Unannounce(GetUserNamespace(my_track_name_)); + for (const auto& track_name : other_users_) { + session_->Unsubscribe(track_name); + } + other_users_.clear(); session_is_open_ = false; return; } @@ -111,175 +162,96 @@ void ChatClient::RemoteTrackVisitor::OnReply( const FullTrackName& full_track_name, std::optional /*largest_id*/, std::optional reason_phrase) { - client_->subscribes_to_make_--; - if (full_track_name == client_->chat_strings_->GetCatalogName()) { - std::cout << "Subscription to catalog "; - } else { - std::cout << "Subscription to user " << full_track_name.ToString() << " "; + auto it = client_->other_users_.find(full_track_name); + if (it == client_->other_users_.end()) { + std::cout << "Error: received reply for unknown user " + << full_track_name.ToString() << "\n"; + return; } + --client_->subscribes_to_make_; + std::cout << "Subscription to user " << GetUsername(*it) << " "; if (reason_phrase.has_value()) { std::cout << "REJECTED, reason = " << *reason_phrase << "\n"; + client_->other_users_.erase(it); } else { std::cout << "ACCEPTED\n"; } } void ChatClient::RemoteTrackVisitor::OnObjectFragment( - const FullTrackName& full_track_name, FullSequence sequence, + const FullTrackName& full_track_name, FullSequence /*sequence*/, MoqtPriority /*publisher_priority*/, MoqtObjectStatus /*status*/, absl::string_view object, bool end_of_message) { if (!end_of_message) { std::cerr << "Error: received partial message despite requesting " "buffering\n"; } - if (full_track_name == client_->chat_strings_->GetCatalogName()) { - if (sequence.group < client_->catalog_group_) { - std::cout << "Ignoring old catalog"; - return; - } - client_->ProcessCatalog(object, this, sequence.group, sequence.object); - return; - } - std::string username( - client_->chat_strings_->GetUsernameFromFullTrackName(full_track_name)); - if (!client_->other_users_.contains(username)) { - std::cout << "Username " << username << "doesn't exist\n"; + auto it = client_->other_users_.find(full_track_name); + if (it == client_->other_users_.end()) { + std::cout << "Error: received message for unknown user " + << full_track_name.ToString() << "\n"; return; } if (object.empty()) { return; } - client_->WriteToOutput(username, object); + client_->WriteToOutput(GetUsername(*it), object); } -bool ChatClient::AnnounceAndSubscribe() { +bool ChatClient::AnnounceAndSubscribeAnnounces() { session_ = client_->session(); if (session_ == nullptr) { std::cout << "Failed to connect.\n"; return false; } - if (!username_.empty()) { - // A server log might choose to not provide a username, thus getting all - // the messages without adding itself to the catalog. - FullTrackName my_track_name = - chat_strings_->GetFullTrackNameFromUsername(username_); - queue_ = std::make_shared( - my_track_name, MoqtForwardingPreference::kSubgroup); - publisher_.Add(queue_); - session_->set_publisher(&publisher_); - MoqtOutgoingAnnounceCallback announce_callback = - [this](FullTrackName track_namespace, - std::optional reason) { - if (reason.has_value()) { - std::cout << "ANNOUNCE rejected, " << reason->reason_phrase << "\n"; - session_->Error(MoqtError::kInternalError, - "Local ANNOUNCE rejected"); - return; - } - std::cout << "ANNOUNCE for " << track_namespace.ToString() - << " accepted\n"; + // TODO: A server log might choose to not provide a username, thus getting all + // the messages without adding itself to the catalog. + queue_ = std::make_shared( + my_track_name_, MoqtForwardingPreference::kSubgroup); + publisher_.Add(queue_); + session_->set_publisher(&publisher_); + MoqtOutgoingAnnounceCallback announce_callback = + [this](FullTrackName track_namespace, + std::optional reason) { + if (reason.has_value()) { + std::cout << "ANNOUNCE rejected, " << reason->reason_phrase << "\n"; + session_->Error(MoqtError::kInternalError, "Local ANNOUNCE rejected"); return; - }; - FullTrackName my_track_namespace = my_track_name; - my_track_namespace.NameToNamespace(); - std::cout << "Announcing " << my_track_namespace.ToString() << "\n"; - session_->Announce(my_track_namespace, std::move(announce_callback)); - } - remote_track_visitor_ = std::make_unique(this); - FullTrackName catalog_name = chat_strings_->GetCatalogName(); - if (!session_->SubscribeCurrentGroup( - catalog_name, remote_track_visitor_.get(), - MoqtSubscribeParameters{username_, std::nullopt, std::nullopt, - std::nullopt})) { - std::cout << "Failed to get catalog\n"; - return false; - } + } + std::cout << "ANNOUNCE for " << track_namespace.ToString() + << " accepted\n"; + return; + }; + std::cout << "Announcing " << GetUserNamespace(my_track_name_).ToString() + << "\n"; + session_->Announce(GetUserNamespace(my_track_name_), + std::move(announce_callback)); + + // Send SUBSCRIBE_ANNOUNCE. Pop 3 levels of namespace to get to {moq-chat, + // chat-id} + MoqtOutgoingSubscribeAnnouncesCallback subscribe_announces_callback = + [this](FullTrackName track_namespace, + std::optional error, + absl::string_view reason) { + if (error.has_value()) { + std::cout << "SUBSCRIBE_ANNOUNCES rejected, " << reason << "\n"; + session_->Error(MoqtError::kInternalError, + "Local SUBSCRIBE_ANNOUNCES rejected"); + return; + } + std::cout << "SUBSCRIBE_ANNOUNCES for " << track_namespace.ToString() + << " accepted\n"; + return; + }; + session_->SubscribeAnnounces( + GetChatNamespace(my_track_name_), std::move(subscribe_announces_callback), + MoqtSubscribeParameters{std::string(GetUsername(my_track_name_)), + std::nullopt, std::nullopt, std::nullopt}); + while (session_is_open_ && is_syncing()) { RunEventLoop(); } return session_is_open_; } -void ChatClient::ProcessCatalog(absl::string_view object, - SubscribeRemoteTrack::Visitor* visitor, - uint64_t group_sequence, - uint64_t object_sequence) { - std::string message(object); - std::istringstream f(message); - // std::string line; - bool got_version = true; - if (object_sequence == 0) { - std::cout << "Received new Catalog. Users:\n"; - got_version = false; - } - std::vector lines = - absl::StrSplit(object, '\n', absl::SkipEmpty()); - for (absl::string_view line : lines) { - if (!got_version) { - if (line != "version=1") { - session_->Error(MoqtError::kProtocolViolation, - "Catalog does not begin with version"); - return; - } - got_version = true; - continue; - } - std::string user; - bool add = true; - if (object_sequence > 0) { - switch (line[0]) { - case '-': - add = false; - break; - case '+': - break; - default: - std::cerr << "Catalog update with neither + nor -\n"; - return; - } - user = line.substr(1, line.size() - 1); - } else { - user = line; - } - if (username_ == user) { - std::cout << user << "\n"; - continue; - } - if (!add) { - session_->Unsubscribe(chat_strings_->GetFullTrackNameFromUsername(user)); - std::cout << user << "left the chat\n"; - other_users_.erase(user); - continue; - } - if (object_sequence == 0) { - std::cout << user << "\n"; - } else { - std::cout << user << " joined the chat\n"; - } - auto it = other_users_.find(user); - if (it == other_users_.end()) { - FullTrackName to_subscribe = - chat_strings_->GetFullTrackNameFromUsername(user); - auto new_user = other_users_.emplace( - std::make_pair(user, ChatUser(to_subscribe, group_sequence))); - ChatUser& user_record = new_user.first->second; - session_->SubscribeCurrentGroup(user_record.full_track_name, visitor); - subscribes_to_make_++; - } else { - if (it->second.from_group == group_sequence) { - session_->Error(MoqtError::kProtocolViolation, - "User listed twice in Catalog"); - return; - } - it->second.from_group = group_sequence; - } - } - if (object_sequence == 0) { // Eliminate users that are no longer present - absl::erase_if(other_users_, [&](const auto& kv) { - return kv.second.from_group != group_sequence; - }); - } - catalog_group_ = group_sequence; -} - -} // namespace moqt +} // namespace moqt::moq_chat diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/tools/chat_client.h b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/tools/chat_client.h index e2c341fa0c..b56142c0e8 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/tools/chat_client.h +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/tools/chat_client.h @@ -5,12 +5,10 @@ #ifndef QUICHE_QUIC_MOQT_TOOLS_CHAT_CLIENT_H #define QUICHE_QUIC_MOQT_TOOLS_CHAT_CLIENT_H -#include #include #include -#include -#include "absl/container/flat_hash_map.h" +#include "absl/container/flat_hash_set.h" #include "absl/strings/string_view.h" #include "quiche/quic/core/io/quic_event_loop.h" #include "quiche/quic/core/quic_server_id.h" @@ -21,12 +19,11 @@ #include "quiche/quic/moqt/moqt_priority.h" #include "quiche/quic/moqt/moqt_session.h" #include "quiche/quic/moqt/moqt_track.h" -#include "quiche/quic/moqt/tools/moq_chat.h" #include "quiche/quic/moqt/tools/moqt_client.h" #include "quiche/common/platform/api/quiche_export.h" #include "quiche/common/quiche_callbacks.h" -namespace moqt { +namespace moqt::moq_chat { constexpr quic::QuicTime::Delta kChatEventLoopDuration = quic::QuicTime::Delta::FromMilliseconds(500); @@ -58,6 +55,8 @@ class ChatClient { // an event loop. ChatClient(const quic::QuicServerId& server_id, bool ignore_certificate, std::unique_ptr interface, + absl::string_view chat_id, absl::string_view username, + absl::string_view localhost, quic::QuicEventLoop* event_loop = nullptr); ~ChatClient() { if (session_ != nullptr) { @@ -67,8 +66,7 @@ class ChatClient { } // Establish the MoQT session. Returns false if it fails. - bool Connect(absl::string_view path, absl::string_view username, - absl::string_view chat_id); + bool Connect(absl::string_view path); void OnTerminalLineInput(absl::string_view input_message); @@ -111,7 +109,7 @@ class ChatClient { }; // Returns false on error. - bool AnnounceAndSubscribe(); + bool AnnounceAndSubscribeAnnounces(); bool session_is_open() const { return session_is_open_; } @@ -119,29 +117,18 @@ class ChatClient { // catalog, subscribing to all the users in it, and waiting for the server // to subscribe to the local track. bool is_syncing() const { - return !catalog_group_.has_value() || subscribes_to_make_ > 0 || + return subscribes_to_make_ > 0 || (queue_ == nullptr || !queue_->HasSubscribers()); } private: void RunEventLoop() { event_loop_->RunEventLoopOnce(kChatEventLoopDuration); } - - // Objects from the same catalog group arrive on the same stream, and in - // object sequence order. - void ProcessCatalog(absl::string_view object, - moqt::SubscribeRemoteTrack::Visitor* visitor, - uint64_t group_sequence, uint64_t object_sequence); - - struct ChatUser { - moqt::FullTrackName full_track_name; - uint64_t from_group; - ChatUser(const moqt::FullTrackName& ftn, uint64_t group) - : full_track_name(ftn), from_group(group) {} - }; + // Callback for incoming announces. + std::optional OnIncomingAnnounce( + const moqt::FullTrackName& track_namespace, AnnounceEvent announce_type); // Basic session information - std::string username_; - std::optional chat_strings_; + FullTrackName my_track_name_; // General state variables // The event loop to use for this client. @@ -156,13 +143,12 @@ class ChatClient { moqt::MoqtSessionCallbacks session_callbacks_; // Related to syncing. - std::optional catalog_group_; - absl::flat_hash_map other_users_; - int subscribes_to_make_ = 1; + absl::flat_hash_set other_users_; + int subscribes_to_make_ = 0; // Related to subscriptions/announces // TODO: One for each subscribe - std::unique_ptr remote_track_visitor_; + RemoteTrackVisitor remote_track_visitor_; // Handling outgoing messages std::shared_ptr queue_; @@ -171,6 +157,6 @@ class ChatClient { std::unique_ptr interface_; }; -} // namespace moqt +} // namespace moqt::moq_chat #endif // QUICHE_QUIC_MOQT_TOOLS_CHAT_CLIENT_H diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/tools/chat_client_bin.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/tools/chat_client_bin.cc index 7617789716..5e9125cffd 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/tools/chat_client_bin.cc +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/tools/chat_client_bin.cc @@ -31,8 +31,11 @@ DEFINE_QUICHE_COMMAND_LINE_FLAG( std::string, output_file, "", "chat messages will stream to a file instead of stdout"); +using ::moqt::moq_chat::ChatClient; +using ::moqt::moq_chat::ChatUserInterface; + // Writes messages to a file, when directed from the command line. -class FileOutput : public moqt::ChatUserInterface { +class FileOutput : public ChatUserInterface { public: explicit FileOutput(absl::string_view filename, absl::string_view username) : username_(username) { @@ -66,7 +69,7 @@ class FileOutput : public moqt::ChatUserInterface { event_loop_ == nullptr) << "IoLoop called before Initialize"; while (poll(&poll_settings_, 1, 0) <= 0) { - event_loop_->RunEventLoopOnce(moqt::kChatEventLoopDuration); + event_loop_->RunEventLoopOnce(moqt::moq_chat::kChatEventLoopDuration); } std::getline(std::cin, message_to_send); callback_(message_to_send); @@ -86,7 +89,7 @@ class FileOutput : public moqt::ChatUserInterface { }; // Writes messages to the terminal, without messing up entry of new messages. -class CliOutput : public moqt::ChatUserInterface { +class CliOutput : public ChatUserInterface { public: void Initialize(quic::InteractiveCli::LineCallback callback, quic::QuicEventLoop* event_loop) override { @@ -107,7 +110,7 @@ class CliOutput : public moqt::ChatUserInterface { QUIC_BUG_IF(quic_bug_moq_chat_user_interface_unitialized, event_loop_ == nullptr) << "IoLoop called before Initialize"; - event_loop_->RunEventLoopOnce(moqt::kChatEventLoopDuration); + event_loop_->RunEventLoopOnce(moqt::moq_chat::kChatEventLoopDuration); } private: @@ -118,10 +121,11 @@ class CliOutput : public moqt::ChatUserInterface { // A client for MoQT over chat, used for interop testing. See // https://afrind.github.io/draft-frindell-moq-chat/draft-frindell-moq-chat.html int main(int argc, char* argv[]) { - const char* usage = "Usage: chat_client [options] "; + const char* usage = + "Usage: chat_client [options] "; std::vector args = quiche::QuicheParseCommandLineFlags(usage, argc, argv); - if (args.size() != 3) { + if (args.size() != 4) { quiche::QuichePrintCommandLineFlagHelp(usage); return 1; } @@ -130,24 +134,25 @@ int main(int argc, char* argv[]) { std::string path = url.PathParamsQuery(); const std::string& username = args[1]; const std::string& chat_id = args[2]; + std::string localhost = args[3]; std::string output_filename = quiche::GetQuicheCommandLineFlag(FLAGS_output_file); - std::unique_ptr interface; + std::unique_ptr interface; if (!output_filename.empty()) { interface = std::make_unique(output_filename, username); } else { // Use the CLI. interface = std::make_unique(); } - moqt::ChatClient client( + ChatClient client( server_id, quiche::GetQuicheCommandLineFlag(FLAGS_disable_certificate_verification), - std::move(interface)); + std::move(interface), chat_id, username, localhost); - if (!client.Connect(path, username, chat_id)) { + if (!client.Connect(path)) { return 1; } - if (!client.AnnounceAndSubscribe()) { + if (!client.AnnounceAndSubscribeAnnounces()) { return 1; } client.IoLoop(); diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/tools/chat_server.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/tools/chat_server.cc index 243d13b636..e6a03f9f50 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/tools/chat_server.cc +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/tools/chat_server.cc @@ -10,54 +10,113 @@ #include #include +#include "absl/functional/bind_front.h" #include "absl/status/status.h" #include "absl/status/statusor.h" -#include "absl/strings/str_cat.h" #include "absl/strings/string_view.h" #include "quiche/quic/core/crypto/proof_source.h" #include "quiche/quic/moqt/moqt_live_relay_queue.h" #include "quiche/quic/moqt/moqt_messages.h" -#include "quiche/quic/moqt/moqt_outgoing_queue.h" #include "quiche/quic/moqt/moqt_priority.h" #include "quiche/quic/moqt/moqt_session.h" #include "quiche/quic/moqt/tools/moq_chat.h" #include "quiche/quic/moqt/tools/moqt_server.h" -#include "quiche/common/platform/api/quiche_mem_slice.h" -#include "quiche/common/quiche_buffer_allocator.h" -#include "quiche/common/simple_buffer_allocator.h" -namespace moqt { +namespace moqt::moq_chat { + +std::optional +ChatServer::ChatServerSessionHandler::OnIncomingAnnounce( + const moqt::FullTrackName& track_namespace, AnnounceEvent announce_type) { + if (track_name_.has_value() && + GetUserNamespace(*track_name_) != track_namespace) { + // ChatServer only supports one track per client session at a time. Return + // ANNOUNCE_OK and exit. + return std::nullopt; + } + // Accept the ANNOUNCE regardless of the chat_id. + track_name_ = ConstructTrackNameFromNamespace(track_namespace, + GetChatId(track_namespace)); + if (!track_name_.has_value()) { + std::cout << "Malformed ANNOUNCE namespace\n"; + return MoqtAnnounceErrorReason( + MoqtAnnounceErrorCode::kNotASubscribedNamespace, + "Not a valid namespace for this chat."); + } + if (announce_type == AnnounceEvent::kUnannounce) { + std::cout << "Received UNANNOUNCE for " << track_namespace.ToString() + << "\n"; + server_->DeleteUser(*track_name_); + track_name_.reset(); + return std::nullopt; + } + std::cout << "Received ANNOUNCE for " << track_namespace.ToString() << "\n"; + session_->SubscribeCurrentGroup(*track_name_, + server_->remote_track_visitor()); + server_->AddUser(*track_name_); + return std::nullopt; +} + +void ChatServer::ChatServerSessionHandler::OnOutgoingAnnounceReply( + FullTrackName track_namespace, + std::optional error_message) { + // Log the result; the server doesn't really care. + std::cout << "ANNOUNCE for " << track_namespace.ToString(); + if (error_message.has_value()) { + std::cout << " failed with error: " << error_message->reason_phrase << "\n"; + } else { + std::cout << " succeeded\n"; + } +} ChatServer::ChatServerSessionHandler::ChatServerSessionHandler( MoqtSession* session, ChatServer* server) : session_(session), server_(server) { - session_->callbacks().incoming_announce_callback = - [&](FullTrackName track_namespace, AnnounceEvent announce_type) { - FullTrackName track_name = track_namespace; - track_name.AddElement(""); - if (announce_type == AnnounceEvent::kAnnounce) { - std::cout << "Received ANNOUNCE for "; - } else { - std::cout << "Received UNANNOUNCE for "; - } - std::cout << track_namespace.ToString() << "\n"; - username_ = server_->strings().GetUsernameFromFullTrackName(track_name); - if (username_->empty()) { - std::cout << "Malformed ANNOUNCE namespace\n"; - return std::nullopt; - } - session_->SubscribeCurrentGroup(track_name, - server_->remote_track_visitor()); - server_->AddUser(*username_); - return std::nullopt; - }; - // TODO(martinduke): Add a callback for UNANNOUNCE that deletes the user and - // clears username_, but keeps the handler. + session_->callbacks().incoming_announce_callback = absl::bind_front( + &ChatServer::ChatServerSessionHandler::OnIncomingAnnounce, this); session_->callbacks().session_terminated_callback = - [&](absl::string_view error_message) { + [this](absl::string_view error_message) { std::cout << "Session terminated, reason = " << error_message << "\n"; session_ = nullptr; - server_->DeleteSession(it_); + if (track_name_.has_value()) { + server_->DeleteUser(*track_name_); + } + }; + session_->callbacks().incoming_subscribe_announces_callback = + [this](const moqt::FullTrackName& chat_namespace, + SubscribeEvent subscribe_type) { + if (subscribe_type == SubscribeEvent::kSubscribe) { + subscribed_namespaces_.insert(chat_namespace); + std::cout << "Received SUBSCRIBE_ANNOUNCES for "; + } else { + subscribed_namespaces_.erase(chat_namespace); + std::cout << "Received UNSUBSCRIBE_ANNOUNCES for "; + } + std::cout << chat_namespace.ToString() << "\n"; + if (!IsValidChatNamespace(chat_namespace)) { + std::cout << "Not a valid moq-chat namespace.\n"; + return std::make_optional( + MoqtSubscribeErrorReason{SubscribeErrorCode::kTrackDoesNotExist, + "Not a valid namespace for this chat."}); + } + if (subscribe_type == SubscribeEvent::kUnsubscribe) { + return std::optional(); + } + // Send all ANNOUNCE. + for (auto& [track_name, queue] : server_->user_queues_) { + std::cout << "Sending ANNOUNCE for " + << GetUserNamespace(track_name).ToString() << "\n"; + if (track_name_.has_value() && + GetUsername(*track_name_) == GetUsername(track_name)) { + // Don't ANNOUNCE a client to itself. + continue; + } + session_->Announce( + GetUserNamespace(track_name), + absl::bind_front(&ChatServer::ChatServerSessionHandler:: + OnOutgoingAnnounceReply, + this)); + } + return std::optional(); }; session_->set_publisher(server_->publisher()); } @@ -66,8 +125,8 @@ ChatServer::ChatServerSessionHandler::~ChatServerSessionHandler() { if (!server_->is_running_) { return; } - if (username_.has_value()) { - server_->DeleteUser(*username_); + if (track_name_.has_value()) { + server_->DeleteUser(*track_name_); } } @@ -78,20 +137,12 @@ void ChatServer::RemoteTrackVisitor::OnReply( const moqt::FullTrackName& full_track_name, std::optional /*largest_id*/, std::optional reason_phrase) { - std::cout << "Subscription to user " - << server_->strings().GetUsernameFromFullTrackName(full_track_name) - << " "; + std::cout << "Subscription to " << full_track_name.ToString(); if (reason_phrase.has_value()) { - std::cout << "REJECTED, reason = " << *reason_phrase << "\n"; - std::string username = - server_->strings().GetUsernameFromFullTrackName(full_track_name); - if (!username.empty()) { - std::cout << "Rejection was for malformed namespace\n"; - return; - } - server_->DeleteUser(username); + std::cout << " REJECTED, reason = " << *reason_phrase << "\n"; + server_->DeleteUser(full_track_name); } else { - std::cout << "ACCEPTED\n"; + std::cout << " ACCEPTED\n"; } } @@ -103,40 +154,26 @@ void ChatServer::RemoteTrackVisitor::OnObjectFragment( std::cerr << "Error: received partial message despite requesting " "buffering\n"; } - std::string username = - server_->strings().GetUsernameFromFullTrackName(full_track_name); - if (username.empty()) { - std::cout << "Received user message with malformed namespace\n"; - return; - } - auto it = server_->user_queues_.find(username); + auto it = server_->user_queues_.find(full_track_name); if (it == server_->user_queues_.end()) { - std::cerr << "Error: received message for unknown user " << username - << "\n"; + std::cerr << "Error: received message for unknown track " + << full_track_name.ToString() << "\n"; return; } if (status != MoqtObjectStatus::kNormal) { it->second->AddObject(sequence, status); return; } - if (!server_->WriteToFile(username, object)) { - std::cout << username << ": " << object << "\n\n"; + if (!server_->WriteToFile(GetUsername(full_track_name), object)) { + std::cout << GetUsername(full_track_name) << ": " << object << "\n\n"; } it->second->AddObject(sequence, object); } ChatServer::ChatServer(std::unique_ptr proof_source, - absl::string_view chat_id, absl::string_view output_file) + absl::string_view output_file) : server_(std::move(proof_source), std::move(incoming_session_callback_)), - strings_(chat_id), - catalog_(std::make_shared( - strings_.GetCatalogName(), MoqtForwardingPreference::kSubgroup)), remote_track_visitor_(this) { - catalog_->AddObject(quiche::QuicheMemSlice(quiche::QuicheBuffer::Copy( - quiche::SimpleBufferAllocator::Get(), - MoqChatStrings::kCatalogHeader)), - /*key=*/true); - publisher_.Add(catalog_); if (!output_file.empty()) { output_filename_ = output_file; } @@ -154,27 +191,33 @@ ChatServer::~ChatServer() { server_.quic_server().Shutdown(); } -void ChatServer::AddUser(absl::string_view username) { - std::string catalog_data = absl::StrCat("+", username); - catalog_->AddObject(quiche::QuicheMemSlice(quiche::QuicheBuffer::Copy( - quiche::SimpleBufferAllocator::Get(), catalog_data)), - /*key=*/false); +void ChatServer::AddUser(FullTrackName track_name) { // Add a local track. - user_queues_[username] = std::make_shared( - strings_.GetFullTrackNameFromUsername(username), - MoqtForwardingPreference::kSubgroup); - publisher_.Add(user_queues_[username]); + user_queues_[track_name] = std::make_shared( + track_name, MoqtForwardingPreference::kSubgroup); + publisher_.Add(user_queues_[track_name]); + FullTrackName track_namespace = track_name; + track_namespace.NameToNamespace(); + for (auto& session : sessions_) { + session.AnnounceIfSubscribed(track_namespace); + } } -void ChatServer::DeleteUser(absl::string_view username) { - // Delete from Catalog. - std::string catalog_data = absl::StrCat("-", username); - catalog_->AddObject(quiche::QuicheMemSlice(quiche::QuicheBuffer::Copy( - quiche::SimpleBufferAllocator::Get(), catalog_data)), - /*key=*/false); - user_queues_[username]->RemoveAllSubscriptions(); - user_queues_.erase(username); - publisher_.Delete(strings_.GetFullTrackNameFromUsername(username)); +void ChatServer::DeleteUser(FullTrackName track_name) { + if (!is_running_) { + return; + } + // RemoveAllSubscriptions() sends a SUBSCRIBE_DONE for each. + user_queues_[track_name]->RemoveAllSubscriptions(); + user_queues_.erase(track_name); + publisher_.Delete(track_name); + FullTrackName track_namespace = GetUserNamespace(track_name); + for (auto& session : sessions_) { + session.UnannounceIfSubscribed(track_namespace); + } + if (user_queues_.empty()) { + std::cout << "No more users!\n"; + } } bool ChatServer::WriteToFile(absl::string_view username, @@ -189,7 +232,7 @@ bool ChatServer::WriteToFile(absl::string_view username, absl::StatusOr ChatServer::IncomingSessionHandler( absl::string_view path) { - if (!strings_.IsValidPath(path)) { + if (!IsValidPath(path)) { return absl::NotFoundError("Unknown endpoint; try \"/moq-chat\"."); } return [this](MoqtSession* session) { @@ -199,4 +242,4 @@ absl::StatusOr ChatServer::IncomingSessionHandler( }; } -} // namespace moqt +} // namespace moqt::moq_chat diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/tools/chat_server.h b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/tools/chat_server.h index 0c883ed470..5a4c3b9ee1 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/tools/chat_server.h +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/tools/chat_server.h @@ -5,7 +5,6 @@ #ifndef QUICHE_QUIC_MOQT_TOOLS_CHAT_SERVER_H_ #define QUICHE_QUIC_MOQT_TOOLS_CHAT_SERVER_H_ -#include #include #include #include @@ -13,26 +12,27 @@ #include #include "absl/container/flat_hash_map.h" +#include "absl/container/flat_hash_set.h" +#include "absl/functional/bind_front.h" #include "absl/status/statusor.h" #include "absl/strings/string_view.h" #include "quiche/quic/core/crypto/proof_source.h" #include "quiche/quic/moqt/moqt_known_track_publisher.h" #include "quiche/quic/moqt/moqt_live_relay_queue.h" #include "quiche/quic/moqt/moqt_messages.h" -#include "quiche/quic/moqt/moqt_outgoing_queue.h" #include "quiche/quic/moqt/moqt_priority.h" #include "quiche/quic/moqt/moqt_publisher.h" #include "quiche/quic/moqt/moqt_session.h" #include "quiche/quic/moqt/moqt_track.h" -#include "quiche/quic/moqt/tools/moq_chat.h" #include "quiche/quic/moqt/tools/moqt_server.h" namespace moqt { +namespace moq_chat { class ChatServer { public: ChatServer(std::unique_ptr proof_source, - absl::string_view chat_id, absl::string_view output_file); + absl::string_view output_file); ~ChatServer(); class RemoteTrackVisitor : public SubscribeRemoteTrack::Visitor { @@ -62,12 +62,43 @@ class ChatServer { it_ = it; } + void AnnounceIfSubscribed(FullTrackName track_namespace) { + for (const FullTrackName& subscribed_namespace : subscribed_namespaces_) { + if (track_namespace.InNamespace(subscribed_namespace)) { + session_->Announce( + track_namespace, + absl::bind_front(&ChatServer::ChatServerSessionHandler:: + OnOutgoingAnnounceReply, + this)); + return; + } + } + } + + void UnannounceIfSubscribed(FullTrackName track_namespace) { + for (const FullTrackName& subscribed_namespace : subscribed_namespaces_) { + if (track_namespace.InNamespace(subscribed_namespace)) { + session_->Unannounce(track_namespace); + return; + } + } + } + private: + // Callback for incoming announces. + std::optional OnIncomingAnnounce( + const moqt::FullTrackName& track_namespace, + AnnounceEvent announce_type); + void OnOutgoingAnnounceReply( + FullTrackName track_namespace, + std::optional error_message); + MoqtSession* session_; // Not owned. // This design assumes that each server has exactly one username, although // in theory there could be multiple users on one session. - std::optional username_; + std::optional track_name_; ChatServer* server_; // Not owned. + absl::flat_hash_set subscribed_namespaces_; // The iterator of this entry in ChatServer::sessions_, so it can destroy // itself later. std::list::const_iterator it_; @@ -77,11 +108,9 @@ class ChatServer { RemoteTrackVisitor* remote_track_visitor() { return &remote_track_visitor_; } - MoqtOutgoingQueue* catalog() { return catalog_.get(); } + void AddUser(FullTrackName track_name); - void AddUser(absl::string_view username); - - void DeleteUser(absl::string_view username); + void DeleteUser(FullTrackName track_name); void DeleteSession(std::list::const_iterator it) { sessions_.erase(it); @@ -92,8 +121,6 @@ class ChatServer { MoqtPublisher* publisher() { return &publisher_; } - MoqChatStrings& strings() { return strings_; } - int num_users() const { return user_queues_.size(); } private: @@ -106,16 +133,14 @@ class ChatServer { bool is_running_ = true; MoqtServer server_; std::list sessions_; - MoqChatStrings strings_; MoqtKnownTrackPublisher publisher_; - std::shared_ptr catalog_; RemoteTrackVisitor remote_track_visitor_; - // indexed by username - absl::flat_hash_map> + absl::flat_hash_map> user_queues_; std::string output_filename_; std::ofstream output_file_; }; +} // namespace moq_chat } // namespace moqt #endif // QUICHE_QUIC_MOQT_TOOLS_CHAT_SERVER_H_ diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/tools/chat_server_bin.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/tools/chat_server_bin.cc index 899c258e7e..b905ce357b 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/tools/chat_server_bin.cc +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/tools/chat_server_bin.cc @@ -24,15 +24,16 @@ DEFINE_QUICHE_COMMAND_LINE_FLAG(uint16_t, port, 9667, // A server for MoQT over chat, used for interop testing. See // https://afrind.github.io/draft-frindell-moq-chat/draft-frindell-moq-chat.html int main(int argc, char* argv[]) { - const char* usage = "Usage: chat_server [options] "; + const char* usage = "Usage: chat_server [options]"; std::vector args = quiche::QuicheParseCommandLineFlags(usage, argc, argv); - if (args.size() != 1) { + if (!args.empty()) { quiche::QuichePrintCommandLineFlagHelp(usage); return 1; } - moqt::ChatServer server(quiche::CreateDefaultProofSource(), argv[1], - quiche::GetQuicheCommandLineFlag(FLAGS_output_file)); + moqt::moq_chat::ChatServer server( + quiche::CreateDefaultProofSource(), + quiche::GetQuicheCommandLineFlag(FLAGS_output_file)); quiche::QuicheIpAddress bind_address; QUICHE_CHECK(bind_address.FromString( quiche::GetQuicheCommandLineFlag(FLAGS_bind_address))); diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/tools/moq_chat.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/tools/moq_chat.cc new file mode 100644 index 0000000000..0ec5b64061 --- /dev/null +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/tools/moq_chat.cc @@ -0,0 +1,76 @@ +// Copyright 2024 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "quiche/quic/moqt/tools/moq_chat.h" + +#include + +#include "absl/strings/str_cat.h" +#include "absl/strings/string_view.h" +#include "absl/time/clock.h" +#include "absl/time/time.h" +#include "quiche/quic/moqt/moqt_messages.h" +#include "quiche/common/platform/api/quiche_logging.h" + +namespace moqt::moq_chat { + +bool IsValidPath(absl::string_view path) { return path == kWebtransPath; } + +bool IsValidNamespace(const FullTrackName& track_namespace) { + return track_namespace.tuple().size() == kFullPathLength - 1 && + track_namespace.tuple()[0] == kBasePath; +} + +bool IsValidChatNamespace(const FullTrackName& track_namespace) { + return track_namespace.tuple().size() == 2 && + track_namespace.tuple()[0] == kBasePath; +} + +FullTrackName ConstructTrackName(absl::string_view chat_id, + absl::string_view username, + absl::string_view device_id) { + return FullTrackName{kBasePath, + chat_id, + username, + device_id, + absl::StrCat(ToUnixSeconds(::absl::Now())), + kNameField}; +} + +std::optional ConstructTrackNameFromNamespace( + const FullTrackName& track_namespace, absl::string_view chat_id) { + if (track_namespace.tuple().size() != kFullPathLength - 1) { + return std::nullopt; + } + if (track_namespace.tuple()[0] != kBasePath || + track_namespace.tuple()[1] != chat_id) { + return std::nullopt; + } + FullTrackName track_name = track_namespace; + track_name.AddElement(kNameField); + return track_name; +} + +absl::string_view GetUsername(const FullTrackName& track_name) { + QUICHE_DCHECK(track_name.tuple().size() > 2); + return track_name.tuple()[2]; +} + +absl::string_view GetChatId(const FullTrackName& track_name) { + QUICHE_DCHECK(track_name.tuple().size() > 1); + return track_name.tuple()[1]; +} + +FullTrackName GetUserNamespace(const FullTrackName& track_name) { + QUICHE_DCHECK(track_name.tuple().size() == kFullPathLength); + FullTrackName track_namespace = track_name; + track_namespace.NameToNamespace(); + return track_namespace; +} + +FullTrackName GetChatNamespace(const FullTrackName& track_name) { + return FullTrackName{track_name.tuple()[0], track_name.tuple()[1]}; +} + +} // namespace moqt::moq_chat diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/tools/moq_chat.h b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/tools/moq_chat.h index 6789f828da..02f23e4501 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/tools/moq_chat.h +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/moqt/tools/moq_chat.h @@ -5,64 +5,56 @@ #ifndef QUICHE_QUIC_MOQT_TOOLS_MOQ_CHAT_H #define QUICHE_QUIC_MOQT_TOOLS_MOQ_CHAT_H -#include -#include +#include +#include -#include "absl/strings/str_cat.h" -#include "absl/strings/str_split.h" #include "absl/strings/string_view.h" #include "quiche/quic/moqt/moqt_messages.h" +// Utilities for manipulating moq-chat paths, names, and namespaces. + namespace moqt { -// This class encodes all the syntax in moq-chat strings: paths, full track -// names, and catalog entries. -class MoqChatStrings { - public: - explicit MoqChatStrings(absl::string_view chat_id) : chat_id_(chat_id) {} +namespace moq_chat { - static constexpr absl::string_view kBasePath = "moq-chat"; - static constexpr absl::string_view kParticipantPath = "participant"; - static constexpr absl::string_view kCatalogPath = "catalog"; - static constexpr absl::string_view kCatalogHeader = "version=1\n"; +constexpr absl::string_view kWebtransPath = "/moq-relay"; +// The order of fields is "moq-chat", chat-id, username, device-id, timestamp, +// "chat". +// The number of tiers in a full track name. +constexpr size_t kFullPathLength = 6; +// The first element in the track namespace or name. +constexpr absl::string_view kBasePath = "moq-chat"; +// The last element in the track name. +constexpr absl::string_view kNameField = "chat"; - // Verifies that the WebTransport path matches the spec. - bool IsValidPath(absl::string_view path) const { - return path == absl::StrCat("/", kBasePath); - } +// Verifies that the WebTransport path matches the spec. +bool IsValidPath(absl::string_view path); - // Returns "" if the track namespace is not a participant track. - std::string GetUsernameFromFullTrackName( - FullTrackName full_track_name) const { - if (full_track_name.tuple().size() != 2) { - return ""; - } - if (!full_track_name.tuple()[1].empty()) { - return ""; - } - std::vector elements = - absl::StrSplit(full_track_name.tuple()[0], '/'); - if (elements.size() != 4 || elements[0] != kBasePath || - elements[1] != chat_id_ || elements[2] != kParticipantPath) { - return ""; - } - return std::string(elements[3]); - } +bool IsValidTrackNamespace(const FullTrackName& track_namespace); +bool IsValidChatNamespace(const FullTrackName& track_namespace); - FullTrackName GetFullTrackNameFromUsername(absl::string_view username) const { - return FullTrackName{absl::StrCat(kBasePath, "/", chat_id_, "/", - kParticipantPath, "/", username), - ""}; - } +// Given a chat-id and username, returns a full track name for moq-chat. +FullTrackName ConstructTrackName(absl::string_view chat_id, + absl::string_view username, + absl::string_view device_id); - FullTrackName GetCatalogName() const { - return FullTrackName{absl::StrCat(kBasePath, "/", chat_id_), - absl::StrCat("/", kCatalogPath)}; - } +// constructs a full track name based on the track_namespace. If the namespace +// is syntactically incorrect, or does not match the expected value of +// |chat-id|, returns nullopt +std::optional ConstructTrackNameFromNamespace( + const FullTrackName& track_namespace, absl::string_view chat_id); - private: - const std::string chat_id_; -}; +// Strips "chat" from the end of |track_name| to use in ANNOUNCE. +FullTrackName GetUserNamespace(const FullTrackName& track_name); + +// Returns {"moq-chat", chat-id}, useful for SUBSCRIBE_ANNOUNCES. +FullTrackName GetChatNamespace(const FullTrackName& track_name); + +absl::string_view GetUsername(const FullTrackName& track_name); + +absl::string_view GetChatId(const FullTrackName& track_name); + +} // namespace moq_chat } // namespace moqt diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/test_tools/crypto_test_utils.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/test_tools/crypto_test_utils.cc index 0beaa8e723..f062ef2000 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/test_tools/crypto_test_utils.cc +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/test_tools/crypto_test_utils.cc @@ -814,8 +814,10 @@ CryptoHandshakeMessage CreateCHLO( size_t value_len = value.length(); if (value_len > 0 && value[0] == '#') { // This is ascii encoded hex. - std::string hex_value = - absl::HexStringToBytes(absl::string_view(&value[1])); + std::string hex_value; + QUICHE_CHECK( + absl::HexStringToBytes(absl::string_view(&value[1]), &hex_value)); + msg.SetStringPiece(quic_tag, hex_value); continue; } diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/test_tools/mock_quic_session_visitor.h b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/test_tools/mock_quic_session_visitor.h index ab230b4664..3ef812d1ff 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/test_tools/mock_quic_session_visitor.h +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/test_tools/mock_quic_session_visitor.h @@ -33,8 +33,6 @@ class MockQuicSessionVisitor : public QuicTimeWaitListManager::Visitor { (override)); MOCK_METHOD(void, OnConnectionIdRetired, (const quic::QuicConnectionId& server_connection_id), (override)); - MOCK_METHOD(void, OnConnectionAddedToTimeWaitList, - (QuicConnectionId connection_id), (override)); MOCK_METHOD(void, OnServerPreferredAddressAvailable, (const QuicSocketAddress& server_preferred_address), (override)); }; diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/test_tools/quic_connection_peer.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/test_tools/quic_connection_peer.cc index ccee6ebb74..73bce8d585 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/test_tools/quic_connection_peer.cc +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/test_tools/quic_connection_peer.cc @@ -11,6 +11,7 @@ #include "absl/strings/string_view.h" #include "absl/types/variant.h" #include "quiche/quic/core/congestion_control/send_algorithm_interface.h" +#include "quiche/quic/core/quic_connection.h" #include "quiche/quic/core/quic_connection_alarms.h" #include "quiche/quic/core/quic_packet_writer.h" #include "quiche/quic/core/quic_received_packet_manager.h" @@ -606,5 +607,11 @@ void QuicConnectionPeer::OnForwardProgressMade(QuicConnection* connection) { connection->OnForwardProgressMade(); } +// static +bool QuicConnectionPeer::CanReceiveAckFrequencyFrames( + QuicConnection* connection) { + return connection->can_receive_ack_frequency_immediate_ack_; +} + } // namespace test } // namespace quic diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/test_tools/quic_connection_peer.h b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/test_tools/quic_connection_peer.h index 50babe7a7d..401d86a9a1 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/test_tools/quic_connection_peer.h +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/test_tools/quic_connection_peer.h @@ -249,6 +249,8 @@ class QuicConnectionPeer { static void DisableEcnCodepointValidation(QuicConnection* connection); static void OnForwardProgressMade(QuicConnection* connection); + + static bool CanReceiveAckFrequencyFrames(QuicConnection* connection); }; } // namespace test diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/test_tools/quic_stream_send_buffer_peer.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/test_tools/quic_stream_send_buffer_peer.cc index c81b45ec5b..c2c2806c39 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/test_tools/quic_stream_send_buffer_peer.cc +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/test_tools/quic_stream_send_buffer_peer.cc @@ -27,11 +27,6 @@ const BufferedSlice* QuicStreamSendBufferPeer::CurrentWriteSlice( return QuicIntervalDequePeer::GetItem(&send_buffer->interval_deque_, wi); } -QuicStreamOffset QuicStreamSendBufferPeer::EndOffset( - QuicStreamSendBuffer* send_buffer) { - return send_buffer->current_end_offset_; -} - // static QuicByteCount QuicStreamSendBufferPeer::TotalLength( QuicStreamSendBuffer* send_buffer) { diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/test_tools/quic_stream_send_buffer_peer.h b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/test_tools/quic_stream_send_buffer_peer.h index 979229023c..896924105b 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/test_tools/quic_stream_send_buffer_peer.h +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/test_tools/quic_stream_send_buffer_peer.h @@ -19,8 +19,6 @@ class QuicStreamSendBufferPeer { static const BufferedSlice* CurrentWriteSlice( QuicStreamSendBuffer* send_buffer); - static QuicStreamOffset EndOffset(QuicStreamSendBuffer* send_buffer); - static QuicByteCount TotalLength(QuicStreamSendBuffer* send_buffer); static int32_t write_index(QuicStreamSendBuffer* send_buffer); diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/test_tools/quic_test_utils.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/test_tools/quic_test_utils.cc index a2d079837b..2b49ce27a5 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/test_tools/quic_test_utils.cc +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/test_tools/quic_test_utils.cc @@ -20,11 +20,7 @@ #include "openssl/sha.h" #include "quiche/quic/core/crypto/crypto_framer.h" #include "quiche/quic/core/crypto/crypto_handshake.h" -#include "quiche/quic/core/crypto/crypto_utils.h" -#include "quiche/quic/core/crypto/null_decrypter.h" -#include "quiche/quic/core/crypto/null_encrypter.h" -#include "quiche/quic/core/crypto/quic_decrypter.h" -#include "quiche/quic/core/crypto/quic_encrypter.h" +#include "quiche/quic/core/frames/quic_immediate_ack_frame.h" #include "quiche/quic/core/http/quic_spdy_client_session.h" #include "quiche/quic/core/quic_config.h" #include "quiche/quic/core/quic_data_writer.h" @@ -35,8 +31,6 @@ #include "quiche/quic/core/quic_types.h" #include "quiche/quic/core/quic_utils.h" #include "quiche/quic/core/quic_versions.h" -#include "quiche/quic/platform/api/quic_flags.h" -#include "quiche/quic/platform/api/quic_logging.h" #include "quiche/quic/test_tools/crypto_test_utils.h" #include "quiche/quic/test_tools/quic_config_peer.h" #include "quiche/quic/test_tools/quic_connection_peer.h" @@ -449,6 +443,11 @@ bool NoOpFramerVisitor::OnAckFrequencyFrame( return true; } +bool NoOpFramerVisitor::OnImmediateAckFrame( + const QuicImmediateAckFrame& /*frame*/) { + return true; +} + bool NoOpFramerVisitor::OnResetStreamAtFrame( const QuicResetStreamAtFrame& /*frame*/) { return true; @@ -1076,14 +1075,14 @@ QuicEncryptedPacket* ConstructMisFramedEncryptedPacket( BuildUnsizedDataPacket(&framer, header, frames)); EXPECT_TRUE(packet != nullptr); - // Now set the frame type to 0x1F, which is an invalid frame type. + // Now set the frame type to 0x3F, which is an invalid frame type. reinterpret_cast( packet->mutable_data())[GetStartOfEncryptedData( framer.transport_version(), GetIncludedDestinationConnectionIdLength(header), GetIncludedSourceConnectionIdLength(header), version_flag, false /* no diversification nonce */, packet_number_length, - header.retry_token_length_length, 0, header.length_length)] = 0x1F; + header.retry_token_length_length, 0, header.length_length)] = 0x3F; char* buffer = new char[kMaxOutgoingPacketSize]; size_t encrypted_length = diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/test_tools/quic_test_utils.h b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/test_tools/quic_test_utils.h index 10f9fb1ec8..8946ccf53b 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/test_tools/quic_test_utils.h +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/test_tools/quic_test_utils.h @@ -21,6 +21,7 @@ #include "quiche/quic/core/congestion_control/loss_detection_interface.h" #include "quiche/quic/core/congestion_control/send_algorithm_interface.h" #include "quiche/quic/core/crypto/transport_parameters.h" +#include "quiche/quic/core/frames/quic_immediate_ack_frame.h" #include "quiche/quic/core/frames/quic_reset_stream_at_frame.h" #include "quiche/quic/core/http/http_decoder.h" #include "quiche/quic/core/http/quic_server_session_base.h" @@ -357,6 +358,8 @@ class MockFramerVisitor : public QuicFramerVisitorInterface { (override)); MOCK_METHOD(bool, OnAckFrequencyFrame, (const QuicAckFrequencyFrame& frame), (override)); + MOCK_METHOD(bool, OnImmediateAckFrame, (const QuicImmediateAckFrame& frame), + (override)); MOCK_METHOD(bool, OnResetStreamAtFrame, (const QuicResetStreamAtFrame& frame), (override)); MOCK_METHOD(void, OnPacketComplete, (), (override)); @@ -426,6 +429,7 @@ class NoOpFramerVisitor : public QuicFramerVisitorInterface { bool OnMessageFrame(const QuicMessageFrame& frame) override; bool OnHandshakeDoneFrame(const QuicHandshakeDoneFrame& frame) override; bool OnAckFrequencyFrame(const QuicAckFrequencyFrame& frame) override; + bool OnImmediateAckFrame(const QuicImmediateAckFrame& frame) override; bool OnResetStreamAtFrame(const QuicResetStreamAtFrame& frame) override; void OnPacketComplete() override {} bool IsValidStatelessResetToken( diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/test_tools/simple_quic_framer.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/test_tools/simple_quic_framer.cc index 8ad6656639..90b75e8f9f 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/test_tools/simple_quic_framer.cc +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/test_tools/simple_quic_framer.cc @@ -7,13 +7,13 @@ #include #include #include -#include #include #include "absl/memory/memory.h" #include "absl/strings/string_view.h" #include "quiche/quic/core/crypto/quic_decrypter.h" #include "quiche/quic/core/crypto/quic_encrypter.h" +#include "quiche/quic/core/frames/quic_immediate_ack_frame.h" #include "quiche/quic/core/frames/quic_reset_stream_at_frame.h" #include "quiche/quic/core/quic_types.h" @@ -240,6 +240,12 @@ class SimpleFramerVisitor : public QuicFramerVisitorInterface { return true; } + bool OnImmediateAckFrame(const QuicImmediateAckFrame& frame) override { + immediate_ack_frames_.push_back(frame); + frame_types_.push_back(IMMEDIATE_ACK_FRAME); + return true; + } + bool OnResetStreamAtFrame(const QuicResetStreamAtFrame& frame) override { reset_stream_at_frames_.push_back(frame); frame_types_.push_back(RESET_STREAM_AT_FRAME); @@ -349,6 +355,7 @@ class SimpleFramerVisitor : public QuicFramerVisitorInterface { std::vector message_frames_; std::vector handshake_done_frames_; std::vector ack_frequency_frames_; + std::vector immediate_ack_frames_; std::vector reset_stream_at_frames_; std::vector> stream_data_; std::vector> crypto_data_; diff --git a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/tools/quic_packet_printer_bin.cc b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/tools/quic_packet_printer_bin.cc index 95d0d1d887..9aad0aa826 100644 --- a/naiveproxy/src/net/third_party/quiche/src/quiche/quic/tools/quic_packet_printer_bin.cc +++ b/naiveproxy/src/net/third_party/quiche/src/quiche/quic/tools/quic_packet_printer_bin.cc @@ -34,12 +34,10 @@ #include "absl/strings/escaping.h" #include "absl/strings/string_view.h" +#include "quiche/quic/core/frames/quic_immediate_ack_frame.h" #include "quiche/quic/core/quic_framer.h" #include "quiche/quic/core/quic_types.h" -#include "quiche/quic/core/quic_utils.h" -#include "quiche/quic/platform/api/quic_flags.h" #include "quiche/common/platform/api/quiche_command_line_flags.h" -#include "quiche/common/quiche_text_utils.h" DEFINE_QUICHE_COMMAND_LINE_FLAG(std::string, quic_version, "", "If set, specify the QUIC version to use."); @@ -217,6 +215,10 @@ class QuicPacketPrinter : public QuicFramerVisitorInterface { std::cerr << "OnAckFrequencyFrame: " << frame; return true; } + bool OnImmediateAckFrame(const QuicImmediateAckFrame& frame) override { + std::cerr << "OnImmediateAckFrame: " << frame; + return true; + } bool OnResetStreamAtFrame(const QuicResetStreamAtFrame& frame) override { std::cerr << "OnResetStreamAtFrame: " << frame; return true; diff --git a/naiveproxy/src/net/tools/cert_verify_tool/verify_using_cert_verify_proc.cc b/naiveproxy/src/net/tools/cert_verify_tool/verify_using_cert_verify_proc.cc index 08024fb75a..c7e109bd52 100644 --- a/naiveproxy/src/net/tools/cert_verify_tool/verify_using_cert_verify_proc.cc +++ b/naiveproxy/src/net/tools/cert_verify_tool/verify_using_cert_verify_proc.cc @@ -65,8 +65,6 @@ void PrintCertVerifyResult(const net::CertVerifyResult& result) { std::cout << "has_sha1\n"; if (result.is_issued_by_known_root) std::cout << "is_issued_by_known_root\n"; - if (result.is_issued_by_additional_trust_anchor) - std::cout << "is_issued_by_additional_trust_anchor\n"; if (result.verified_cert) { std::cout << "chain:\n " diff --git a/naiveproxy/src/net/tools/quic/quic_simple_client_bin.cc b/naiveproxy/src/net/tools/quic/quic_simple_client_bin.cc index 752d09d0d6..762fc0b1d0 100644 --- a/naiveproxy/src/net/tools/quic/quic_simple_client_bin.cc +++ b/naiveproxy/src/net/tools/quic/quic_simple_client_bin.cc @@ -33,8 +33,9 @@ // Try to connect to a host which does not speak QUIC: // quic_client http://www.example.com +#include + #include "base/logging.h" -#include "base/ranges/algorithm.h" #include "net/base/address_family.h" #include "net/base/net_errors.h" #include "net/quic/address_utils.h" @@ -80,7 +81,7 @@ class QuicSimpleClientFactory : public quic::QuicToyClient::ClientFactory { << "' : " << net::ErrorToShortString(rv); return nullptr; } - const auto endpoint = base::ranges::find_if( + const auto endpoint = std::ranges::find_if( addresses, [address_family_for_lookup](net::AddressFamily family) { if (address_family_for_lookup == AF_INET) diff --git a/naiveproxy/src/net/tools/tld_cleanup/tld_cleanup.cc b/naiveproxy/src/net/tools/tld_cleanup/tld_cleanup.cc index 026195da5f..243dbaa5d2 100644 --- a/naiveproxy/src/net/tools/tld_cleanup/tld_cleanup.cc +++ b/naiveproxy/src/net/tools/tld_cleanup/tld_cleanup.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + // This command-line program converts an effective-TLD data file in UTF-8 from // the format provided by Mozilla to the format expected by Chrome. This // program generates an intermediate file which is then used by gperf to diff --git a/naiveproxy/src/net/tools/tld_cleanup/tld_cleanup_util.cc b/naiveproxy/src/net/tools/tld_cleanup/tld_cleanup_util.cc index 996a883c48..177ae8cb4d 100644 --- a/naiveproxy/src/net/tools/tld_cleanup/tld_cleanup_util.cc +++ b/naiveproxy/src/net/tools/tld_cleanup/tld_cleanup_util.cc @@ -4,13 +4,13 @@ #include "net/tools/tld_cleanup/tld_cleanup_util.h" +#include #include #include #include "base/containers/contains.h" #include "base/files/file_util.h" #include "base/logging.h" -#include "base/ranges/algorithm.h" #include "base/strings/strcat.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" @@ -188,10 +188,10 @@ NormalizeResult NormalizeDataToRuleMap(const std::string& data, } } - base::ranges::copy_if(extra_rules, std::inserter(rules, rules.end()), - [&](const auto& extra_rule) { - return !base::Contains(rules, extra_rule.first); - }); + std::ranges::copy_if(extra_rules, std::inserter(rules, rules.end()), + [&](const auto& extra_rule) { + return !base::Contains(rules, extra_rule.first); + }); return result; } diff --git a/naiveproxy/src/net/tools/transport_security_state_generator/input_file_parsers.cc b/naiveproxy/src/net/tools/transport_security_state_generator/input_file_parsers.cc index db0e5acc9b..bdada0cffe 100644 --- a/naiveproxy/src/net/tools/transport_security_state_generator/input_file_parsers.cc +++ b/naiveproxy/src/net/tools/transport_security_state_generator/input_file_parsers.cc @@ -339,20 +339,17 @@ bool ParseJSON(std::string_view hsts_json, "test", "public-suffix", "google", "custom", "bulk-legacy", "bulk-18-weeks", "bulk-1-year", "public-suffix-requested"}; - std::optional hsts_value = base::JSONReader::Read(hsts_json); - if (!hsts_value.has_value() || !hsts_value->is_dict()) { + std::optional hsts_dict = + base::JSONReader::ReadDict(hsts_json); + if (!hsts_dict) { LOG(ERROR) << "Could not parse the input HSTS JSON file"; return false; } - std::optional pins_value = base::JSONReader::Read(pins_json); - if (!pins_value.has_value()) { - LOG(ERROR) << "Could not parse the input pins JSON file"; - return false; - } - base::Value::Dict* pins_dict = pins_value->GetIfDict(); + std::optional pins_dict = + base::JSONReader::ReadDict(pins_json); if (!pins_dict) { - LOG(ERROR) << "Input pins JSON file does not contain a dictionary"; + LOG(ERROR) << "Could not parse the input pins JSON file"; return false; } @@ -410,7 +407,7 @@ bool ParseJSON(std::string_view hsts_json, } const base::Value::List* preload_entries_list = - hsts_value->GetDict().FindList("entries"); + hsts_dict->FindList("entries"); if (!preload_entries_list) { LOG(ERROR) << "Could not parse the entries in the input HSTS JSON"; return false; diff --git a/naiveproxy/src/net/tools/transport_security_state_generator/spki_hash.cc b/naiveproxy/src/net/tools/transport_security_state_generator/spki_hash.cc index 64d0795fdf..618e812eaf 100644 --- a/naiveproxy/src/net/tools/transport_security_state_generator/spki_hash.cc +++ b/naiveproxy/src/net/tools/transport_security_state_generator/spki_hash.cc @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#ifdef UNSAFE_BUFFERS_BUILD +// TODO(crbug.com/390223051): Remove C-library calls to fix the errors. +#pragma allow_unsafe_libc_calls +#endif + #include "net/tools/transport_security_state_generator/spki_hash.h" #include diff --git a/naiveproxy/src/net/url_request/url_request.cc b/naiveproxy/src/net/url_request/url_request.cc index a06a804641..c4d81feb92 100644 --- a/naiveproxy/src/net/url_request/url_request.cc +++ b/naiveproxy/src/net/url_request/url_request.cc @@ -1367,7 +1367,7 @@ void URLRequest::SetIsSharedDictionaryReadAllowedCallback( } void URLRequest::SetDeviceBoundSessionAccessCallback( - base::RepeatingCallback + base::RepeatingCallback callback) { device_bound_session_access_callback_ = std::move(callback); } diff --git a/naiveproxy/src/net/url_request/url_request.h b/naiveproxy/src/net/url_request/url_request.h index c8b9e82bc0..d3ebd9fdd3 100644 --- a/naiveproxy/src/net/url_request/url_request.h +++ b/naiveproxy/src/net/url_request/url_request.h @@ -79,7 +79,7 @@ class URLRequestJob; class X509Certificate; namespace device_bound_sessions { -struct SessionKey; +struct SessionAccess; } //----------------------------------------------------------------------------- @@ -817,9 +817,9 @@ class NET_EXPORT URLRequest : public base::SupportsUserData { // bound sessions can be accessed asynchronously after this request // completes, this callback must be able to safely outlive `this`. void SetDeviceBoundSessionAccessCallback( - base::RepeatingCallback + base::RepeatingCallback callback); - base::RepeatingCallback + base::RepeatingCallback device_bound_session_access_callback() { return device_bound_session_access_callback_; } @@ -1179,7 +1179,7 @@ class NET_EXPORT URLRequest : public base::SupportsUserData { // request will not include the Sec-Fetch-Storage-Access header. std::optional storage_access_status_; - base::RepeatingCallback + base::RepeatingCallback device_bound_session_access_callback_; THREAD_CHECKER(thread_checker_); diff --git a/naiveproxy/src/net/url_request/url_request_http_job.cc b/naiveproxy/src/net/url_request/url_request_http_job.cc index f40ce91873..75272177ca 100644 --- a/naiveproxy/src/net/url_request/url_request_http_job.cc +++ b/naiveproxy/src/net/url_request/url_request_http_job.cc @@ -824,7 +824,7 @@ void URLRequestHttpJob::SetCookieHeaderAndStart( maybe_included_cookies.clear(); for (auto& cookie : excluded_cookies) { cookie.access_result.status.AddExclusionReason( - CookieInclusionStatus::EXCLUDE_USER_PREFERENCES); + CookieInclusionStatus::ExclusionReason::EXCLUDE_USER_PREFERENCES); } } else { // Consult the delegate to ensure that they have the correct exclusion @@ -1081,12 +1081,13 @@ void URLRequestHttpJob::SaveCookiesAndNotifyHeadersComplete(int result) { // in this case. if (returned_status.IsInclude()) { returned_status.AddExclusionReason( - net::CookieInclusionStatus::EXCLUDE_USER_PREFERENCES); + net::CookieInclusionStatus::ExclusionReason:: + EXCLUDE_USER_PREFERENCES); } } if (clear_site_data_prevents_cookies_from_being_stored) { returned_status.AddExclusionReason( - CookieInclusionStatus::EXCLUDE_FAILURE_TO_STORE); + CookieInclusionStatus::ExclusionReason::EXCLUDE_FAILURE_TO_STORE); } if (!returned_status.IsInclude()) { OnSetCookieResult(options, cookie_to_return, std::move(cookie_string), @@ -1118,7 +1119,8 @@ void URLRequestHttpJob::OnSetCookieResult(const CookieOptions& options, NetLogEventType::COOKIE_INCLUSION_STATUS, [&](NetLogCaptureMode capture_mode) { return CookieInclusionStatusNetLogParams( - "store", cookie ? cookie.value().Name() : "", + cookie && cookie->IsExpired(base::Time::Now()) ? "expire" : "store", + cookie ? cookie.value().Name() : "", cookie ? cookie.value().Domain() : "", cookie ? cookie.value().Path() : "", cookie ? cookie.value().PartitionKey() : std::nullopt, @@ -1154,7 +1156,7 @@ void URLRequestHttpJob::ProcessDeviceBoundSessionsHeader() { for (auto& param : params) { service->RegisterBoundSession( request_->device_bound_session_access_callback(), std::move(param), - request_->isolation_info(), request_->net_log()); + request_->isolation_info(), request_->net_log(), request_->initiator()); } std::vector challenge_params = @@ -1341,8 +1343,6 @@ void URLRequestHttpJob::RestartTransaction() { override_response_headers_ = nullptr; // See https://crbug.com/801237. receive_headers_end_ = base::TimeTicks(); - ResetTimer(); - // Update the cookies, since the cookie store may have been updated from the // headers in the 401/407. Since cookies were already appended to // extra_headers, we need to strip them out before adding them again. @@ -1370,6 +1370,7 @@ void URLRequestHttpJob::RestartTransactionForRefresh() { void URLRequestHttpJob::RestartTransactionWithAuth( const AuthCredentials& credentials) { auth_credentials_ = credentials; + ResetTimer(); RestartTransaction(); } diff --git a/naiveproxy/src/net/url_request/url_request_test_util.cc b/naiveproxy/src/net/url_request/url_request_test_util.cc index 57ebd031a0..424b87537c 100644 --- a/naiveproxy/src/net/url_request/url_request_test_util.cc +++ b/naiveproxy/src/net/url_request/url_request_test_util.cc @@ -221,6 +221,10 @@ void TestDelegate::OnResponseStarted(URLRequest* request, int net_error) { DCHECK_NE(ERR_IO_PENDING, net_error); EXPECT_FALSE(request->is_redirecting()); + if (net_error == OK) { + response_code_ = request->GetResponseCode(); + } + response_started_count_++; request_status_ = net_error; if (cancel_in_rs_) { @@ -509,8 +513,9 @@ bool TestNetworkDelegate::OnAnnotateAndMoveUserBlockedCookies( if (!allow) { blocked_annotate_cookies_count_++; - ExcludeAllCookies(CookieInclusionStatus::EXCLUDE_USER_PREFERENCES, - maybe_included_cookies, excluded_cookies); + ExcludeAllCookies( + CookieInclusionStatus::ExclusionReason::EXCLUDE_USER_PREFERENCES, + maybe_included_cookies, excluded_cookies); } return allow; @@ -623,21 +628,24 @@ bool FilteringTestNetworkDelegate::OnAnnotateAndMoveUserBlockedCookies( if (!allowed) { ++blocked_annotate_cookies_count_; - ExcludeAllCookies(net::CookieInclusionStatus::EXCLUDE_USER_PREFERENCES, - maybe_included_cookies, excluded_cookies); + ExcludeAllCookies( + net::CookieInclusionStatus::ExclusionReason::EXCLUDE_USER_PREFERENCES, + maybe_included_cookies, excluded_cookies); } if (allowed && block_get_cookies_by_name_ && !cookie_name_filter_.empty()) { for (auto& cookie : maybe_included_cookies) { if (cookie.cookie.Name().find(cookie_name_filter_) != std::string::npos) { cookie.access_result.status.AddExclusionReason( - net::CookieInclusionStatus::EXCLUDE_USER_PREFERENCES); + net::CookieInclusionStatus::ExclusionReason:: + EXCLUDE_USER_PREFERENCES); } } for (auto& cookie : excluded_cookies) { if (cookie.cookie.Name().find(cookie_name_filter_) != std::string::npos) { cookie.access_result.status.AddExclusionReason( - net::CookieInclusionStatus::EXCLUDE_USER_PREFERENCES); + net::CookieInclusionStatus::ExclusionReason:: + EXCLUDE_USER_PREFERENCES); } } diff --git a/naiveproxy/src/net/url_request/url_request_test_util.h b/naiveproxy/src/net/url_request/url_request_test_util.h index 36d5677796..176b2d49ea 100644 --- a/naiveproxy/src/net/url_request/url_request_test_util.h +++ b/naiveproxy/src/net/url_request/url_request_test_util.h @@ -158,6 +158,7 @@ class TestDelegate : public URLRequest::Delegate { bool auth_required_called() const { return auth_required_; } bool response_completed() const { return response_completed_; } int request_status() const { return request_status_; } + std::optional response_code() const { return response_code_; } // URLRequest::Delegate: int OnConnected(URLRequest* request, @@ -214,6 +215,9 @@ class TestDelegate : public URLRequest::Delegate { // tracks status of request int request_status_ = ERR_IO_PENDING; + // tracks status of response + std::optional response_code_; + // our read buffer scoped_refptr buf_; diff --git a/naiveproxy/src/net/websockets/websocket_basic_handshake_stream.cc b/naiveproxy/src/net/websockets/websocket_basic_handshake_stream.cc index 8d46955eaa..4003429181 100644 --- a/naiveproxy/src/net/websockets/websocket_basic_handshake_stream.cc +++ b/naiveproxy/src/net/websockets/websocket_basic_handshake_stream.cc @@ -221,20 +221,34 @@ int WebSocketBasicHandshakeStream::InitializeStream( CompletionOnceCallback callback) { url_ = request_info_->url; net_log_ = net_log; + state_.Initialize(request_info_, priority, net_log); + // RequestInfo is no longer needed after this point. + request_info_ = nullptr; // The WebSocket may receive a socket in the early data state from // HttpNetworkTransaction, which means it must call ConfirmHandshake() for // requests that need replay protection. However, the first request on any // WebSocket stream is a GET with an idempotent request - // (https://tools.ietf.org/html/rfc6455#section-1.3), so there is no need to - // call ConfirmHandshake(). + // (https://tools.ietf.org/html/rfc6455#section-1.3), so ConfirmHandshake() + // only needs to be called if |can_send_early| is false which can happen when: + // 1. 0-RTT is rejected, or + // 2. HTTP 425 Too Early is returned by the server. // // Data after the WebSockets handshake may not be replayable, but the // handshake is guaranteed to be confirmed once the HTTP response is received. - DCHECK(can_send_early); - state_.Initialize(request_info_, priority, net_log); - // RequestInfo is no longer needed after this point. - request_info_ = nullptr; - return OK; + int ret = OK; + if (!can_send_early) { + // parser() cannot outlive `this`, so we can use base::Unretained(). + ret = parser()->ConfirmHandshake( + base::BindOnce(&WebSocketBasicHandshakeStream::OnHandshakeConfirmed, + base::Unretained(this), std::move(callback))); + } + return ret; +} + +void WebSocketBasicHandshakeStream::OnHandshakeConfirmed( + CompletionOnceCallback callback, + int rv) { + std::move(callback).Run(rv); } int WebSocketBasicHandshakeStream::SendRequest( @@ -305,7 +319,7 @@ int WebSocketBasicHandshakeStream::ReadResponseBody( void WebSocketBasicHandshakeStream::Close(bool not_reusable) { // This class ignores the value of `not_reusable` and never lets the socket be - // re-used. + // reused. state_.Close(/*not_reusable=*/true); } diff --git a/naiveproxy/src/net/websockets/websocket_basic_handshake_stream.h b/naiveproxy/src/net/websockets/websocket_basic_handshake_stream.h index 2ac460c942..411b68e867 100644 --- a/naiveproxy/src/net/websockets/websocket_basic_handshake_stream.h +++ b/naiveproxy/src/net/websockets/websocket_basic_handshake_stream.h @@ -129,6 +129,8 @@ class NET_EXPORT_PRIVATE WebSocketBasicHandshakeStream final HttpStreamParser* parser() const { return state_.parser(); } + void OnHandshakeConfirmed(CompletionOnceCallback callback, int rv); + HandshakeResult result_ = HandshakeResult::INCOMPLETE; // The request URL. diff --git a/naiveproxy/src/net/websockets/websocket_basic_stream.cc b/naiveproxy/src/net/websockets/websocket_basic_stream.cc index 70d0e6024f..3cf7229aeb 100644 --- a/naiveproxy/src/net/websockets/websocket_basic_stream.cc +++ b/naiveproxy/src/net/websockets/websocket_basic_stream.cc @@ -404,6 +404,11 @@ int WebSocketBasicStream::ConvertChunksToFrames( auto frame_result = chunk_assembler_.HandleChunk(std::move(chunk)); if (!frame_result.has_value()) { + net::Error error = frame_result.error(); + if (error == ERR_IO_PENDING) { + // We just need more data. + continue; + } return frame_result.error(); } diff --git a/naiveproxy/src/net/websockets/websocket_channel.cc b/naiveproxy/src/net/websockets/websocket_channel.cc index 52e90187e2..d26c095b05 100644 --- a/naiveproxy/src/net/websockets/websocket_channel.cc +++ b/naiveproxy/src/net/websockets/websocket_channel.cc @@ -30,7 +30,6 @@ #include "base/memory/raw_ptr.h" #include "base/numerics/byte_conversions.h" #include "base/numerics/safe_conversions.h" -#include "base/ranges/algorithm.h" #include "base/strings/stringprintf.h" #include "base/time/time.h" #include "base/values.h" @@ -741,7 +740,7 @@ ChannelState WebSocketChannel::HandleFrameByState( DVLOG(1) << "Got Ping of size " << payload.size(); if (state_ == CONNECTED) { auto buffer = base::MakeRefCounted(payload.size()); - base::ranges::copy(payload, buffer->data()); + std::ranges::copy(payload, buffer->data()); return SendFrameInternal(true, WebSocketFrameHeader::kOpCodePong, std::move(buffer), payload.size()); } diff --git a/naiveproxy/src/net/websockets/websocket_extension.cc b/naiveproxy/src/net/websockets/websocket_extension.cc index 35b50a8a3d..4cb0e95d4e 100644 --- a/naiveproxy/src/net/websockets/websocket_extension.cc +++ b/naiveproxy/src/net/websockets/websocket_extension.cc @@ -4,12 +4,12 @@ #include "net/websockets/websocket_extension.h" +#include #include #include #include #include "base/check.h" -#include "base/ranges/algorithm.h" #include "net/http/http_util.h" namespace net { @@ -52,8 +52,8 @@ bool WebSocketExtension::Equivalent(const WebSocketExtension& other) const { }; // Sort by key, preserving order of values. - base::ranges::stable_sort(mine_sorted, comparator, extract_name); - base::ranges::stable_sort(other_sorted, comparator, extract_name); + std::ranges::stable_sort(mine_sorted, comparator, extract_name); + std::ranges::stable_sort(other_sorted, comparator, extract_name); return mine_sorted == other_sorted; } diff --git a/naiveproxy/src/net/websockets/websocket_frame.cc b/naiveproxy/src/net/websockets/websocket_frame.cc index 4539adcd5a..c971ff0cda 100644 --- a/naiveproxy/src/net/websockets/websocket_frame.cc +++ b/naiveproxy/src/net/websockets/websocket_frame.cc @@ -7,6 +7,7 @@ #include #include +#include #include #include "base/check.h" @@ -15,7 +16,6 @@ #include "base/containers/span_writer.h" #include "base/numerics/safe_conversions.h" #include "base/rand_util.h" -#include "base/ranges/algorithm.h" #include "base/strings/string_util.h" #include "build/build_config.h" #include "net/base/net_errors.h" diff --git a/naiveproxy/src/net/websockets/websocket_http2_handshake_stream.cc b/naiveproxy/src/net/websockets/websocket_http2_handshake_stream.cc index b9c1301ee7..25a3b3e5ff 100644 --- a/naiveproxy/src/net/websockets/websocket_http2_handshake_stream.cc +++ b/naiveproxy/src/net/websockets/websocket_http2_handshake_stream.cc @@ -17,6 +17,7 @@ #include "base/strings/strcat.h" #include "base/strings/stringprintf.h" #include "base/time/time.h" +#include "net/base/completion_once_callback.h" #include "net/base/ip_endpoint.h" #include "net/http/http_request_headers.h" #include "net/http/http_request_info.h" @@ -79,7 +80,20 @@ int WebSocketHttp2HandshakeStream::InitializeStream( CompletionOnceCallback callback) { priority_ = priority; net_log_ = net_log; - return OK; + + int ret = OK; + if (!can_send_early) { + ret = session_->ConfirmHandshake( + base::BindOnce(&WebSocketHttp2HandshakeStream::OnHandshakeConfirmed, + weak_ptr_factory_.GetWeakPtr(), std::move(callback))); + } + return ret; +} + +void WebSocketHttp2HandshakeStream::OnHandshakeConfirmed( + CompletionOnceCallback callback, + int rv) { + std::move(callback).Run(rv); } int WebSocketHttp2HandshakeStream::SendRequest( diff --git a/naiveproxy/src/net/websockets/websocket_http2_handshake_stream.h b/naiveproxy/src/net/websockets/websocket_http2_handshake_stream.h index 98978ead44..ec11d49e56 100644 --- a/naiveproxy/src/net/websockets/websocket_http2_handshake_stream.h +++ b/naiveproxy/src/net/websockets/websocket_http2_handshake_stream.h @@ -130,6 +130,8 @@ class NET_EXPORT_PRIVATE WebSocketHttp2HandshakeStream int net_error, std::optional response_code); + void OnHandshakeConfirmed(CompletionOnceCallback callback, int rv); + HandshakeResult result_ = HandshakeResult::HTTP2_INCOMPLETE; // The connection to open the Websocket stream on. diff --git a/naiveproxy/src/net/websockets/websocket_http3_handshake_stream.cc b/naiveproxy/src/net/websockets/websocket_http3_handshake_stream.cc index 9ae96aaa6e..41ba26fe48 100644 --- a/naiveproxy/src/net/websockets/websocket_http3_handshake_stream.cc +++ b/naiveproxy/src/net/websockets/websocket_http3_handshake_stream.cc @@ -76,7 +76,20 @@ int WebSocketHttp3HandshakeStream::InitializeStream( priority_ = priority; net_log_ = net_log; request_time_ = base::Time::Now(); - return OK; + + int ret = OK; + if (!can_send_early) { + ret = session_->WaitForHandshakeConfirmation( + base::BindOnce(&WebSocketHttp3HandshakeStream::OnHandshakeConfirmed, + weak_ptr_factory_.GetWeakPtr(), std::move(callback))); + } + return ret; +} + +void WebSocketHttp3HandshakeStream::OnHandshakeConfirmed( + CompletionOnceCallback callback, + int rv) { + std::move(callback).Run(rv); } int WebSocketHttp3HandshakeStream::SendRequest( diff --git a/naiveproxy/src/net/websockets/websocket_http3_handshake_stream.h b/naiveproxy/src/net/websockets/websocket_http3_handshake_stream.h index d401055fd2..98038feb19 100644 --- a/naiveproxy/src/net/websockets/websocket_http3_handshake_stream.h +++ b/naiveproxy/src/net/websockets/websocket_http3_handshake_stream.h @@ -127,6 +127,8 @@ class NET_EXPORT_PRIVATE WebSocketHttp3HandshakeStream final int net_error, std::optional response_code); + void OnHandshakeConfirmed(CompletionOnceCallback callback, int rv); + HandshakeResult result_ = HandshakeResult::HTTP3_INCOMPLETE; std::unique_ptr adapter_; diff --git a/naiveproxy/src/third_party/abseil-cpp/BUILD.bazel b/naiveproxy/src/third_party/abseil-cpp/BUILD.bazel index 2b8159be47..03122a958e 100644 --- a/naiveproxy/src/third_party/abseil-cpp/BUILD.bazel +++ b/naiveproxy/src/third_party/abseil-cpp/BUILD.bazel @@ -30,6 +30,6 @@ platform( constraint_values = [ "@platforms//cpu:x86_64", "@platforms//os:windows", - "@rules_cc//cc/private/toolchain:clang-cl", + "@bazel_tools//tools/cpp:clang-cl", ], ) diff --git a/naiveproxy/src/third_party/abseil-cpp/BUILD.gn b/naiveproxy/src/third_party/abseil-cpp/BUILD.gn index 4ea2b176d5..ffb658ce22 100644 --- a/naiveproxy/src/third_party/abseil-cpp/BUILD.gn +++ b/naiveproxy/src/third_party/abseil-cpp/BUILD.gn @@ -96,6 +96,7 @@ group("absl_component_deps") { "//third_party/abseil-cpp/absl/numeric:bits", "//third_party/abseil-cpp/absl/numeric:int128", "//third_party/abseil-cpp/absl/random", + "//third_party/abseil-cpp/absl/random:bit_gen_ref", "//third_party/abseil-cpp/absl/random:distributions", "//third_party/abseil-cpp/absl/status", "//third_party/abseil-cpp/absl/status:statusor", @@ -182,11 +183,6 @@ group("absl_full_deps") { # those macros. "//third_party/abseil-cpp/absl/log", "//third_party/abseil-cpp/absl/log:check", - - # TODO(danilchap): Investigate if these targets need to be banned in 3rd party library code. - "//third_party/abseil-cpp/absl/log:globals", - "//third_party/abseil-cpp/absl/log:initialize", - "//third_party/abseil-cpp/absl/random:bit_gen_ref", ] visibility = [ @@ -332,6 +328,7 @@ if (absl_build_tests) { "absl/log:vlog_is_on_test", "absl/log/internal:fnmatch_test", "absl/log/internal:stderr_log_sink_test", + "absl/log/internal:structured_proto_test", "absl/memory:memory_test", "absl/meta:type_traits_test", "absl/numeric:int128_test", @@ -339,6 +336,7 @@ if (absl_build_tests) { "absl/profiling:periodic_sampler_test", "absl/random:distributions_test", "absl/random:mock_distributions_test", + "absl/random/internal:nonsecure_base_test", "absl/status:status_matchers_test", "absl/status:status_test", "absl/status:statusor_test", diff --git a/naiveproxy/src/third_party/abseil-cpp/CMake/AbseilDll.cmake b/naiveproxy/src/third_party/abseil-cpp/CMake/AbseilDll.cmake index 7821194006..d8a8ecf468 100644 --- a/naiveproxy/src/third_party/abseil-cpp/CMake/AbseilDll.cmake +++ b/naiveproxy/src/third_party/abseil-cpp/CMake/AbseilDll.cmake @@ -192,6 +192,8 @@ set(ABSL_INTERNAL_DLL_FILES "log/internal/proto.cc" "log/internal/strip.h" "log/internal/structured.h" + "log/internal/structured_proto.cc" + "log/internal/structured_proto.h" "log/internal/vlog_config.cc" "log/internal/vlog_config.h" "log/internal/voidify.h" @@ -835,6 +837,7 @@ function(absl_make_dll) PRIVATE ${_dll_libs} ${ABSL_DEFAULT_LINKOPTS} + $<$:-llog> ) set_target_properties(${_dll} PROPERTIES LINKER_LANGUAGE "CXX" diff --git a/naiveproxy/src/third_party/abseil-cpp/MODULE.bazel b/naiveproxy/src/third_party/abseil-cpp/MODULE.bazel index 955428b0ab..7ade5e2f5a 100644 --- a/naiveproxy/src/third_party/abseil-cpp/MODULE.bazel +++ b/naiveproxy/src/third_party/abseil-cpp/MODULE.bazel @@ -20,25 +20,27 @@ module( compatibility_level = 1, ) -cc_configure = use_extension("@rules_cc//cc:extensions.bzl", "cc_configure_extension", dev_dependency = True) +cc_configure = use_extension("@rules_cc//cc:extensions.bzl", + "cc_configure_extension", + dev_dependency = True) use_repo(cc_configure, "local_config_cc") # Only direct dependencies need to be listed below. # Please keep the versions in sync with the versions in the WORKSPACE file. -bazel_dep(name = "rules_cc", version = "0.0.16") -bazel_dep(name = "bazel_skylib", version = "1.5.0") +bazel_dep(name = "rules_cc", version = "0.0.17") +bazel_dep(name = "bazel_skylib", version = "1.7.1") bazel_dep(name = "platforms", version = "0.0.10") bazel_dep( name = "google_benchmark", - version = "1.8.3", + version = "1.8.5", dev_dependency = True, - repo_name = "com_github_google_benchmark", ) +# Note: Googletest is NOT a dev_dependency. Some Abseil test utilities +# intended to be used by Abseil users depend on GoogleTest. bazel_dep( name = "googletest", version = "1.15.2", - repo_name = "com_google_googletest", ) diff --git a/naiveproxy/src/third_party/abseil-cpp/README.chromium b/naiveproxy/src/third_party/abseil-cpp/README.chromium index e80f448799..2be3fa6154 100644 --- a/naiveproxy/src/third_party/abseil-cpp/README.chromium +++ b/naiveproxy/src/third_party/abseil-cpp/README.chromium @@ -4,7 +4,7 @@ URL: https://github.com/abseil/abseil-cpp License: Apache-2.0 License File: LICENSE Version: N/A -Revision: f623b01435c2dc230bd29e7d9aa8bac100a07638 +Revision: da2b12d7c962f1e3bb5701831be064155efaf5c6 Security Critical: yes Shipped: yes diff --git a/naiveproxy/src/third_party/abseil-cpp/WORKSPACE b/naiveproxy/src/third_party/abseil-cpp/WORKSPACE index dee6d05e28..28e17c90f9 100644 --- a/naiveproxy/src/third_party/abseil-cpp/WORKSPACE +++ b/naiveproxy/src/third_party/abseil-cpp/WORKSPACE @@ -14,42 +14,55 @@ # limitations under the License. # -workspace(name = "com_google_absl") +workspace(name = "abseil-cpp") load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") # GoogleTest/GoogleMock framework. Used by most unit-tests. http_archive( - name = "com_google_googletest", + name = "googletest", sha256 = "7b42b4d6ed48810c5362c265a17faebe90dc2373c885e5216439d37927f02926", strip_prefix = "googletest-1.15.2", # Keep this URL in sync with the version in ci/cmake_common.sh and # ci/windows_msvc_cmake.bat. urls = ["https://github.com/google/googletest/releases/download/v1.15.2/googletest-1.15.2.tar.gz"], + # Now that Abseil is using the canonical names from the Bazel Central Registry, map + # GoogleTest's old names to the new canonical names. + repo_mapping = { + "@com_google_absl": "@", + "@com_googlesource_code_re2": "@re2", + }, ) # RE2 (the regular expression library used by GoogleTest) http_archive( - name = "com_googlesource_code_re2", + name = "re2", sha256 = "eb2df807c781601c14a260a507a5bb4509be1ee626024cb45acbd57cb9d4032b", strip_prefix = "re2-2024-07-02", urls = ["https://github.com/google/re2/releases/download/2024-07-02/re2-2024-07-02.tar.gz"], - repo_mapping = {"@abseil-cpp": "@com_google_absl"}, ) # Google benchmark. http_archive( - name = "com_github_google_benchmark", - sha256 = "6bc180a57d23d4d9515519f92b0c83d61b05b5bab188961f36ac7b06b0d9e9ce", - strip_prefix = "benchmark-1.8.3", - urls = ["https://github.com/google/benchmark/archive/refs/tags/v1.8.3.tar.gz"], + name = "google_benchmark", + sha256 = "d26789a2b46d8808a48a4556ee58ccc7c497fcd4c0af9b90197674a81e04798a", + strip_prefix = "benchmark-1.8.5", + urls = ["https://github.com/google/benchmark/archive/refs/tags/v1.8.5.tar.gz"], ) # Bazel Skylib. http_archive( name = "bazel_skylib", - sha256 = "cd55a062e763b9349921f0f5db8c3933288dc8ba4f76dd9416aac68acee3cb94", - urls = ["https://github.com/bazelbuild/bazel-skylib/releases/download/1.5.0/bazel-skylib-1.5.0.tar.gz"], + sha256 = "bc283cdfcd526a52c3201279cda4bc298652efa898b10b4db0837dc51652756f", + urls = ["https://github.com/bazelbuild/bazel-skylib/releases/download/1.7.1/bazel-skylib-1.7.1.tar.gz"], +) + +# C++ rules for Bazel +http_archive( + name = "rules_cc", + urls = ["https://github.com/bazelbuild/rules_cc/releases/download/0.1.0/rules_cc-0.1.0.tar.gz"], + sha256 = "4b12149a041ddfb8306a8fd0e904e39d673552ce82e4296e96fac9cbf0780e59", + strip_prefix = "rules_cc-0.1.0", ) # Bazel platform rules. diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/BUILD.bazel b/naiveproxy/src/third_party/abseil-cpp/absl/BUILD.bazel index ba1691fc75..2a25ac6455 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/BUILD.bazel +++ b/naiveproxy/src/third_party/abseil-cpp/absl/BUILD.bazel @@ -28,14 +28,6 @@ config_setting( visibility = [":__subpackages__"], ) -config_setting( - name = "gcc_compiler", - flag_values = { - "@bazel_tools//tools/cpp:compiler": "gcc", - }, - visibility = [":__subpackages__"], -) - config_setting( name = "mingw_unspecified_compiler", flag_values = { @@ -52,69 +44,6 @@ config_setting( visibility = [":__subpackages__"], ) -config_setting( - name = "msvc_compiler", - flag_values = { - "@bazel_tools//tools/cpp:compiler": "msvc-cl", - }, - visibility = [":__subpackages__"], -) - -config_setting( - name = "clang-cl_compiler", - flag_values = { - "@bazel_tools//tools/cpp:compiler": "clang-cl", - }, - visibility = [":__subpackages__"], -) - -config_setting( - name = "osx", - constraint_values = [ - "@platforms//os:osx", - ], -) - -config_setting( - name = "ios", - constraint_values = [ - "@platforms//os:ios", - ], -) - -config_setting( - name = "ppc", - constraint_values = [ - "@platforms//cpu:ppc", - ], - visibility = [":__subpackages__"], -) - -config_setting( - name = "platforms_wasm32", - constraint_values = [ - "@platforms//cpu:wasm32", - ], - visibility = [":__subpackages__"], -) - -config_setting( - name = "platforms_wasm64", - constraint_values = [ - "@platforms//cpu:wasm64", - ], - visibility = [":__subpackages__"], -) - -selects.config_setting_group( - name = "wasm", - match_any = [ - ":platforms_wasm32", - ":platforms_wasm64", - ], - visibility = [":__subpackages__"], -) - config_setting( name = "fuchsia", constraint_values = [ diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/algorithm/BUILD.bazel b/naiveproxy/src/third_party/abseil-cpp/absl/algorithm/BUILD.bazel index f20e7290d6..9a723e5b99 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/algorithm/BUILD.bazel +++ b/naiveproxy/src/third_party/abseil-cpp/absl/algorithm/BUILD.bazel @@ -51,8 +51,8 @@ cc_test( deps = [ ":algorithm", "//absl/base:config", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -84,7 +84,7 @@ cc_test( "//absl/base:core_headers", "//absl/memory", "//absl/types:span", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/base/BUILD.bazel b/naiveproxy/src/third_party/abseil-cpp/absl/base/BUILD.bazel index 4c2f68f6ab..50b10d0fbb 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/base/BUILD.bazel +++ b/naiveproxy/src/third_party/abseil-cpp/absl/base/BUILD.bazel @@ -204,9 +204,9 @@ cc_library( "//conditions:default": [], }), linkopts = select({ - "//absl:msvc_compiler": [], - "//absl:clang-cl_compiler": [], - "//absl:wasm": [], + "@rules_cc//cc/compiler:msvc-cl": [], + "@rules_cc//cc/compiler:clang-cl": [], + "@rules_cc//cc/compiler:emscripten": [], "//conditions:default": ["-pthread"], }) + ABSL_DEFAULT_LINKOPTS, visibility = [ @@ -265,17 +265,17 @@ cc_library( ], copts = ABSL_DEFAULT_COPTS, linkopts = select({ - "//absl:msvc_compiler": [ + "@rules_cc//cc/compiler:msvc-cl": [ "-DEFAULTLIB:advapi32.lib", ], - "//absl:clang-cl_compiler": [ + "@rules_cc//cc/compiler:clang-cl": [ "-DEFAULTLIB:advapi32.lib", ], "//absl:mingw_compiler": [ "-DEFAULTLIB:advapi32.lib", "-ladvapi32", ], - "//absl:wasm": [], + "@rules_cc//cc/compiler:emscripten": [], "//conditions:default": ["-pthread"], }) + ABSL_DEFAULT_LINKOPTS, deps = [ @@ -316,8 +316,8 @@ cc_test( ":atomic_hook", ":atomic_hook_test_helper", ":core_headers", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -332,8 +332,8 @@ cc_test( deps = [ ":base", ":core_headers", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -372,8 +372,8 @@ cc_test( deps = [ ":config", ":throw_delegate", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -386,8 +386,8 @@ cc_test( deps = [ ":errno_saver", ":strerror", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -402,7 +402,7 @@ cc_library( ], deps = [ ":config", - "@com_google_googletest//:gtest", + "@googletest//:gtest", ], ) @@ -429,7 +429,7 @@ cc_library( "//absl/meta:type_traits", "//absl/strings", "//absl/utility", - "@com_google_googletest//:gtest", + "@googletest//:gtest", ], ) @@ -441,8 +441,8 @@ cc_test( deps = [ ":exception_safety_testing", "//absl/memory", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -459,8 +459,8 @@ cc_test( linkopts = ABSL_DEFAULT_LINKOPTS, deps = [ ":base_internal", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -474,8 +474,8 @@ cc_test( ":base_internal", "//absl/memory", "//absl/strings", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -493,7 +493,7 @@ cc_library( ":config", ":core_headers", "//absl/synchronization", - "@com_google_googletest//:gtest", + "@googletest//:gtest", ], alwayslink = 1, ) @@ -513,8 +513,8 @@ cc_test( ":config", ":core_headers", "//absl/synchronization", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -533,7 +533,7 @@ cc_library( ":no_destructor", ":raw_logging_internal", "//absl/synchronization", - "@com_github_google_benchmark//:benchmark_main", + "@google_benchmark//:benchmark_main", ], alwayslink = 1, ) @@ -573,8 +573,8 @@ cc_test( deps = [ ":config", ":endian", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -586,8 +586,8 @@ cc_test( deps = [ ":config", "//absl/synchronization:thread_pool", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -600,8 +600,8 @@ cc_test( ":base", ":core_headers", "//absl/synchronization", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -614,8 +614,8 @@ cc_test( ":config", ":no_destructor", ":raw_logging_internal", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -630,7 +630,7 @@ cc_binary( deps = [ ":no_destructor", ":raw_logging_internal", - "@com_github_google_benchmark//:benchmark_main", + "@google_benchmark//:benchmark_main", ], ) @@ -640,8 +640,8 @@ cc_test( deps = [ ":core_headers", ":nullability", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -650,8 +650,8 @@ cc_test( srcs = ["nullability_default_nonnull_test.cc"], deps = [ ":nullability", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -663,8 +663,8 @@ cc_test( deps = [ ":raw_logging_internal", "//absl/strings", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -677,8 +677,8 @@ cc_test( deps = [ ":base", "//absl/synchronization", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -711,8 +711,8 @@ cc_test( ":base", ":core_headers", "//absl/synchronization", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -726,8 +726,8 @@ cc_test( deps = [ ":base", "//absl/synchronization", - "@com_github_google_benchmark//:benchmark_main", - "@com_google_googletest//:gtest", + "@google_benchmark//:benchmark_main", + "@googletest//:gtest", ], ) @@ -754,8 +754,8 @@ cc_test( linkopts = ABSL_DEFAULT_LINKOPTS, deps = [ ":scoped_set_env", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -770,8 +770,8 @@ cc_test( "//absl/flags:flag_internal", "//absl/flags:marshalling", "//absl/strings", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -800,8 +800,8 @@ cc_test( deps = [ ":strerror", "//absl/strings", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -815,7 +815,7 @@ cc_binary( visibility = ["//visibility:private"], deps = [ ":strerror", - "@com_github_google_benchmark//:benchmark_main", + "@google_benchmark//:benchmark_main", ], ) @@ -840,8 +840,8 @@ cc_test( linkopts = ABSL_DEFAULT_LINKOPTS, deps = [ ":fast_type_id", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -868,8 +868,8 @@ cc_test( linkopts = ABSL_DEFAULT_LINKOPTS, deps = [ ":prefetch", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -903,8 +903,8 @@ cc_test( deps = [ ":config", ":poison", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -918,8 +918,8 @@ cc_test( deps = [ ":core_headers", "//absl/strings", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -932,8 +932,8 @@ cc_test( deps = [ ":core_headers", "//absl/types:optional", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -959,8 +959,8 @@ cc_test( linkopts = ABSL_DEFAULT_LINKOPTS, deps = [ ":tracing_internal", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -973,7 +973,7 @@ cc_test( ":config", ":core_headers", ":tracing_internal", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/base/attributes.h b/naiveproxy/src/third_party/abseil-cpp/absl/base/attributes.h index 0b94ae43b7..95b102e52b 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/base/attributes.h +++ b/naiveproxy/src/third_party/abseil-cpp/absl/base/attributes.h @@ -831,6 +831,17 @@ #define ABSL_ATTRIBUTE_LIFETIME_BOUND #endif +// Internal attribute; name and documentation TBD. +// +// See the upstream documentation: +// https://clang.llvm.org/docs/AttributeReference.html#lifetime_capture_by +#if ABSL_HAVE_CPP_ATTRIBUTE(clang::lifetime_capture_by) +#define ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(Owner) \ + [[clang::lifetime_capture_by(Owner)]] +#else +#define ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(Owner) +#endif + // ABSL_ATTRIBUTE_VIEW indicates that a type is solely a "view" of data that it // points to, similarly to a span, string_view, or other non-owning reference // type. diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/base/call_once.h b/naiveproxy/src/third_party/abseil-cpp/absl/base/call_once.h index 7b0e69ccd5..b666d36f0e 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/base/call_once.h +++ b/naiveproxy/src/third_party/abseil-cpp/absl/base/call_once.h @@ -31,6 +31,8 @@ #include #include +#include "absl/base/attributes.h" +#include "absl/base/config.h" #include "absl/base/internal/invoke.h" #include "absl/base/internal/low_level_scheduling.h" #include "absl/base/internal/raw_logging.h" @@ -147,10 +149,10 @@ enum { }; template -ABSL_ATTRIBUTE_NOINLINE void CallOnceImpl( - absl::Nonnull*> control, - base_internal::SchedulingMode scheduling_mode, Callable&& fn, - Args&&... args) { + void + CallOnceImpl(absl::Nonnull*> control, + base_internal::SchedulingMode scheduling_mode, Callable&& fn, + Args&&... args) { #ifndef NDEBUG { uint32_t old_control = control->load(std::memory_order_relaxed); @@ -209,7 +211,8 @@ void LowLevelCallOnce(absl::Nonnull flag, Callable&& fn, } // namespace base_internal template -void call_once(absl::once_flag& flag, Callable&& fn, Args&&... args) { + void + call_once(absl::once_flag& flag, Callable&& fn, Args&&... args) { std::atomic* once = base_internal::ControlWord(&flag); uint32_t s = once->load(std::memory_order_acquire); if (ABSL_PREDICT_FALSE(s != base_internal::kOnceDone)) { diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc b/naiveproxy/src/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc index a0bf3a65f7..68f92730a8 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +++ b/naiveproxy/src/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc @@ -105,16 +105,6 @@ double UnscaledCycleClock::Frequency() { #elif defined(__aarch64__) -// System timer of ARMv8 runs at a different frequency than the CPU's. -// The frequency is fixed, typically in the range 1-50MHz. It can be -// read at CNTFRQ special register. We assume the OS has set up -// the virtual timer properly. -int64_t UnscaledCycleClock::Now() { - int64_t virtual_timer_value; - asm volatile("mrs %0, cntvct_el0" : "=r"(virtual_timer_value)); - return virtual_timer_value; -} - double UnscaledCycleClock::Frequency() { uint64_t aarch64_timer_frequency; asm volatile("mrs %0, cntfrq_el0" : "=r"(aarch64_timer_frequency)); diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h b/naiveproxy/src/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h index cc1276ba08..965c42de4e 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +++ b/naiveproxy/src/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h @@ -85,6 +85,18 @@ inline int64_t UnscaledCycleClock::Now() { return static_cast((high << 32) | low); } +#elif defined(__aarch64__) + +// System timer of ARMv8 runs at a different frequency than the CPU's. +// The frequency is fixed, typically in the range 1-50MHz. It can be +// read at CNTFRQ special register. We assume the OS has set up +// the virtual timer properly. +inline int64_t UnscaledCycleClock::Now() { + int64_t virtual_timer_value; + asm volatile("mrs %0, cntvct_el0" : "=r"(virtual_timer_value)); + return virtual_timer_value; +} + #endif } // namespace base_internal diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/base/nullability.h b/naiveproxy/src/third_party/abseil-cpp/absl/base/nullability.h index c1b68a1249..241c65ac25 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/base/nullability.h +++ b/naiveproxy/src/third_party/abseil-cpp/absl/base/nullability.h @@ -281,4 +281,26 @@ ABSL_NAMESPACE_END #define ABSL_NULLABILITY_COMPATIBLE #endif +// ABSL_NONNULL +// ABSL_NULLABLE +// ABSL_NULLABILITY_UNKNOWN +// +// These macros are analogues of the alias template nullability annotations +// above. +// +// Example: +// int* ABSL_NULLABLE foo; +// Is equivalent to: +// absl::Nullable foo; +#if defined(__clang__) && !defined(__OBJC__) && \ + ABSL_HAVE_FEATURE(nullability_on_classes) +#define ABSL_NONNULL _Nonnull +#define ABSL_NULLABLE _Nullable +#define ABSL_NULLABILITY_UNKNOWN _Null_unspecified +#else +#define ABSL_NONNULL +#define ABSL_NULLABLE +#define ABSL_NULLABILITY_UNKNOWN +#endif + #endif // ABSL_BASE_NULLABILITY_H_ diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/base/optimization.h b/naiveproxy/src/third_party/abseil-cpp/absl/base/optimization.h index 3aa66e1c7d..429ea9ce79 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/base/optimization.h +++ b/naiveproxy/src/third_party/abseil-cpp/absl/base/optimization.h @@ -25,6 +25,8 @@ // new code that requires C compatibility or assume C compatibility will remain // indefinitely. +// SKIP_ABSL_INLINE_NAMESPACE_CHECK + #ifndef ABSL_BASE_OPTIMIZATION_H_ #define ABSL_BASE_OPTIMIZATION_H_ @@ -271,20 +273,14 @@ #elif defined(_MSC_VER) #define ABSL_ASSUME(cond) __assume(cond) #elif defined(__cpp_lib_unreachable) && __cpp_lib_unreachable >= 202202L -#define ABSL_ASSUME(cond) \ - do { \ - if (!(cond)) std::unreachable(); \ - } while (false) +#define ABSL_ASSUME(cond) ((cond) ? void() : std::unreachable()) #elif defined(__GNUC__) || ABSL_HAVE_BUILTIN(__builtin_unreachable) -#define ABSL_ASSUME(cond) \ - do { \ - if (!(cond)) __builtin_unreachable(); \ - } while (false) +#define ABSL_ASSUME(cond) ((cond) ? void() : __builtin_unreachable()) +#elif ABSL_INTERNAL_CPLUSPLUS_LANG >= 202002L +// Unimplemented. Uses the same definition as ABSL_ASSERT in the NDEBUG case. +#define ABSL_ASSUME(expr) (decltype((expr) ? void() : void())()) #else -#define ABSL_ASSUME(cond) \ - do { \ - static_cast(false && (cond)); \ - } while (false) +#define ABSL_ASSUME(expr) (false ? ((expr) ? void() : void()) : void()) #endif // ABSL_INTERNAL_UNIQUE_SMALL_NAME(cond) diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/cleanup/BUILD.bazel b/naiveproxy/src/third_party/abseil-cpp/absl/cleanup/BUILD.bazel index 984d571492..2c20224264 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/cleanup/BUILD.bazel +++ b/naiveproxy/src/third_party/abseil-cpp/absl/cleanup/BUILD.bazel @@ -67,7 +67,7 @@ cc_test( ":cleanup", "//absl/base:config", "//absl/utility", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h b/naiveproxy/src/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h index 2783fcb7c1..a686f49b74 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +++ b/naiveproxy/src/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h @@ -70,7 +70,7 @@ class Storage { Storage& operator=(const Storage& other) = delete; - void* GetCallbackBuffer() { return static_cast(+callback_buffer_); } + void* GetCallbackBuffer() { return static_cast(callback_buffer_); } Callback& GetCallback() { return *reinterpret_cast(GetCallbackBuffer()); diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/container/BUILD.bazel b/naiveproxy/src/third_party/abseil-cpp/absl/container/BUILD.bazel index 009e67c21e..19dc91de1d 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/container/BUILD.bazel +++ b/naiveproxy/src/third_party/abseil-cpp/absl/container/BUILD.bazel @@ -54,8 +54,8 @@ cc_test( "//absl/types:any", "//absl/types:optional", "//absl/utility", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -87,8 +87,8 @@ cc_test( "//absl/base:exception_testing", "//absl/hash:hash_testing", "//absl/memory", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -101,8 +101,8 @@ cc_test( ":fixed_array", "//absl/base:config", "//absl/base:exception_safety_testing", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -115,7 +115,7 @@ cc_binary( tags = ["benchmark"], deps = [ ":fixed_array", - "@com_github_google_benchmark//:benchmark_main", + "@google_benchmark//:benchmark_main", ], ) @@ -175,8 +175,8 @@ cc_test( "//absl/log:check", "//absl/memory", "//absl/strings", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -192,7 +192,7 @@ cc_binary( "//absl/base:core_headers", "//absl/base:raw_logging_internal", "//absl/strings", - "@com_github_google_benchmark//:benchmark_main", + "@google_benchmark//:benchmark_main", ], ) @@ -204,8 +204,8 @@ cc_test( ":inlined_vector", "//absl/base:config", "//absl/base:exception_safety_testing", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -229,8 +229,8 @@ cc_test( linkopts = ABSL_DEFAULT_LINKOPTS, deps = [ ":test_instance_tracker", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -275,8 +275,8 @@ cc_test( "//absl/log:check", "//absl/meta:type_traits", "//absl/types:any", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -317,8 +317,8 @@ cc_test( "//absl/log:check", "//absl/memory", "//absl/strings", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -354,8 +354,8 @@ cc_test( ":unordered_map_members_test", ":unordered_map_modifiers_test", "//absl/base:config", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -392,8 +392,8 @@ cc_test( ":unordered_set_modifiers_test", "//absl/base:config", "//absl/memory", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -422,8 +422,8 @@ cc_test( "//absl/base:no_destructor", "//absl/meta:type_traits", "//absl/strings", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -471,8 +471,8 @@ cc_test( "//absl/strings", "//absl/strings:cord", "//absl/strings:cord_test_helpers", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -511,8 +511,8 @@ cc_test( linkopts = ABSL_DEFAULT_LINKOPTS, deps = [ ":hash_policy_testing", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -535,8 +535,8 @@ cc_test( deps = [ ":container_memory", ":hash_policy_traits", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -557,8 +557,8 @@ cc_test( deps = [ ":common_policy_traits", "//absl/base:config", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -622,8 +622,8 @@ cc_test( "//absl/synchronization", "//absl/synchronization:thread_pool", "//absl/time", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -644,8 +644,8 @@ cc_test( ":hash_policy_traits", ":node_slot_policy", "//absl/base:config", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -682,6 +682,7 @@ cc_library( linkopts = ABSL_DEFAULT_LINKOPTS, deps = [ ":common", + ":common_policy_traits", ":compressed_tuple", ":container_memory", ":hash_function_defaults", @@ -736,8 +737,8 @@ cc_test( "//absl/meta:type_traits", "//absl/strings", "//absl/types:optional", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -756,7 +757,7 @@ cc_binary( "//absl/base:raw_logging_internal", "//absl/random", "//absl/strings:str_format", - "@com_github_google_benchmark//:benchmark_main", + "@google_benchmark//:benchmark_main", ], ) @@ -795,8 +796,8 @@ cc_test( ":raw_hash_set", ":tracked", "//absl/base:config", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -830,8 +831,8 @@ cc_test( "//absl/log:check", "//absl/types:span", "//absl/utility", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -847,7 +848,7 @@ cc_binary( ":layout", "//absl/base:core_headers", "//absl/base:raw_logging_internal", - "@com_github_google_benchmark//:benchmark_main", + "@google_benchmark//:benchmark_main", ], ) @@ -871,7 +872,7 @@ cc_library( deps = [ ":hash_generator_testing", ":hash_policy_testing", - "@com_google_googletest//:gtest", + "@googletest//:gtest", ], ) @@ -884,7 +885,7 @@ cc_library( deps = [ ":hash_generator_testing", ":hash_policy_testing", - "@com_google_googletest//:gtest", + "@googletest//:gtest", ], ) @@ -897,7 +898,7 @@ cc_library( deps = [ ":hash_generator_testing", ":hash_policy_testing", - "@com_google_googletest//:gtest", + "@googletest//:gtest", ], ) @@ -911,7 +912,7 @@ cc_library( ":hash_generator_testing", ":hash_policy_testing", "//absl/meta:type_traits", - "@com_google_googletest//:gtest", + "@googletest//:gtest", ], ) @@ -923,7 +924,7 @@ cc_library( linkopts = ABSL_DEFAULT_LINKOPTS, deps = [ "//absl/meta:type_traits", - "@com_google_googletest//:gtest", + "@googletest//:gtest", ], ) @@ -935,7 +936,7 @@ cc_library( linkopts = ABSL_DEFAULT_LINKOPTS, deps = [ "//absl/meta:type_traits", - "@com_google_googletest//:gtest", + "@googletest//:gtest", ], ) @@ -948,7 +949,7 @@ cc_library( deps = [ ":hash_generator_testing", ":hash_policy_testing", - "@com_google_googletest//:gtest", + "@googletest//:gtest", ], ) @@ -961,7 +962,7 @@ cc_library( deps = [ ":hash_generator_testing", ":hash_policy_testing", - "@com_google_googletest//:gtest", + "@googletest//:gtest", ], ) @@ -976,8 +977,8 @@ cc_test( ":unordered_set_lookup_test", ":unordered_set_members_test", ":unordered_set_modifiers_test", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -992,8 +993,8 @@ cc_test( ":unordered_map_lookup_test", ":unordered_map_members_test", ":unordered_map_modifiers_test", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -1009,8 +1010,8 @@ cc_test( ":flat_hash_set", ":node_hash_map", ":node_hash_set", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -1091,8 +1092,8 @@ cc_test( "//absl/strings", "//absl/types:compare", "//absl/types:optional", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -1121,7 +1122,7 @@ cc_binary( "//absl/strings:cord", "//absl/strings:str_format", "//absl/time", - "@com_github_google_benchmark//:benchmark_main", - "@com_google_googletest//:gtest", + "@google_benchmark//:benchmark_main", + "@googletest//:gtest", ], ) diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/container/BUILD.gn b/naiveproxy/src/third_party/abseil-cpp/absl/container/BUILD.gn index 2f845377cf..08407836e2 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/container/BUILD.gn +++ b/naiveproxy/src/third_party/abseil-cpp/absl/container/BUILD.gn @@ -387,6 +387,7 @@ absl_source_set("raw_hash_set") { public = [ "internal/raw_hash_set.h" ] deps = [ ":common", + ":common_policy_traits", ":compressed_tuple", ":container_memory", ":hash_function_defaults", diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/container/CMakeLists.txt b/naiveproxy/src/third_party/abseil-cpp/absl/container/CMakeLists.txt index b9152d24f6..85a4ce219e 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/container/CMakeLists.txt +++ b/naiveproxy/src/third_party/abseil-cpp/absl/container/CMakeLists.txt @@ -749,6 +749,7 @@ absl_cc_library( ${ABSL_DEFAULT_COPTS} DEPS absl::bits + absl::common_policy_traits absl::compressed_tuple absl::config absl::container_common diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/container/fixed_array.h b/naiveproxy/src/third_party/abseil-cpp/absl/container/fixed_array.h index 9f1c813dca..95abb0a59d 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/container/fixed_array.h +++ b/naiveproxy/src/third_party/abseil-cpp/absl/container/fixed_array.h @@ -41,6 +41,7 @@ #include #include "absl/algorithm/algorithm.h" +#include "absl/base/attributes.h" #include "absl/base/config.h" #include "absl/base/dynamic_annotations.h" #include "absl/base/internal/throw_delegate.h" @@ -74,7 +75,7 @@ constexpr static auto kFixedArrayUseDefault = static_cast(-1); // `std::vector`. template > -class FixedArray { +class ABSL_ATTRIBUTE_WARN_UNUSED FixedArray { static_assert(!std::is_array::value || std::extent::value > 0, "Arrays with unknown bounds cannot be used with FixedArray."); diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h b/naiveproxy/src/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h index c521f6122e..bbf54750f9 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +++ b/naiveproxy/src/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h @@ -28,6 +28,15 @@ namespace absl { ABSL_NAMESPACE_BEGIN namespace container_internal { +template +struct policy_trait_element_is_owner : std::false_type {}; + +template +struct policy_trait_element_is_owner< + Policy, + std::enable_if_t::value>> + : Policy::element_is_owner {}; + // Defines how slots are initialized/destroyed/moved. template struct common_policy_traits { diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc b/naiveproxy/src/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc index 97e56af844..8911aa3dc8 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +++ b/naiveproxy/src/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc @@ -24,6 +24,7 @@ #include "absl/base/config.h" #include "absl/base/dynamic_annotations.h" #include "absl/base/internal/endian.h" +#include "absl/base/internal/raw_logging.h" #include "absl/base/optimization.h" #include "absl/container/internal/container_memory.h" #include "absl/container/internal/hashtablez_sampler.h" @@ -661,6 +662,10 @@ size_t PrepareInsertNonSoo(CommonFields& common, size_t hash, FindInfo target, return target.offset; } +void HashTableSizeOverflow() { + ABSL_RAW_LOG(FATAL, "Hash table size overflow"); +} + } // namespace container_internal ABSL_NAMESPACE_END } // namespace absl diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h b/naiveproxy/src/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h index 7a42a56c33..79ccb596b7 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +++ b/naiveproxy/src/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h @@ -41,12 +41,6 @@ // When heterogeneous lookup is disabled, only the explicit `key_type` overloads // exist. // -// find() also supports passing the hash explicitly: -// -// iterator find(const key_type& key, size_t hash); -// template -// iterator find(const U& key, size_t hash); -// // In addition the pointer to element and iterator stability guarantees are // weaker: all iterators and pointers are invalidated after a new element is // inserted. @@ -209,6 +203,7 @@ #include "absl/base/port.h" #include "absl/base/prefetch.h" #include "absl/container/internal/common.h" // IWYU pragma: export // for node_handle +#include "absl/container/internal/common_policy_traits.h" #include "absl/container/internal/compressed_tuple.h" #include "absl/container/internal/container_memory.h" #include "absl/container/internal/hash_function_defaults.h" @@ -1231,6 +1226,9 @@ class RawHashSetLayout { // Given the capacity of a table, computes the total size of the backing // array. size_t alloc_size(size_t slot_size) const { + ABSL_SWISSTABLE_ASSERT( + slot_size <= + ((std::numeric_limits::max)() - slot_offset_) / capacity_); return slot_offset_ + capacity_ * slot_size; } @@ -1549,6 +1547,15 @@ inline size_t NormalizeCapacity(size_t n) { return n ? ~size_t{} >> countl_zero(n) : 1; } +template +size_t MaxValidCapacity() { + return NormalizeCapacity((std::numeric_limits::max)() / 4 / + kSlotSize); +} + +// Use a non-inlined function to avoid code bloat. +[[noreturn]] void HashTableSizeOverflow(); + // General notes on capacity/growth methods below: // - We use 7/8th as maximum load factor. For 16-wide groups, that gives an // average of two empty slots per group. @@ -2436,23 +2443,14 @@ class raw_hash_set { static_assert(std::is_lvalue_reference::value, "Policy::element() must return a reference"); - template - struct SameAsElementReference - : std::is_same::type>::type, - typename std::remove_cv< - typename std::remove_reference::type>::type> {}; - // An enabler for insert(T&&): T must be convertible to init_type or be the // same as [cv] value_type [ref]. - // Note: we separate SameAsElementReference into its own type to avoid using - // reference unless we need to. MSVC doesn't seem to like it in some - // cases. template - using RequiresInsertable = typename std::enable_if< - absl::disjunction, - SameAsElementReference>::value, - int>::type; + using Insertable = absl::disjunction< + std::is_same, absl::remove_cvref_t>, + std::is_convertible>; + template + using IsNotBitField = std::is_pointer; // RequiresNotInit is a workaround for gcc prior to 7.1. // See https://godbolt.org/g/Y4xsUh. @@ -2463,6 +2461,17 @@ class raw_hash_set { template using IsDecomposable = IsDecomposable; + template + using IsDecomposableAndInsertable = + IsDecomposable::value, T>>; + + // Evaluates to true if an assignment from the given type would require the + // source object to remain alive for the life of the element. + template + using IsLifetimeBoundAssignmentFrom = std::conditional_t< + policy_trait_element_is_owner::value, std::false_type, + type_traits_internal::IsLifetimeBoundAssignment>; + public: static_assert(std::is_same::value, "Allocators with custom pointer types are not supported"); @@ -2648,6 +2657,10 @@ class raw_hash_set { : settings_(CommonFields::CreateDefault(), hash, eq, alloc) { if (bucket_count > DefaultCapacity()) { + if (ABSL_PREDICT_FALSE(bucket_count > + MaxValidCapacity())) { + HashTableSizeOverflow(); + } resize(NormalizeCapacity(bucket_count)); } } @@ -2706,7 +2719,8 @@ class raw_hash_set { // absl::flat_hash_set a, b{a}; // // RequiresNotInit is a workaround for gcc prior to 7.1. - template = 0, RequiresInsertable = 0> + template = 0, + std::enable_if_t::value, int> = 0> raw_hash_set(std::initializer_list init, size_t bucket_count = 0, const hasher& hash = hasher(), const key_equal& eq = key_equal(), const allocator_type& alloc = allocator_type()) @@ -2717,7 +2731,8 @@ class raw_hash_set { const allocator_type& alloc = allocator_type()) : raw_hash_set(init.begin(), init.end(), bucket_count, hash, eq, alloc) {} - template = 0, RequiresInsertable = 0> + template = 0, + std::enable_if_t::value, int> = 0> raw_hash_set(std::initializer_list init, size_t bucket_count, const hasher& hash, const allocator_type& alloc) : raw_hash_set(init, bucket_count, hash, key_equal(), alloc) {} @@ -2726,7 +2741,8 @@ class raw_hash_set { const hasher& hash, const allocator_type& alloc) : raw_hash_set(init, bucket_count, hash, key_equal(), alloc) {} - template = 0, RequiresInsertable = 0> + template = 0, + std::enable_if_t::value, int> = 0> raw_hash_set(std::initializer_list init, size_t bucket_count, const allocator_type& alloc) : raw_hash_set(init, bucket_count, hasher(), key_equal(), alloc) {} @@ -2735,7 +2751,8 @@ class raw_hash_set { const allocator_type& alloc) : raw_hash_set(init, bucket_count, hasher(), key_equal(), alloc) {} - template = 0, RequiresInsertable = 0> + template = 0, + std::enable_if_t::value, int> = 0> raw_hash_set(std::initializer_list init, const allocator_type& alloc) : raw_hash_set(init, 0, hasher(), key_equal(), alloc) {} @@ -2916,7 +2933,9 @@ class raw_hash_set { ABSL_ASSUME(cap >= kDefaultCapacity); return cap; } - size_t max_size() const { return (std::numeric_limits::max)(); } + size_t max_size() const { + return CapacityToGrowth(MaxValidCapacity()); + } ABSL_ATTRIBUTE_REINITIALIZES void clear() { if (SwisstableGenerationsEnabled() && @@ -2951,15 +2970,26 @@ class raw_hash_set { // // flat_hash_map m; // m.insert(std::make_pair("abc", 42)); - // TODO(cheshire): A type alias T2 is introduced as a workaround for the nvcc - // bug. - template = 0, class T2 = T, - typename std::enable_if::value, int>::type = 0, - T* = nullptr> + template ::value && + IsNotBitField::value && + !IsLifetimeBoundAssignmentFrom::value, + int> = 0> std::pair insert(T&& value) ABSL_ATTRIBUTE_LIFETIME_BOUND { return emplace(std::forward(value)); } + template ::value && + IsNotBitField::value && + IsLifetimeBoundAssignmentFrom::value, + int> = 0> + std::pair insert( + T&& value ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(this)) + ABSL_ATTRIBUTE_LIFETIME_BOUND { + return emplace(std::forward(value)); + } + // This overload kicks in when the argument is a bitfield or an lvalue of // insertable and decomposable type. // @@ -2971,13 +3001,23 @@ class raw_hash_set { // const char* p = "hello"; // s.insert(p); // - template < - class T, RequiresInsertable = 0, - typename std::enable_if::value, int>::type = 0> + template ::value && + !IsLifetimeBoundAssignmentFrom::value, + int> = 0> std::pair insert(const T& value) ABSL_ATTRIBUTE_LIFETIME_BOUND { return emplace(value); } + template ::value && + IsLifetimeBoundAssignmentFrom::value, + int> = 0> + std::pair insert( + const T& value ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(this)) + ABSL_ATTRIBUTE_LIFETIME_BOUND { + return emplace(value); + } // This overload kicks in when the argument is an rvalue of init_type. Its // purpose is to handle brace-init-list arguments. @@ -2985,22 +3025,43 @@ class raw_hash_set { // flat_hash_map s; // s.insert({"abc", 42}); std::pair insert(init_type&& value) - ABSL_ATTRIBUTE_LIFETIME_BOUND { + ABSL_ATTRIBUTE_LIFETIME_BOUND +#if __cplusplus >= 202002L + requires(!IsLifetimeBoundAssignmentFrom::value) +#endif + { return emplace(std::move(value)); } +#if __cplusplus >= 202002L + std::pair insert( + init_type&& value ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(this)) + ABSL_ATTRIBUTE_LIFETIME_BOUND + requires(IsLifetimeBoundAssignmentFrom::value) + { + return emplace(std::move(value)); + } +#endif - // TODO(cheshire): A type alias T2 is introduced as a workaround for the nvcc - // bug. - template = 0, class T2 = T, - typename std::enable_if::value, int>::type = 0, - T* = nullptr> + template ::value && + IsNotBitField::value && + !IsLifetimeBoundAssignmentFrom::value, + int> = 0> iterator insert(const_iterator, T&& value) ABSL_ATTRIBUTE_LIFETIME_BOUND { return insert(std::forward(value)).first; } + template ::value && + IsNotBitField::value && + IsLifetimeBoundAssignmentFrom::value, + int> = 0> + iterator insert(const_iterator, T&& value ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY( + this)) ABSL_ATTRIBUTE_LIFETIME_BOUND { + return insert(std::forward(value)).first; + } - template < - class T, RequiresInsertable = 0, - typename std::enable_if::value, int>::type = 0> + template ::value, int> = 0> iterator insert(const_iterator, const T& value) ABSL_ATTRIBUTE_LIFETIME_BOUND { return insert(value).first; @@ -3016,7 +3077,8 @@ class raw_hash_set { for (; first != last; ++first) emplace(*first); } - template = 0, RequiresInsertable = 0> + template = 0, + std::enable_if_t::value, int> = 0> void insert(std::initializer_list ilist) { insert(ilist.begin(), ilist.end()); } @@ -3055,8 +3117,8 @@ class raw_hash_set { // flat_hash_map m = {{"abc", "def"}}; // // Creates no std::string copies and makes no heap allocations. // m.emplace("abc", "xyz"); - template ::value, int>::type = 0> + template ::value, int> = 0> std::pair emplace(Args&&... args) ABSL_ATTRIBUTE_LIFETIME_BOUND { return PolicyTraits::apply(EmplaceDecomposable{*this}, @@ -3066,8 +3128,8 @@ class raw_hash_set { // This overload kicks in if we cannot deduce the key from args. It constructs // value_type unconditionally and then either moves it into the table or // destroys. - template ::value, int>::type = 0> + template ::value, int> = 0> std::pair emplace(Args&&... args) ABSL_ATTRIBUTE_LIFETIME_BOUND { alignas(slot_type) unsigned char raw[sizeof(slot_type)]; @@ -3159,19 +3221,10 @@ class raw_hash_set { return 1; } - // Erases the element pointed to by `it`. Unlike `std::unordered_set::erase`, - // this method returns void to reduce algorithmic complexity to O(1). The - // iterator is invalidated, so any increment should be done before calling - // erase. In order to erase while iterating across a map, use the following - // idiom (which also works for some standard containers): - // - // for (auto it = m.begin(), end = m.end(); it != end;) { - // // `erase()` will invalidate `it`, so advance `it` first. - // auto copy_it = it++; - // if () { - // m.erase(copy_it); - // } - // } + // Erases the element pointed to by `it`. Unlike `std::unordered_set::erase`, + // this method returns void to reduce algorithmic complexity to O(1). The + // iterator is invalidated so any increment should be done before calling + // erase (e.g. `erase(it++)`). void erase(const_iterator cit) { erase(cit.inner_); } // This overload is necessary because otherwise erase(const K&) would be @@ -3259,9 +3312,8 @@ class raw_hash_set { return node; } - template < - class K = key_type, - typename std::enable_if::value, int>::type = 0> + template ::value, int> = 0> node_type extract(const key_arg& key) { auto it = find(key); return it == end() ? node_type() : extract(const_iterator{it}); @@ -3317,6 +3369,9 @@ class raw_hash_set { auto m = NormalizeCapacity(n | GrowthToLowerboundCapacity(size())); // n == 0 unconditionally rehashes as per the standard. if (n == 0 || m > cap) { + if (ABSL_PREDICT_FALSE(m > MaxValidCapacity())) { + HashTableSizeOverflow(); + } resize(m); // This is after resize, to ensure that we have completed the allocation @@ -3329,6 +3384,9 @@ class raw_hash_set { const size_t max_size_before_growth = is_soo() ? SooCapacity() : size() + growth_left(); if (n > max_size_before_growth) { + if (ABSL_PREDICT_FALSE(n > max_size())) { + HashTableSizeOverflow(); + } size_t m = GrowthToLowerboundCapacity(n); resize(NormalizeCapacity(m)); @@ -3372,20 +3430,14 @@ class raw_hash_set { #endif // ABSL_HAVE_PREFETCH } - // The API of find() has two extensions. - // - // 1. The hash can be passed by the user. It must be equal to the hash of the - // key. - // - // 2. The type of the key argument doesn't have to be key_type. This is so - // called heterogeneous key support. template + ABSL_DEPRECATE_AND_INLINE() iterator find(const key_arg& key, - size_t hash) ABSL_ATTRIBUTE_LIFETIME_BOUND { - AssertOnFind(key); - if (is_soo()) return find_soo(key); - return find_non_soo(key, hash); + size_t) ABSL_ATTRIBUTE_LIFETIME_BOUND { + return find(key); } + // The API of find() has one extension: the type of the key argument doesn't + // have to be key_type. This is so called heterogeneous key support. template iterator find(const key_arg& key) ABSL_ATTRIBUTE_LIFETIME_BOUND { AssertOnFind(key); @@ -3395,9 +3447,10 @@ class raw_hash_set { } template + ABSL_DEPRECATE_AND_INLINE() const_iterator find(const key_arg& key, - size_t hash) const ABSL_ATTRIBUTE_LIFETIME_BOUND { - return const_cast(this)->find(key, hash); + size_t) const ABSL_ATTRIBUTE_LIFETIME_BOUND { + return find(key); } template const_iterator find(const key_arg& key) const @@ -4133,7 +4186,7 @@ class raw_hash_set { (std::is_same>::value ? &DeallocateStandard : &raw_hash_set::dealloc_fn), - &raw_hash_set::resize_impl, + &raw_hash_set::resize_impl }; return value; } diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/copts/configure_copts.bzl b/naiveproxy/src/third_party/abseil-cpp/absl/copts/configure_copts.bzl index ca5f26daa6..9e0be28f79 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/copts/configure_copts.bzl +++ b/naiveproxy/src/third_party/abseil-cpp/absl/copts/configure_copts.bzl @@ -15,68 +15,25 @@ load( "ABSL_MSVC_FLAGS", "ABSL_MSVC_LINKOPTS", "ABSL_MSVC_TEST_FLAGS", - "ABSL_RANDOM_HWAES_ARM32_FLAGS", - "ABSL_RANDOM_HWAES_ARM64_FLAGS", - "ABSL_RANDOM_HWAES_MSVC_X64_FLAGS", - "ABSL_RANDOM_HWAES_X64_FLAGS", ) ABSL_DEFAULT_COPTS = select({ - "//absl:msvc_compiler": ABSL_MSVC_FLAGS, - "//absl:clang-cl_compiler": ABSL_CLANG_CL_FLAGS, - "//absl:clang_compiler": ABSL_LLVM_FLAGS, - "//absl:gcc_compiler": ABSL_GCC_FLAGS, - "//conditions:default": ABSL_GCC_FLAGS, + "@rules_cc//cc/compiler:msvc-cl": ABSL_MSVC_FLAGS, + "@rules_cc//cc/compiler:clang-cl": ABSL_CLANG_CL_FLAGS, + "@rules_cc//cc/compiler:clang": ABSL_LLVM_FLAGS, + "@rules_cc//cc/compiler:gcc": ABSL_GCC_FLAGS, + "//conditions:default": [], }) ABSL_TEST_COPTS = select({ - "//absl:msvc_compiler": ABSL_MSVC_TEST_FLAGS, - "//absl:clang-cl_compiler": ABSL_CLANG_CL_TEST_FLAGS, - "//absl:clang_compiler": ABSL_LLVM_TEST_FLAGS, - "//absl:gcc_compiler": ABSL_GCC_TEST_FLAGS, - "//conditions:default": ABSL_GCC_TEST_FLAGS, + "@rules_cc//cc/compiler:msvc-cl": ABSL_MSVC_TEST_FLAGS, + "@rules_cc//cc/compiler:clang-cl": ABSL_CLANG_CL_TEST_FLAGS, + "@rules_cc//cc/compiler:clang": ABSL_LLVM_TEST_FLAGS, + "@rules_cc//cc/compiler:gcc": ABSL_GCC_TEST_FLAGS, + "//conditions:default": [], }) ABSL_DEFAULT_LINKOPTS = select({ - "//absl:msvc_compiler": ABSL_MSVC_LINKOPTS, + "@rules_cc//cc/compiler:msvc-cl": ABSL_MSVC_LINKOPTS, "//conditions:default": [], }) - -# ABSL_RANDOM_RANDEN_COPTS blaze copts flags which are required by each -# environment to build an accelerated RandenHwAes library. -ABSL_RANDOM_RANDEN_COPTS = select({ - # APPLE - ":cpu_darwin_x86_64": ABSL_RANDOM_HWAES_X64_FLAGS, - ":cpu_darwin": ABSL_RANDOM_HWAES_X64_FLAGS, - ":cpu_x64_windows_msvc": ABSL_RANDOM_HWAES_MSVC_X64_FLAGS, - ":cpu_x64_windows": ABSL_RANDOM_HWAES_MSVC_X64_FLAGS, - ":cpu_k8": ABSL_RANDOM_HWAES_X64_FLAGS, - ":cpu_ppc": ["-mcrypto"], - ":cpu_aarch64": ABSL_RANDOM_HWAES_ARM64_FLAGS, - - # Supported by default or unsupported. - "//conditions:default": [], -}) - -# absl_random_randen_copts_init: -# Initialize the config targets based on cpu, os, etc. used to select -# the required values for ABSL_RANDOM_RANDEN_COPTS -def absl_random_randen_copts_init(): - """Initialize the config_settings used by ABSL_RANDOM_RANDEN_COPTS.""" - - # CPU configs. - # These configs have consistent flags to enable HWAES intsructions. - cpu_configs = [ - "ppc", - "k8", - "darwin_x86_64", - "darwin", - "x64_windows_msvc", - "x64_windows", - "aarch64", - ] - for cpu in cpu_configs: - native.config_setting( - name = "cpu_%s" % cpu, - values = {"cpu": cpu}, - ) diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/copts/copts.py b/naiveproxy/src/third_party/abseil-cpp/absl/copts/copts.py index 2d85ac744f..d1cfe42974 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/copts/copts.py +++ b/naiveproxy/src/third_party/abseil-cpp/absl/copts/copts.py @@ -180,15 +180,4 @@ COPT_VARS = { # Object file doesn't export any previously undefined symbols "-ignore:4221", ], - # "HWAES" is an abbreviation for "hardware AES" (AES - Advanced Encryption - # Standard). These flags are used for detecting whether or not the target - # architecture has hardware support for AES instructions which can be used - # to improve performance of some random bit generators. - "ABSL_RANDOM_HWAES_ARM64_FLAGS": ["-march=armv8-a+crypto"], - "ABSL_RANDOM_HWAES_ARM32_FLAGS": ["-mfpu=neon"], - "ABSL_RANDOM_HWAES_X64_FLAGS": [ - "-maes", - "-msse4.1", - ], - "ABSL_RANDOM_HWAES_MSVC_X64_FLAGS": [], } diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/crc/BUILD.bazel b/naiveproxy/src/third_party/abseil-cpp/absl/crc/BUILD.bazel index 890d637c5f..b659a7e24e 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/crc/BUILD.bazel +++ b/naiveproxy/src/third_party/abseil-cpp/absl/crc/BUILD.bazel @@ -42,6 +42,7 @@ cc_library( deps = [ "//absl/base", "//absl/base:config", + "//absl/types:optional", ], ) @@ -111,8 +112,8 @@ cc_test( ":crc32c", "//absl/strings", "//absl/strings:str_format", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -158,8 +159,8 @@ cc_test( "//absl/random", "//absl/random:distributions", "//absl/strings", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -171,8 +172,8 @@ cc_test( visibility = ["//visibility:private"], deps = [ ":non_temporal_memcpy", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -200,8 +201,8 @@ cc_test( deps = [ ":crc32c", ":crc_cord_state", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -219,6 +220,6 @@ cc_binary( ":crc32c", "//absl/memory", "//absl/strings", - "@com_github_google_benchmark//:benchmark_main", + "@google_benchmark//:benchmark_main", ], ) diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/crc/BUILD.gn b/naiveproxy/src/third_party/abseil-cpp/absl/crc/BUILD.gn index ac64d921e7..d88005856f 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/crc/BUILD.gn +++ b/naiveproxy/src/third_party/abseil-cpp/absl/crc/BUILD.gn @@ -10,6 +10,7 @@ absl_source_set("cpu_detect") { deps = [ "//third_party/abseil-cpp/absl/base", "//third_party/abseil-cpp/absl/base:config", + "//third_party/abseil-cpp/absl/types:optional", ] visibility = [ ":*" ] } diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/crc/CMakeLists.txt b/naiveproxy/src/third_party/abseil-cpp/absl/crc/CMakeLists.txt index d52a1bc4a5..f068e5430a 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/crc/CMakeLists.txt +++ b/naiveproxy/src/third_party/abseil-cpp/absl/crc/CMakeLists.txt @@ -25,6 +25,7 @@ absl_cc_library( DEPS absl::base absl::config + absl::optional ) # Internal-only target, do not depend on directly. diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc b/naiveproxy/src/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc index e27719cf3c..c59f773ea3 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +++ b/naiveproxy/src/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc @@ -18,12 +18,21 @@ #include #include "absl/base/config.h" +#include "absl/types/optional.h" // IWYU pragma: keep #if defined(__aarch64__) && defined(__linux__) #include #include #endif +#if defined(__aarch64__) && defined(__APPLE__) +#if defined(__has_include) && __has_include() +#include +#endif +#include +#include +#endif + #if defined(_WIN32) || defined(_WIN64) #include #endif @@ -277,6 +286,49 @@ bool SupportsArmCRC32PMULL() { #endif } +#elif defined(__aarch64__) && defined(__APPLE__) + +CpuType GetCpuType() { return CpuType::kUnknown; } + +template +static absl::optional ReadSysctlByName(const char* name) { + T val; + size_t val_size = sizeof(T); + int ret = sysctlbyname(name, &val, &val_size, nullptr, 0); + if (ret == -1) { + return absl::nullopt; + } + return val; +} + +bool SupportsArmCRC32PMULL() { + // Newer XNU kernels support querying all capabilities in a single + // sysctlbyname. +#if defined(CAP_BIT_CRC32) && defined(CAP_BIT_FEAT_PMULL) + static const absl::optional caps = + ReadSysctlByName("hw.optional.arm.caps"); + if (caps.has_value()) { + constexpr uint64_t kCrc32AndPmullCaps = + (uint64_t{1} << CAP_BIT_CRC32) | (uint64_t{1} << CAP_BIT_FEAT_PMULL); + return (*caps & kCrc32AndPmullCaps) == kCrc32AndPmullCaps; + } +#endif + + // https://developer.apple.com/documentation/kernel/1387446-sysctlbyname/determining_instruction_set_characteristics#3915619 + static const absl::optional armv8_crc32 = + ReadSysctlByName("hw.optional.armv8_crc32"); + if (armv8_crc32.value_or(0) == 0) { + return false; + } + // https://developer.apple.com/documentation/kernel/1387446-sysctlbyname/determining_instruction_set_characteristics#3918855 + static const absl::optional feat_pmull = + ReadSysctlByName("hw.optional.arm.FEAT_PMULL"); + if (feat_pmull.value_or(0) == 0) { + return false; + } + return true; +} + #else CpuType GetCpuType() { return CpuType::kUnknown; } diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/debugging/BUILD.bazel b/naiveproxy/src/third_party/abseil-cpp/absl/debugging/BUILD.bazel index 52b407c0a7..6e61bb367d 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/debugging/BUILD.bazel +++ b/naiveproxy/src/third_party/abseil-cpp/absl/debugging/BUILD.bazel @@ -67,8 +67,8 @@ cc_test( deps = [ ":stacktrace", "//absl/base:core_headers", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -88,8 +88,8 @@ cc_library( ], copts = ABSL_DEFAULT_COPTS, linkopts = ABSL_DEFAULT_LINKOPTS + select({ - "//absl:msvc_compiler": ["-DEFAULTLIB:dbghelp.lib"], - "//absl:clang-cl_compiler": ["-DEFAULTLIB:dbghelp.lib"], + "@rules_cc//cc/compiler:msvc-cl": ["-DEFAULTLIB:dbghelp.lib"], + "@rules_cc//cc/compiler:clang-cl": ["-DEFAULTLIB:dbghelp.lib"], "//absl:mingw_compiler": [ "-DEFAULTLIB:dbghelp.lib", "-ldbghelp", @@ -113,13 +113,13 @@ cc_test( name = "symbolize_test", srcs = ["symbolize_test.cc"], copts = ABSL_TEST_COPTS + select({ - "//absl:msvc_compiler": ["/Z7"], - "//absl:clang-cl_compiler": ["/Z7"], + "@rules_cc//cc/compiler:msvc-cl": ["/Z7"], + "@rules_cc//cc/compiler:clang-cl": ["/Z7"], "//conditions:default": [], }), linkopts = ABSL_DEFAULT_LINKOPTS + select({ - "//absl:msvc_compiler": ["/DEBUG"], - "//absl:clang-cl_compiler": ["/DEBUG"], + "@rules_cc//cc/compiler:msvc-cl": ["/DEBUG"], + "@rules_cc//cc/compiler:clang-cl": ["/DEBUG"], "//conditions:default": [], }), deps = [ @@ -132,7 +132,7 @@ cc_test( "//absl/log:check", "//absl/memory", "//absl/strings", - "@com_google_googletest//:gtest", + "@googletest//:gtest", ], ) @@ -177,9 +177,9 @@ cc_test( srcs = ["failure_signal_handler_test.cc"], copts = ABSL_TEST_COPTS, linkopts = select({ - "//absl:msvc_compiler": [], - "//absl:clang-cl_compiler": [], - "//absl:wasm": [], + "@rules_cc//cc/compiler:msvc-cl": [], + "@rules_cc//cc/compiler:clang-cl": [], + "@rules_cc//cc/compiler:emscripten": [], "//conditions:default": ["-pthread"], }) + ABSL_DEFAULT_LINKOPTS, deps = [ @@ -189,7 +189,7 @@ cc_test( "//absl/base:raw_logging_internal", "//absl/log:check", "//absl/strings", - "@com_google_googletest//:gtest", + "@googletest//:gtest", ], ) @@ -249,8 +249,8 @@ cc_test( "//absl/base:core_headers", "//absl/log", "//absl/memory", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -273,8 +273,8 @@ cc_test( deps = [ ":bounded_utf8_length_sequence", "//absl/base:config", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -300,8 +300,8 @@ cc_test( deps = [ ":decode_rust_punycode", "//absl/base:config", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -327,8 +327,8 @@ cc_test( ":demangle_rust", "//absl/base:config", "//absl/base:core_headers", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -349,8 +349,8 @@ cc_test( deps = [ ":utf8_for_code_point", "//absl/base:config", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -376,8 +376,8 @@ cc_test( ":leak_check", "//absl/base:config", "//absl/log", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -394,8 +394,8 @@ cc_binary( deps = [ ":leak_check", "//absl/log", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -424,8 +424,8 @@ cc_test( ":stack_consumption", "//absl/base:core_headers", "//absl/log", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -440,6 +440,6 @@ cc_binary( ":stacktrace", "//absl/base:config", "//absl/base:core_headers", - "@com_github_google_benchmark//:benchmark_main", + "@google_benchmark//:benchmark_main", ], ) diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/debugging/failure_signal_handler.cc b/naiveproxy/src/third_party/abseil-cpp/absl/debugging/failure_signal_handler.cc index 570d1e504d..d31f5a1f4e 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/debugging/failure_signal_handler.cc +++ b/naiveproxy/src/third_party/abseil-cpp/absl/debugging/failure_signal_handler.cc @@ -21,6 +21,7 @@ #ifdef _WIN32 #include #else +#include #include #include #endif @@ -65,6 +66,23 @@ #endif #endif +// ABSL_HAVE_PTHREAD_CPU_NUMBER_NP +// +// Checks whether pthread_cpu_number_np is available. +#ifdef ABSL_HAVE_PTHREAD_CPU_NUMBER_NP +#error ABSL_HAVE_PTHREAD_CPU_NUMBER_NP cannot be directly set +#elif defined(__APPLE__) && defined(__has_include) && \ + ((defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && \ + __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 110000) || \ + (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && \ + __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ >= 140200) || \ + (defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && \ + __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ >= 70100) || \ + (defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && \ + __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ >= 140200)) +#define ABSL_HAVE_PTHREAD_CPU_NUMBER_NP 1 +#endif + namespace absl { ABSL_NAMESPACE_BEGIN @@ -330,6 +348,20 @@ static void ImmediateAbortSignalHandler(int) { RaiseToDefaultHandler(SIGABRT); } using GetTidType = decltype(absl::base_internal::GetTID()); ABSL_CONST_INIT static std::atomic failed_tid(0); +static int GetCpuNumber() { +#ifdef ABSL_HAVE_SCHED_GETCPU + return sched_getcpu(); +#elif defined(ABSL_HAVE_PTHREAD_CPU_NUMBER_NP) + size_t cpu_num; + if (pthread_cpu_number_np(&cpu_num) == 0) { + return static_cast(cpu_num); + } + return -1; +#else + return -1; +#endif +} + #ifndef ABSL_HAVE_SIGACTION static void AbslFailureSignalHandler(int signo) { void* ucontext = nullptr; @@ -360,10 +392,7 @@ static void AbslFailureSignalHandler(int signo, siginfo_t*, void* ucontext) { // Increase the chance that the CPU we report was the same CPU on which the // signal was received by doing this as early as possible, i.e. after // verifying that this is not a recursive signal handler invocation. - int my_cpu = -1; -#ifdef ABSL_HAVE_SCHED_GETCPU - my_cpu = sched_getcpu(); -#endif + int my_cpu = GetCpuNumber(); #ifdef ABSL_HAVE_ALARM // Set an alarm to abort the program in case this code hangs or deadlocks. diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc b/naiveproxy/src/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc index fc046c4594..a98ca81d17 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +++ b/naiveproxy/src/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc @@ -378,8 +378,8 @@ class Symbolizer { }; // Protect against client code closing low-valued file descriptors it doesn't -// actually own, as has happened in b/384213477. -int SaferOpen(const char *fname, int flags) { +// actually own. +int OpenReadOnlyWithHighFD(const char *fname) { static int high_fd = [] { struct rlimit rlim{}; const int rc = getrlimit(RLIMIT_NOFILE, &rlim); @@ -393,22 +393,28 @@ int SaferOpen(const char *fname, int flags) { rc, static_cast(rlim.rlim_cur)); return -1; }(); + constexpr int kOpenFlags = O_RDONLY | O_CLOEXEC; if (high_fd >= 1000) { - const int fd = open(fname, flags); + const int fd = open(fname, kOpenFlags); if (fd != -1 && fd < high_fd) { // Try to relocate fd to high range. - const int fd2 = fcntl(fd, F_DUPFD, high_fd); + static_assert(kOpenFlags & O_CLOEXEC, + "F_DUPFD_CLOEXEC assumes O_CLOEXEC"); + const int fd2 = fcntl(fd, F_DUPFD_CLOEXEC, high_fd); if (fd2 != -1) { // Successfully obtained high fd. Use it. close(fd); return fd2; + } else { + ABSL_RAW_LOG(WARNING, "Unable to dup fd=%d above %d, errno=%d", fd, + high_fd, errno); } } // Either open failed and fd==-1, or fd is already above high_fd, or fcntl // failed and fd is valid (but low). return fd; } - return open(fname, flags); + return open(fname, kOpenFlags); } static std::atomic g_cached_symbolizer; @@ -1099,7 +1105,7 @@ static ABSL_ATTRIBUTE_NOINLINE bool ReadAddrMap( snprintf(maps_path, sizeof(maps_path), "/proc/self/task/%d/maps", getpid()); int maps_fd; - NO_INTR(maps_fd = SaferOpen(maps_path, O_RDONLY)); + NO_INTR(maps_fd = OpenReadOnlyWithHighFD(maps_path)); FileDescriptor wrapped_maps_fd(maps_fd); if (wrapped_maps_fd.get() < 0) { ABSL_RAW_LOG(WARNING, "%s: errno=%d", maps_path, errno); @@ -1373,7 +1379,7 @@ static void MaybeOpenFdFromSelfExe(ObjFile *obj) { if (memcmp(obj->start_addr, ELFMAG, SELFMAG) != 0) { return; } - int fd = SaferOpen("/proc/self/exe", O_RDONLY); + int fd = OpenReadOnlyWithHighFD("/proc/self/exe"); if (fd == -1) { return; } @@ -1397,7 +1403,7 @@ static void MaybeOpenFdFromSelfExe(ObjFile *obj) { static bool MaybeInitializeObjFile(ObjFile *obj) { if (obj->fd < 0) { - obj->fd = SaferOpen(obj->filename, O_RDONLY); + obj->fd = OpenReadOnlyWithHighFD(obj->filename); if (obj->fd < 0) { // Getting /proc/self/exe here means that we were hinted. @@ -1405,7 +1411,7 @@ static bool MaybeInitializeObjFile(ObjFile *obj) { // /proc/self/exe may be inaccessible (due to setuid, etc.), so try // accessing the binary via argv0. if (argv0_value != nullptr) { - obj->fd = SaferOpen(argv0_value, O_RDONLY); + obj->fd = OpenReadOnlyWithHighFD(argv0_value); } } else { MaybeOpenFdFromSelfExe(obj); diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/flags/BUILD.bazel b/naiveproxy/src/third_party/abseil-cpp/absl/flags/BUILD.bazel index af5f8d3ef2..d9a303458d 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/flags/BUILD.bazel +++ b/naiveproxy/src/third_party/abseil-cpp/absl/flags/BUILD.bazel @@ -66,6 +66,7 @@ cc_library( ":path_util", "//absl/base:config", "//absl/base:core_headers", + "//absl/base:no_destructor", "//absl/strings", "//absl/synchronization", ], @@ -87,6 +88,7 @@ cc_library( ":program_name", "//absl/base:config", "//absl/base:core_headers", + "//absl/base:no_destructor", "//absl/strings", "//absl/synchronization", ], @@ -219,6 +221,7 @@ cc_library( "//absl/base:config", "//absl/base:core_headers", "//absl/base:dynamic_annotations", + "//absl/base:no_destructor", "//absl/memory", "//absl/meta:type_traits", "//absl/strings", @@ -270,6 +273,7 @@ cc_library( ":reflection", "//absl/base:config", "//absl/base:core_headers", + "//absl/base:no_destructor", "//absl/strings", "//absl/synchronization", ], @@ -318,6 +322,7 @@ cc_library( "//absl/algorithm:container", "//absl/base:config", "//absl/base:core_headers", + "//absl/base:no_destructor", "//absl/strings", "//absl/synchronization", ], @@ -349,8 +354,8 @@ cc_test( ":reflection", "//absl/memory", "//absl/strings", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -364,8 +369,8 @@ cc_test( linkopts = ABSL_DEFAULT_LINKOPTS, deps = [ ":config", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -399,8 +404,8 @@ cc_test( "//absl/strings", "//absl/time", "//absl/types:optional", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -425,7 +430,7 @@ cc_binary( "//absl/strings", "//absl/time", "//absl/types:optional", - "@com_github_google_benchmark//:benchmark_main", + "@google_benchmark//:benchmark_main", ], ) @@ -439,8 +444,8 @@ cc_test( linkopts = ABSL_DEFAULT_LINKOPTS, deps = [ ":marshalling", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -470,8 +475,8 @@ cc_test( "//absl/log", "//absl/strings", "//absl/types:span", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -485,8 +490,8 @@ cc_test( linkopts = ABSL_DEFAULT_LINKOPTS, deps = [ ":path_util", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -505,8 +510,8 @@ cc_test( deps = [ ":program_name", "//absl/strings", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -531,8 +536,8 @@ cc_test( ":reflection", "//absl/memory", "//absl/strings", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -552,8 +557,8 @@ cc_test( "//absl/base", "//absl/container:fixed_array", "//absl/time", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -570,8 +575,8 @@ cc_test( ":path_util", ":program_name", "//absl/strings", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -600,6 +605,6 @@ cc_test( ":usage", ":usage_internal", "//absl/strings", - "@com_google_googletest//:gtest", + "@googletest//:gtest", ], ) diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/flags/BUILD.gn b/naiveproxy/src/third_party/abseil-cpp/absl/flags/BUILD.gn index 34a104bbfb..38b715e0fa 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/flags/BUILD.gn +++ b/naiveproxy/src/third_party/abseil-cpp/absl/flags/BUILD.gn @@ -20,6 +20,7 @@ absl_source_set("program_name") { ":path_util", "//third_party/abseil-cpp/absl/base:config", "//third_party/abseil-cpp/absl/base:core_headers", + "//third_party/abseil-cpp/absl/base:no_destructor", "//third_party/abseil-cpp/absl/strings:string_view", "//third_party/abseil-cpp/absl/synchronization", ] @@ -48,6 +49,7 @@ absl_source_set("config") { ":program_name", "//third_party/abseil-cpp/absl/base:config", "//third_party/abseil-cpp/absl/base:core_headers", + "//third_party/abseil-cpp/absl/base:no_destructor", "//third_party/abseil-cpp/absl/strings", "//third_party/abseil-cpp/absl/strings:string_view", "//third_party/abseil-cpp/absl/synchronization", @@ -140,6 +142,7 @@ absl_source_set("flag_internal") { "//third_party/abseil-cpp/absl/base:config", "//third_party/abseil-cpp/absl/base:core_headers", "//third_party/abseil-cpp/absl/base:dynamic_annotations", + "//third_party/abseil-cpp/absl/base:no_destructor", "//third_party/abseil-cpp/absl/memory", "//third_party/abseil-cpp/absl/meta:type_traits", "//third_party/abseil-cpp/absl/strings", @@ -183,6 +186,7 @@ absl_source_set("usage_internal") { ":reflection", "//third_party/abseil-cpp/absl/base:config", "//third_party/abseil-cpp/absl/base:core_headers", + "//third_party/abseil-cpp/absl/base:no_destructor", "//third_party/abseil-cpp/absl/strings", "//third_party/abseil-cpp/absl/strings:string_view", "//third_party/abseil-cpp/absl/synchronization", @@ -223,6 +227,7 @@ absl_source_set("parse") { "//third_party/abseil-cpp/absl/algorithm:container", "//third_party/abseil-cpp/absl/base:config", "//third_party/abseil-cpp/absl/base:core_headers", + "//third_party/abseil-cpp/absl/base:no_destructor", "//third_party/abseil-cpp/absl/strings", "//third_party/abseil-cpp/absl/strings:string_view", "//third_party/abseil-cpp/absl/synchronization", diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/flags/CMakeLists.txt b/naiveproxy/src/third_party/abseil-cpp/absl/flags/CMakeLists.txt index 7376d117e2..5430429954 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/flags/CMakeLists.txt +++ b/naiveproxy/src/third_party/abseil-cpp/absl/flags/CMakeLists.txt @@ -45,6 +45,7 @@ absl_cc_library( DEPS absl::config absl::core_headers + absl::no_destructor absl::flags_path_util absl::strings absl::synchronization @@ -68,6 +69,7 @@ absl_cc_library( absl::flags_path_util absl::flags_program_name absl::core_headers + absl::no_destructor absl::strings absl::synchronization ) @@ -192,6 +194,7 @@ absl_cc_library( absl::flags_commandlineflag_internal absl::flags_config absl::flags_marshalling + absl::no_destructor absl::synchronization absl::meta absl::utility @@ -259,6 +262,7 @@ absl_cc_library( absl::config absl::core_headers absl::flags_usage_internal + absl::no_destructor absl::raw_logging_internal absl::strings absl::synchronization @@ -289,6 +293,7 @@ absl_cc_library( absl::flags_program_name absl::flags_reflection absl::flags_usage + absl::no_destructor absl::strings absl::synchronization ) diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/flags/commandlineflag.cc b/naiveproxy/src/third_party/abseil-cpp/absl/flags/commandlineflag.cc index 9f3b4a5a28..4140230651 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/flags/commandlineflag.cc +++ b/naiveproxy/src/third_party/abseil-cpp/absl/flags/commandlineflag.cc @@ -24,6 +24,7 @@ namespace absl { ABSL_NAMESPACE_BEGIN +absl::string_view CommandLineFlag::TypeName() const { return ""; } bool CommandLineFlag::IsRetired() const { return false; } bool CommandLineFlag::ParseFrom(absl::string_view value, std::string* error) { return ParseFrom(value, flags_internal::SET_FLAGS_VALUE, diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/flags/commandlineflag.h b/naiveproxy/src/third_party/abseil-cpp/absl/flags/commandlineflag.h index 26ec0e7d84..a9ffd02084 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/flags/commandlineflag.h +++ b/naiveproxy/src/third_party/abseil-cpp/absl/flags/commandlineflag.h @@ -200,6 +200,13 @@ class CommandLineFlag { // Checks that flags default value can be converted to string and back to the // flag's value type. virtual void CheckDefaultValueParsingRoundtrip() const = 0; + + // absl::CommandLineFlag::TypeName() + // + // Returns string representation of the type of this flag + // (the way it is spelled in the ABSL_FLAG macro). + // The default implementation returns the empty string. + virtual absl::string_view TypeName() const; }; #if defined(__GNUC__) && !defined(__clang__) #pragma GCC diagnostic pop diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/flags/flag.h b/naiveproxy/src/third_party/abseil-cpp/absl/flags/flag.h index b2c6af2456..19d0ef992f 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/flags/flag.h +++ b/naiveproxy/src/third_party/abseil-cpp/absl/flags/flag.h @@ -204,12 +204,14 @@ ABSL_NAMESPACE_END #if ABSL_FLAGS_STRIP_NAMES #define ABSL_FLAG_IMPL_FLAGNAME(txt) "" +#define ABSL_FLAG_IMPL_TYPENAME(txt) "" #define ABSL_FLAG_IMPL_FILENAME() "" #define ABSL_FLAG_IMPL_REGISTRAR(T, flag) \ absl::flags_internal::FlagRegistrar(ABSL_FLAG_IMPL_FLAG_PTR(flag), \ nullptr) #else #define ABSL_FLAG_IMPL_FLAGNAME(txt) txt +#define ABSL_FLAG_IMPL_TYPENAME(txt) txt #define ABSL_FLAG_IMPL_FILENAME() __FILE__ #define ABSL_FLAG_IMPL_REGISTRAR(T, flag) \ absl::flags_internal::FlagRegistrar(ABSL_FLAG_IMPL_FLAG_PTR(flag), \ @@ -261,16 +263,17 @@ ABSL_NAMESPACE_END // Note: Name of registrar object is not arbitrary. It is used to "grab" // global name for FLAGS_no symbol, thus preventing the possibility // of defining two flags with names foo and nofoo. -#define ABSL_FLAG_IMPL(Type, name, default_value, help) \ - extern ::absl::Flag FLAGS_##name; \ - namespace absl /* block flags in namespaces */ {} \ - ABSL_FLAG_IMPL_DECLARE_DEF_VAL_WRAPPER(name, Type, default_value) \ - ABSL_FLAG_IMPL_DECLARE_HELP_WRAPPER(name, help) \ - ABSL_CONST_INIT absl::Flag FLAGS_##name{ \ - ABSL_FLAG_IMPL_FLAGNAME(#name), ABSL_FLAG_IMPL_FILENAME(), \ - ABSL_FLAG_IMPL_HELP_ARG(name), ABSL_FLAG_IMPL_DEFAULT_ARG(Type, name)}; \ - extern absl::flags_internal::FlagRegistrarEmpty FLAGS_no##name; \ - absl::flags_internal::FlagRegistrarEmpty FLAGS_no##name = \ +#define ABSL_FLAG_IMPL(Type, name, default_value, help) \ + extern ::absl::Flag FLAGS_##name; \ + namespace absl /* block flags in namespaces */ {} \ + ABSL_FLAG_IMPL_DECLARE_DEF_VAL_WRAPPER(name, Type, default_value) \ + ABSL_FLAG_IMPL_DECLARE_HELP_WRAPPER(name, help) \ + ABSL_CONST_INIT absl::Flag FLAGS_##name{ \ + ABSL_FLAG_IMPL_FLAGNAME(#name), ABSL_FLAG_IMPL_TYPENAME(#Type), \ + ABSL_FLAG_IMPL_FILENAME(), ABSL_FLAG_IMPL_HELP_ARG(name), \ + ABSL_FLAG_IMPL_DEFAULT_ARG(Type, name)}; \ + extern absl::flags_internal::FlagRegistrarEmpty FLAGS_no##name; \ + absl::flags_internal::FlagRegistrarEmpty FLAGS_no##name = \ ABSL_FLAG_IMPL_REGISTRAR(Type, FLAGS_##name) // ABSL_RETIRED_FLAG diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/flags/internal/flag.cc b/naiveproxy/src/third_party/abseil-cpp/absl/flags/internal/flag.cc index 981f19fdb8..ccd26670cf 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/flags/internal/flag.cc +++ b/naiveproxy/src/third_party/abseil-cpp/absl/flags/internal/flag.cc @@ -34,7 +34,9 @@ #include "absl/base/config.h" #include "absl/base/const_init.h" #include "absl/base/dynamic_annotations.h" +#include "absl/base/no_destructor.h" #include "absl/base/optimization.h" +#include "absl/base/thread_annotations.h" #include "absl/flags/config.h" #include "absl/flags/internal/commandlineflag.h" #include "absl/flags/usage_config.h" @@ -85,11 +87,15 @@ class MutexRelock { // we move the memory to the freelist where it lives indefinitely, so it can // still be safely accessed. This also prevents leak checkers from complaining // about the leaked memory that can no longer be accessed through any pointer. -ABSL_CONST_INIT absl::Mutex s_freelist_guard(absl::kConstInit); -ABSL_CONST_INIT std::vector* s_freelist = nullptr; +absl::Mutex* FreelistMutex() { + static absl::NoDestructor mutex; + return mutex.get(); +} +ABSL_CONST_INIT std::vector* s_freelist ABSL_GUARDED_BY(FreelistMutex()) + ABSL_PT_GUARDED_BY(FreelistMutex()) = nullptr; void AddToFreelist(void* p) { - absl::MutexLock l(&s_freelist_guard); + absl::MutexLock l(FreelistMutex()); if (!s_freelist) { s_freelist = new std::vector; } @@ -101,7 +107,7 @@ void AddToFreelist(void* p) { /////////////////////////////////////////////////////////////////////////////// uint64_t NumLeakedFlagValues() { - absl::MutexLock l(&s_freelist_guard); + absl::MutexLock l(FreelistMutex()); return s_freelist == nullptr ? 0u : s_freelist->size(); } @@ -336,6 +342,8 @@ void FlagImpl::StoreValue(const void* src, ValueSource source) { absl::string_view FlagImpl::Name() const { return name_; } +absl::string_view FlagImpl::TypeName() const { return type_name_; } + std::string FlagImpl::Filename() const { return flags_internal::GetUsageConfig().normalize_filename(filename_); } diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/flags/internal/flag.h b/naiveproxy/src/third_party/abseil-cpp/absl/flags/internal/flag.h index d62f310ec8..a6e7986f96 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/flags/internal/flag.h +++ b/naiveproxy/src/third_party/abseil-cpp/absl/flags/internal/flag.h @@ -582,10 +582,12 @@ class FlagState; #endif class FlagImpl final : public CommandLineFlag { public: - constexpr FlagImpl(const char* name, const char* filename, FlagOpFn op, - FlagHelpArg help, FlagValueStorageKind value_kind, + constexpr FlagImpl(const char* name, const char* type_name, + const char* filename, FlagOpFn op, FlagHelpArg help, + FlagValueStorageKind value_kind, FlagDefaultArg default_arg) : name_(name), + type_name_(type_name), filename_(filename), op_(op), help_(help.source), @@ -698,6 +700,7 @@ class FlagImpl final : public CommandLineFlag { // CommandLineFlag interface implementation absl::string_view Name() const override; + absl::string_view TypeName() const override; std::string Filename() const override; std::string Help() const override; FlagFastTypeId TypeId() const override; @@ -731,6 +734,10 @@ class FlagImpl final : public CommandLineFlag { // Flags name passed to ABSL_FLAG as second arg. const char* const name_; + + // Flags type passed to ABSL_FLAG as first arg. + const char* const type_name_; + // The file name where ABSL_FLAG resides. const char* const filename_; // Type-specific operations vtable. @@ -789,9 +796,9 @@ class FlagImpl final : public CommandLineFlag { template class Flag { public: - constexpr Flag(const char* name, const char* filename, FlagHelpArg help, - const FlagDefaultArg default_arg) - : impl_(name, filename, &FlagOps, help, + constexpr Flag(const char* name, const char* type_name, const char* filename, + FlagHelpArg help, const FlagDefaultArg default_arg) + : impl_(name, type_name, filename, &FlagOps, help, flags_internal::StorageKind(), default_arg), value_() {} diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.cc b/naiveproxy/src/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.cc index a7eb58b6d4..610d1ffdf7 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.cc +++ b/naiveproxy/src/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.cc @@ -59,6 +59,10 @@ bool PrivateHandleAccessor::ParseFrom(CommandLineFlag& flag, return flag.ParseFrom(value, set_mode, source, error); } +absl::string_view PrivateHandleAccessor::TypeName(const CommandLineFlag& flag) { + return flag.TypeName(); +} + } // namespace flags_internal ABSL_NAMESPACE_END } // namespace absl diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.h b/naiveproxy/src/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.h index c64435cd61..bf4154c5a5 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.h +++ b/naiveproxy/src/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.h @@ -52,6 +52,9 @@ class PrivateHandleAccessor { static bool ParseFrom(CommandLineFlag& flag, absl::string_view value, flags_internal::FlagSettingMode set_mode, flags_internal::ValueSource source, std::string& error); + + // Access to CommandLineFlag::TypeName. + static absl::string_view TypeName(const CommandLineFlag& flag); }; } // namespace flags_internal diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/flags/internal/program_name.cc b/naiveproxy/src/third_party/abseil-cpp/absl/flags/internal/program_name.cc index 51d698da8b..fb06643df5 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/flags/internal/program_name.cc +++ b/naiveproxy/src/third_party/abseil-cpp/absl/flags/internal/program_name.cc @@ -19,7 +19,7 @@ #include "absl/base/attributes.h" #include "absl/base/config.h" -#include "absl/base/const_init.h" +#include "absl/base/no_destructor.h" #include "absl/base/thread_annotations.h" #include "absl/flags/internal/path_util.h" #include "absl/strings/string_view.h" @@ -29,30 +29,31 @@ namespace absl { ABSL_NAMESPACE_BEGIN namespace flags_internal { -ABSL_CONST_INIT static absl::Mutex program_name_guard(absl::kConstInit); -ABSL_CONST_INIT static std::string* program_name - ABSL_GUARDED_BY(program_name_guard) = nullptr; +static absl::Mutex* ProgramNameMutex() { + static absl::NoDestructor mutex; + return mutex.get(); +} +ABSL_CONST_INIT static std::string* program_name ABSL_GUARDED_BY( + ProgramNameMutex()) ABSL_PT_GUARDED_BY(ProgramNameMutex()) = nullptr; std::string ProgramInvocationName() { - absl::MutexLock l(&program_name_guard); - + absl::MutexLock l(ProgramNameMutex()); return program_name ? *program_name : "UNKNOWN"; } std::string ShortProgramInvocationName() { - absl::MutexLock l(&program_name_guard); - + absl::MutexLock l(ProgramNameMutex()); return program_name ? std::string(flags_internal::Basename(*program_name)) : "UNKNOWN"; } void SetProgramInvocationName(absl::string_view prog_name_str) { - absl::MutexLock l(&program_name_guard); - - if (!program_name) + absl::MutexLock l(ProgramNameMutex()); + if (!program_name) { program_name = new std::string(prog_name_str); - else + } else { program_name->assign(prog_name_str.data(), prog_name_str.size()); + } } } // namespace flags_internal diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/flags/internal/usage.cc b/naiveproxy/src/third_party/abseil-cpp/absl/flags/internal/usage.cc index 8b169bcdc2..fc68b03db2 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/flags/internal/usage.cc +++ b/naiveproxy/src/third_party/abseil-cpp/absl/flags/internal/usage.cc @@ -29,7 +29,7 @@ #include "absl/base/attributes.h" #include "absl/base/config.h" -#include "absl/base/const_init.h" +#include "absl/base/no_destructor.h" #include "absl/base/thread_annotations.h" #include "absl/flags/commandlineflag.h" #include "absl/flags/flag.h" @@ -434,45 +434,48 @@ HelpMode HandleUsageFlags(std::ostream& out, namespace { -ABSL_CONST_INIT absl::Mutex help_attributes_guard(absl::kConstInit); -ABSL_CONST_INIT std::string* match_substr - ABSL_GUARDED_BY(help_attributes_guard) = nullptr; -ABSL_CONST_INIT HelpMode help_mode ABSL_GUARDED_BY(help_attributes_guard) = +absl::Mutex* HelpAttributesMutex() { + static absl::NoDestructor mutex; + return mutex.get(); +} +ABSL_CONST_INIT std::string* match_substr ABSL_GUARDED_BY(HelpAttributesMutex()) + ABSL_PT_GUARDED_BY(HelpAttributesMutex()) = nullptr; +ABSL_CONST_INIT HelpMode help_mode ABSL_GUARDED_BY(HelpAttributesMutex()) = HelpMode::kNone; -ABSL_CONST_INIT HelpFormat help_format ABSL_GUARDED_BY(help_attributes_guard) = +ABSL_CONST_INIT HelpFormat help_format ABSL_GUARDED_BY(HelpAttributesMutex()) = HelpFormat::kHumanReadable; } // namespace std::string GetFlagsHelpMatchSubstr() { - absl::MutexLock l(&help_attributes_guard); + absl::MutexLock l(HelpAttributesMutex()); if (match_substr == nullptr) return ""; return *match_substr; } void SetFlagsHelpMatchSubstr(absl::string_view substr) { - absl::MutexLock l(&help_attributes_guard); + absl::MutexLock l(HelpAttributesMutex()); if (match_substr == nullptr) match_substr = new std::string; match_substr->assign(substr.data(), substr.size()); } HelpMode GetFlagsHelpMode() { - absl::MutexLock l(&help_attributes_guard); + absl::MutexLock l(HelpAttributesMutex()); return help_mode; } void SetFlagsHelpMode(HelpMode mode) { - absl::MutexLock l(&help_attributes_guard); + absl::MutexLock l(HelpAttributesMutex()); help_mode = mode; } HelpFormat GetFlagsHelpFormat() { - absl::MutexLock l(&help_attributes_guard); + absl::MutexLock l(HelpAttributesMutex()); return help_format; } void SetFlagsHelpFormat(HelpFormat format) { - absl::MutexLock l(&help_attributes_guard); + absl::MutexLock l(HelpAttributesMutex()); help_format = format; } diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/flags/parse.cc b/naiveproxy/src/third_party/abseil-cpp/absl/flags/parse.cc index 526b61d1d1..8be2016fd6 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/flags/parse.cc +++ b/naiveproxy/src/third_party/abseil-cpp/absl/flags/parse.cc @@ -35,7 +35,7 @@ #include "absl/algorithm/container.h" #include "absl/base/attributes.h" #include "absl/base/config.h" -#include "absl/base/const_init.h" +#include "absl/base/no_destructor.h" #include "absl/base/thread_annotations.h" #include "absl/flags/commandlineflag.h" #include "absl/flags/config.h" @@ -64,14 +64,17 @@ ABSL_NAMESPACE_BEGIN namespace flags_internal { namespace { -ABSL_CONST_INIT absl::Mutex processing_checks_guard(absl::kConstInit); +absl::Mutex* ProcessingChecksMutex() { + static absl::NoDestructor mutex; + return mutex.get(); +} ABSL_CONST_INIT bool flagfile_needs_processing - ABSL_GUARDED_BY(processing_checks_guard) = false; + ABSL_GUARDED_BY(ProcessingChecksMutex()) = false; ABSL_CONST_INIT bool fromenv_needs_processing - ABSL_GUARDED_BY(processing_checks_guard) = false; + ABSL_GUARDED_BY(ProcessingChecksMutex()) = false; ABSL_CONST_INIT bool tryfromenv_needs_processing - ABSL_GUARDED_BY(processing_checks_guard) = false; + ABSL_GUARDED_BY(ProcessingChecksMutex()) = false; ABSL_CONST_INIT absl::Mutex specified_flags_guard(absl::kConstInit); ABSL_CONST_INIT std::vector* specified_flags @@ -106,7 +109,7 @@ ABSL_FLAG(std::vector, flagfile, {}, .OnUpdate([]() { if (absl::GetFlag(FLAGS_flagfile).empty()) return; - absl::MutexLock l(&absl::flags_internal::processing_checks_guard); + absl::MutexLock l(absl::flags_internal::ProcessingChecksMutex()); // Setting this flag twice before it is handled most likely an internal // error and should be reviewed by developers. @@ -122,7 +125,7 @@ ABSL_FLAG(std::vector, fromenv, {}, .OnUpdate([]() { if (absl::GetFlag(FLAGS_fromenv).empty()) return; - absl::MutexLock l(&absl::flags_internal::processing_checks_guard); + absl::MutexLock l(absl::flags_internal::ProcessingChecksMutex()); // Setting this flag twice before it is handled most likely an internal // error and should be reviewed by developers. @@ -138,7 +141,7 @@ ABSL_FLAG(std::vector, tryfromenv, {}, .OnUpdate([]() { if (absl::GetFlag(FLAGS_tryfromenv).empty()) return; - absl::MutexLock l(&absl::flags_internal::processing_checks_guard); + absl::MutexLock l(absl::flags_internal::ProcessingChecksMutex()); // Setting this flag twice before it is handled most likely an internal // error and should be reviewed by developers. @@ -415,7 +418,7 @@ bool HandleGeneratorFlags(std::vector& input_args, std::vector& flagfile_value) { bool success = true; - absl::MutexLock l(&flags_internal::processing_checks_guard); + absl::MutexLock l(flags_internal::ProcessingChecksMutex()); // flagfile could have been set either on a command line or // programmatically before invoking ParseCommandLine. Note that we do not @@ -478,7 +481,7 @@ void ResetGeneratorFlags(const std::vector& flagfile_value) { // going to be {"f1", "f2"} if (!flagfile_value.empty()) { absl::SetFlag(&FLAGS_flagfile, flagfile_value); - absl::MutexLock l(&flags_internal::processing_checks_guard); + absl::MutexLock l(flags_internal::ProcessingChecksMutex()); flags_internal::flagfile_needs_processing = false; } @@ -490,7 +493,7 @@ void ResetGeneratorFlags(const std::vector& flagfile_value) { absl::SetFlag(&FLAGS_tryfromenv, {}); } - absl::MutexLock l(&flags_internal::processing_checks_guard); + absl::MutexLock l(flags_internal::ProcessingChecksMutex()); flags_internal::fromenv_needs_processing = false; flags_internal::tryfromenv_needs_processing = false; } diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/flags/usage_config.cc b/naiveproxy/src/third_party/abseil-cpp/absl/flags/usage_config.cc index 5d7426db31..5922c5e20f 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/flags/usage_config.cc +++ b/naiveproxy/src/third_party/abseil-cpp/absl/flags/usage_config.cc @@ -22,6 +22,7 @@ #include "absl/base/attributes.h" #include "absl/base/config.h" #include "absl/base/const_init.h" +#include "absl/base/no_destructor.h" #include "absl/base/thread_annotations.h" #include "absl/flags/internal/path_util.h" #include "absl/flags/internal/program_name.h" @@ -104,14 +105,18 @@ std::string NormalizeFilename(absl::string_view filename) { // -------------------------------------------------------------------- -ABSL_CONST_INIT absl::Mutex custom_usage_config_guard(absl::kConstInit); +absl::Mutex* CustomUsageConfigMutex() { + static absl::NoDestructor mutex; + return mutex.get(); +} ABSL_CONST_INIT FlagsUsageConfig* custom_usage_config - ABSL_GUARDED_BY(custom_usage_config_guard) = nullptr; + ABSL_GUARDED_BY(CustomUsageConfigMutex()) + ABSL_PT_GUARDED_BY(CustomUsageConfigMutex()) = nullptr; } // namespace FlagsUsageConfig GetUsageConfig() { - absl::MutexLock l(&custom_usage_config_guard); + absl::MutexLock l(CustomUsageConfigMutex()); if (custom_usage_config) return *custom_usage_config; @@ -136,7 +141,7 @@ void ReportUsageError(absl::string_view msg, bool is_fatal) { } // namespace flags_internal void SetFlagsUsageConfig(FlagsUsageConfig usage_config) { - absl::MutexLock l(&flags_internal::custom_usage_config_guard); + absl::MutexLock l(flags_internal::CustomUsageConfigMutex()); if (!usage_config.contains_helpshort_flags) usage_config.contains_helpshort_flags = diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/functional/BUILD.bazel b/naiveproxy/src/third_party/abseil-cpp/absl/functional/BUILD.bazel index 1a18af25b9..56380cb0bc 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/functional/BUILD.bazel +++ b/naiveproxy/src/third_party/abseil-cpp/absl/functional/BUILD.bazel @@ -62,8 +62,8 @@ cc_test( "//absl/base:core_headers", "//absl/meta:type_traits", "//absl/utility", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -89,8 +89,8 @@ cc_test( deps = [ ":bind_front", "//absl/memory", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -118,8 +118,8 @@ cc_test( ":function_ref", "//absl/container:test_instance_tracker", "//absl/memory", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -145,8 +145,8 @@ cc_test( "//absl/strings", "//absl/strings:string_view", "//absl/types:variant", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -162,7 +162,7 @@ cc_test( ":any_invocable", ":function_ref", "//absl/base:core_headers", - "@com_github_google_benchmark//:benchmark_main", - "@com_google_googletest//:gtest", + "@google_benchmark//:benchmark_main", + "@googletest//:gtest", ], ) diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/hash/BUILD.bazel b/naiveproxy/src/third_party/abseil-cpp/absl/hash/BUILD.bazel index fe567e91a4..66ad2ad7d5 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/hash/BUILD.bazel +++ b/naiveproxy/src/third_party/abseil-cpp/absl/hash/BUILD.bazel @@ -69,7 +69,7 @@ cc_library( "//absl/meta:type_traits", "//absl/strings", "//absl/types:variant", - "@com_google_googletest//:gtest", + "@googletest//:gtest", ], ) @@ -86,21 +86,16 @@ cc_test( ":hash_testing", ":spy_hash_state", "//absl/base:config", - "//absl/base:core_headers", - "//absl/container:btree", - "//absl/container:flat_hash_map", "//absl/container:flat_hash_set", - "//absl/container:node_hash_map", - "//absl/container:node_hash_set", "//absl/memory", "//absl/meta:type_traits", - "//absl/numeric:int128", + "//absl/numeric:bits", "//absl/strings:cord_test_helpers", "//absl/strings:string_view", "//absl/types:optional", "//absl/types:variant", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -121,8 +116,8 @@ cc_test( "//absl/container:flat_hash_set", "//absl/container:node_hash_map", "//absl/container:node_hash_set", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -142,7 +137,7 @@ cc_binary( "//absl/strings", "//absl/strings:cord", "//absl/strings:cord_test_helpers", - "@com_github_google_benchmark//:benchmark_main", + "@google_benchmark//:benchmark_main", ], ) @@ -182,8 +177,8 @@ cc_test( linkopts = ABSL_DEFAULT_LINKOPTS, deps = [ ":city", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -211,7 +206,7 @@ cc_test( deps = [ ":low_level_hash", "//absl/strings", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/hash/BUILD.gn b/naiveproxy/src/third_party/abseil-cpp/absl/hash/BUILD.gn index 7331d9fe76..332a833cf3 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/hash/BUILD.gn +++ b/naiveproxy/src/third_party/abseil-cpp/absl/hash/BUILD.gn @@ -51,15 +51,10 @@ absl_test("hash_test") { ":hash_testing", ":spy_hash_state", "//third_party/abseil-cpp/absl/base:config", - "//third_party/abseil-cpp/absl/base:core_headers", - "//third_party/abseil-cpp/absl/container:btree", - "//third_party/abseil-cpp/absl/container:flat_hash_map", "//third_party/abseil-cpp/absl/container:flat_hash_set", - "//third_party/abseil-cpp/absl/container:node_hash_map", - "//third_party/abseil-cpp/absl/container:node_hash_set", "//third_party/abseil-cpp/absl/memory", "//third_party/abseil-cpp/absl/meta:type_traits", - "//third_party/abseil-cpp/absl/numeric:int128", + "//third_party/abseil-cpp/absl/numeric:bits", "//third_party/abseil-cpp/absl/strings:cord_test_helpers", "//third_party/abseil-cpp/absl/strings:string_view", "//third_party/abseil-cpp/absl/types:optional", diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/hash/CMakeLists.txt b/naiveproxy/src/third_party/abseil-cpp/absl/hash/CMakeLists.txt index 99d6fa1f8d..2281d7b072 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/hash/CMakeLists.txt +++ b/naiveproxy/src/third_party/abseil-cpp/absl/hash/CMakeLists.txt @@ -68,18 +68,13 @@ absl_cc_test( COPTS ${ABSL_TEST_COPTS} DEPS - absl::btree + absl::bits absl::cord_test_helpers - absl::core_headers - absl::flat_hash_map absl::flat_hash_set absl::hash absl::hash_testing - absl::int128 absl::memory absl::meta - absl::node_hash_map - absl::node_hash_set absl::optional absl::spy_hash_state absl::string_view diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/hash/hash.h b/naiveproxy/src/third_party/abseil-cpp/absl/hash/hash.h index 470cca4837..479b17b7b1 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/hash/hash.h +++ b/naiveproxy/src/third_party/abseil-cpp/absl/hash/hash.h @@ -78,11 +78,16 @@ #ifndef ABSL_HASH_HASH_H_ #define ABSL_HASH_HASH_H_ +#include +#include #include +#include #include +#include "absl/base/config.h" #include "absl/functional/function_ref.h" #include "absl/hash/internal/hash.h" +#include "absl/meta/type_traits.h" namespace absl { ABSL_NAMESPACE_BEGIN @@ -319,8 +324,12 @@ class HashState : public hash_internal::HashStateBase { // Create a new `HashState` instance that wraps `state`. All calls to // `combine()` and `combine_contiguous()` on the new instance will be // redirected to the original `state` object. The `state` object must outlive - // the `HashState` instance. - template + // the `HashState` instance. `T` must be a subclass of `HashStateBase` - + // users should not define their own HashState types. + template < + typename T, + absl::enable_if_t< + std::is_base_of, T>::value, int> = 0> static HashState Create(T* state) { HashState s; s.Init(state); @@ -353,6 +362,7 @@ class HashState : public hash_internal::HashStateBase { HashState() = default; friend class HashState::HashStateBase; + friend struct hash_internal::CombineRaw; template static void CombineContiguousImpl(void* p, const unsigned char* first, @@ -361,10 +371,22 @@ class HashState : public hash_internal::HashStateBase { state = T::combine_contiguous(std::move(state), first, size); } + static HashState combine_raw(HashState hash_state, uint64_t value) { + hash_state.combine_raw_(hash_state.state_, value); + return hash_state; + } + + template + static void CombineRawImpl(void* p, uint64_t value) { + T& state = *static_cast(p); + state = hash_internal::CombineRaw()(std::move(state), value); + } + template void Init(T* state) { state_ = state; combine_contiguous_ = &CombineContiguousImpl; + combine_raw_ = &CombineRawImpl; run_combine_unordered_ = &RunCombineUnorderedImpl; } @@ -403,6 +425,7 @@ class HashState : public hash_internal::HashStateBase { void Init(HashState* state) { state_ = state->state_; combine_contiguous_ = state->combine_contiguous_; + combine_raw_ = state->combine_raw_; run_combine_unordered_ = state->run_combine_unordered_; } @@ -413,6 +436,7 @@ class HashState : public hash_internal::HashStateBase { void* state_; void (*combine_contiguous_)(void*, const unsigned char*, size_t); + void (*combine_raw_)(void*, uint64_t); HashState (*run_combine_unordered_)( HashState state, absl::FunctionRef)>); diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/hash/hash_benchmark.cc b/naiveproxy/src/third_party/abseil-cpp/absl/hash/hash_benchmark.cc index 9b73f46135..c2b95e895d 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/hash/hash_benchmark.cc +++ b/naiveproxy/src/third_party/abseil-cpp/absl/hash/hash_benchmark.cc @@ -146,6 +146,59 @@ absl::flat_hash_set FlatHashSet(size_t count) { return result; } +template +struct LongCombine { + T a[200]{}; + template + friend H AbslHashValue(H state, const LongCombine& v) { + // This is testing a single call to `combine` with a lot of arguments to + // test the performance of the folding logic. + return H::combine( + std::move(state), // + v.a[0], v.a[1], v.a[2], v.a[3], v.a[4], v.a[5], v.a[6], v.a[7], v.a[8], + v.a[9], v.a[10], v.a[11], v.a[12], v.a[13], v.a[14], v.a[15], v.a[16], + v.a[17], v.a[18], v.a[19], v.a[20], v.a[21], v.a[22], v.a[23], v.a[24], + v.a[25], v.a[26], v.a[27], v.a[28], v.a[29], v.a[30], v.a[31], v.a[32], + v.a[33], v.a[34], v.a[35], v.a[36], v.a[37], v.a[38], v.a[39], v.a[40], + v.a[41], v.a[42], v.a[43], v.a[44], v.a[45], v.a[46], v.a[47], v.a[48], + v.a[49], v.a[50], v.a[51], v.a[52], v.a[53], v.a[54], v.a[55], v.a[56], + v.a[57], v.a[58], v.a[59], v.a[60], v.a[61], v.a[62], v.a[63], v.a[64], + v.a[65], v.a[66], v.a[67], v.a[68], v.a[69], v.a[70], v.a[71], v.a[72], + v.a[73], v.a[74], v.a[75], v.a[76], v.a[77], v.a[78], v.a[79], v.a[80], + v.a[81], v.a[82], v.a[83], v.a[84], v.a[85], v.a[86], v.a[87], v.a[88], + v.a[89], v.a[90], v.a[91], v.a[92], v.a[93], v.a[94], v.a[95], v.a[96], + v.a[97], v.a[98], v.a[99], v.a[100], v.a[101], v.a[102], v.a[103], + v.a[104], v.a[105], v.a[106], v.a[107], v.a[108], v.a[109], v.a[110], + v.a[111], v.a[112], v.a[113], v.a[114], v.a[115], v.a[116], v.a[117], + v.a[118], v.a[119], v.a[120], v.a[121], v.a[122], v.a[123], v.a[124], + v.a[125], v.a[126], v.a[127], v.a[128], v.a[129], v.a[130], v.a[131], + v.a[132], v.a[133], v.a[134], v.a[135], v.a[136], v.a[137], v.a[138], + v.a[139], v.a[140], v.a[141], v.a[142], v.a[143], v.a[144], v.a[145], + v.a[146], v.a[147], v.a[148], v.a[149], v.a[150], v.a[151], v.a[152], + v.a[153], v.a[154], v.a[155], v.a[156], v.a[157], v.a[158], v.a[159], + v.a[160], v.a[161], v.a[162], v.a[163], v.a[164], v.a[165], v.a[166], + v.a[167], v.a[168], v.a[169], v.a[170], v.a[171], v.a[172], v.a[173], + v.a[174], v.a[175], v.a[176], v.a[177], v.a[178], v.a[179], v.a[180], + v.a[181], v.a[182], v.a[183], v.a[184], v.a[185], v.a[186], v.a[187], + v.a[188], v.a[189], v.a[190], v.a[191], v.a[192], v.a[193], v.a[194], + v.a[195], v.a[196], v.a[197], v.a[198], v.a[199]); + } +}; + +template +auto MakeLongTuple() { + auto t1 = std::tuple(); + auto t2 = std::tuple_cat(t1, t1); + auto t3 = std::tuple_cat(t2, t2); + auto t4 = std::tuple_cat(t3, t3); + auto t5 = std::tuple_cat(t4, t4); + auto t6 = std::tuple_cat(t5, t5); + // Ideally this would be much larger, but some configurations can't handle + // making tuples with that many elements. They break inside std::tuple itself. + static_assert(std::tuple_size::value == 32, ""); + return t6; +} + // Generates a benchmark and a codegen method for the provided types. The // codegen method provides a well known entrypoint for dumping assembly. #define MAKE_BENCHMARK(hash, name, ...) \ @@ -171,6 +224,10 @@ MAKE_BENCHMARK(AbslHash, PairInt64Int64, std::pair{}); MAKE_BENCHMARK(AbslHash, TupleInt32BoolInt64, std::tuple{}); MAKE_BENCHMARK(AbslHash, String_0, std::string()); +MAKE_BENCHMARK(AbslHash, String_1, std::string(1, 'a')); +MAKE_BENCHMARK(AbslHash, String_2, std::string(2, 'a')); +MAKE_BENCHMARK(AbslHash, String_4, std::string(4, 'a')); +MAKE_BENCHMARK(AbslHash, String_8, std::string(8, 'a')); MAKE_BENCHMARK(AbslHash, String_10, std::string(10, 'a')); MAKE_BENCHMARK(AbslHash, String_30, std::string(30, 'a')); MAKE_BENCHMARK(AbslHash, String_90, std::string(90, 'a')); @@ -212,6 +269,10 @@ MAKE_BENCHMARK(AbslHash, PairStringString_200, std::make_pair(std::string(200, 'a'), std::string(200, 'b'))); MAKE_BENCHMARK(AbslHash, PairStringString_5000, std::make_pair(std::string(5000, 'a'), std::string(5000, 'b'))); +MAKE_BENCHMARK(AbslHash, LongTupleInt32, MakeLongTuple()); +MAKE_BENCHMARK(AbslHash, LongTupleString, MakeLongTuple()); +MAKE_BENCHMARK(AbslHash, LongCombineInt32, LongCombine()); +MAKE_BENCHMARK(AbslHash, LongCombineString, LongCombine()); MAKE_BENCHMARK(TypeErasedAbslHash, Int32, int32_t{}); MAKE_BENCHMARK(TypeErasedAbslHash, Int64, int64_t{}); diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/hash/hash_testing.h b/naiveproxy/src/third_party/abseil-cpp/absl/hash/hash_testing.h index 1e1c574149..673366deef 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/hash/hash_testing.h +++ b/naiveproxy/src/third_party/abseil-cpp/absl/hash/hash_testing.h @@ -244,7 +244,8 @@ VerifyTypeImplementsAbslHashCorrectly(const Container& values, Eq equals) { if (v.expand() != expected) { return testing::AssertionFailure() << "Values " << c[0].ToString() << " and " << v.ToString() - << " evaluate as equal but have an unequal hash expansion."; + << " evaluate as equal but have unequal hash expansions (" + << expected << " vs. " << v.expand() << ")."; } } @@ -256,17 +257,18 @@ VerifyTypeImplementsAbslHashCorrectly(const Container& values, Eq equals) { case SpyHashState::CompareResult::kEqual: return testing::AssertionFailure() << "Values " << c[0].ToString() << " and " << c2[0].ToString() - << " evaluate as unequal but have an equal hash expansion."; + << " evaluate as unequal but have an equal hash expansion:" + << c2_hash << "."; case SpyHashState::CompareResult::kBSuffixA: return testing::AssertionFailure() - << "Hash expansion of " << c2[0].ToString() + << "Hash expansion of " << c2[0].ToString() << ";" << c2_hash << " is a suffix of the hash expansion of " << c[0].ToString() - << "."; + << ";" << expected << "."; case SpyHashState::CompareResult::kASuffixB: return testing::AssertionFailure() - << "Hash expansion of " << c[0].ToString() - << " is a suffix of the hash expansion of " << c2[0].ToString() - << "."; + << "Hash expansion of " << c[0].ToString() << ";" + << expected << " is a suffix of the hash expansion of " + << c2[0].ToString() << ";" << c2_hash << "."; case SpyHashState::CompareResult::kUnequal: break; } diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/hash/internal/hash.cc b/naiveproxy/src/third_party/abseil-cpp/absl/hash/internal/hash.cc index 60d3e7fb06..e0a8ea9974 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/hash/internal/hash.cc +++ b/naiveproxy/src/third_party/abseil-cpp/absl/hash/internal/hash.cc @@ -29,9 +29,10 @@ namespace hash_internal { uint64_t MixingHashState::CombineLargeContiguousImpl32( uint64_t state, const unsigned char* first, size_t len) { while (len >= PiecewiseChunkSize()) { - state = Mix(state, - hash_internal::CityHash32(reinterpret_cast(first), - PiecewiseChunkSize())); + state = Mix( + state ^ hash_internal::CityHash32(reinterpret_cast(first), + PiecewiseChunkSize()), + kMul); len -= PiecewiseChunkSize(); first += PiecewiseChunkSize(); } @@ -43,7 +44,7 @@ uint64_t MixingHashState::CombineLargeContiguousImpl32( uint64_t MixingHashState::CombineLargeContiguousImpl64( uint64_t state, const unsigned char* first, size_t len) { while (len >= PiecewiseChunkSize()) { - state = Mix(state, Hash64(first, PiecewiseChunkSize())); + state = Mix(state ^ Hash64(first, PiecewiseChunkSize()), kMul); len -= PiecewiseChunkSize(); first += PiecewiseChunkSize(); } @@ -54,22 +55,13 @@ uint64_t MixingHashState::CombineLargeContiguousImpl64( ABSL_CONST_INIT const void* const MixingHashState::kSeed = &kSeed; -// The salt array used by LowLevelHash. This array is NOT the mechanism used to -// make absl::Hash non-deterministic between program invocations. See `Seed()` -// for that mechanism. -// -// Any random values are fine. These values are just digits from the decimal -// part of pi. -// https://en.wikipedia.org/wiki/Nothing-up-my-sleeve_number -constexpr uint64_t kHashSalt[5] = { - uint64_t{0x243F6A8885A308D3}, uint64_t{0x13198A2E03707344}, - uint64_t{0xA4093822299F31D0}, uint64_t{0x082EFA98EC4E6C89}, - uint64_t{0x452821E638D01377}, -}; +#ifdef ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL +constexpr uint64_t MixingHashState::kStaticRandomData[]; +#endif uint64_t MixingHashState::LowLevelHashImpl(const unsigned char* data, size_t len) { - return LowLevelHashLenGt16(data, len, Seed(), kHashSalt); + return LowLevelHashLenGt16(data, len, Seed(), &kStaticRandomData[0]); } } // namespace hash_internal diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/hash/internal/hash.h b/naiveproxy/src/third_party/abseil-cpp/absl/hash/internal/hash.h index d8300da140..f4a0d7857c 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/hash/internal/hash.h +++ b/naiveproxy/src/third_party/abseil-cpp/absl/hash/internal/hash.h @@ -59,6 +59,7 @@ #include #include "absl/base/attributes.h" +#include "absl/base/internal/endian.h" #include "absl/base/internal/unaligned_access.h" #include "absl/base/optimization.h" #include "absl/base/port.h" @@ -81,6 +82,10 @@ #include #endif +#ifdef __ARM_ACLE +#include +#endif + namespace absl { ABSL_NAMESPACE_BEGIN @@ -351,11 +356,39 @@ template <> struct is_uniquely_represented : std::true_type {}; #endif // ABSL_HAVE_INTRINSIC_INT128 +template +struct FitsIn64Bits : std::integral_constant {}; + +struct CombineRaw { + template + H operator()(H state, uint64_t value) const { + return H::combine_raw(std::move(state), value); + } +}; + // hash_bytes() // // Convenience function that combines `hash_state` with the byte representation // of `value`. -template +template ::value, int> = 0> +H hash_bytes(H hash_state, const T& value) { + const unsigned char* start = reinterpret_cast(&value); + uint64_t v; + if (sizeof(T) == 1) { + v = *start; + } else if (sizeof(T) == 2) { + v = absl::base_internal::UnalignedLoad16(start); + } else if (sizeof(T) == 4) { + v = absl::base_internal::UnalignedLoad32(start); + } else { + assert(sizeof(T) == 8); + v = absl::base_internal::UnalignedLoad64(start); + } + return CombineRaw()(std::move(hash_state), v); +} +template ::value, int> = 0> H hash_bytes(H hash_state, const T& value) { const unsigned char* start = reinterpret_cast(&value); return H::combine_contiguous(std::move(hash_state), start, sizeof(value)); @@ -457,9 +490,9 @@ std::enable_if_t::value, H> AbslHashValue(H hash_state, T ptr) { auto v = reinterpret_cast(ptr); // Due to alignment, pointers tend to have low bits as zero, and the next few - // bits follow a pattern since they are also multiples of some base value. - // Mixing the pointer twice helps prevent stuck low bits for certain alignment - // values. + // bits follow a pattern since they are also multiples of some base value. The + // byte swap in WeakMix helps ensure we still have good entropy in low bits. + // Mix pointers twice to ensure we have good entropy in low bits. return H::combine(std::move(hash_state), v, v); } @@ -939,6 +972,7 @@ struct HashSelect { static State combine_contiguous(State hash_state, const unsigned char*, size_t); using State::HashStateBase::combine_contiguous; + static State combine_raw(State state, uint64_t value); }; struct UniquelyRepresentedProbe { @@ -1021,12 +1055,16 @@ class ABSL_DLL MixingHashState : public HashStateBase { using uint128 = absl::uint128; #endif // ABSL_HAVE_INTRINSIC_INT128 + // Random data taken from the hexadecimal digits of Pi's fractional component. + // https://en.wikipedia.org/wiki/Nothing-up-my-sleeve_number + ABSL_CACHELINE_ALIGNED static constexpr uint64_t kStaticRandomData[] = { + 0x243f'6a88'85a3'08d3, 0x1319'8a2e'0370'7344, 0xa409'3822'299f'31d0, + 0x082e'fa98'ec4e'6c89, 0x4528'21e6'38d0'1377, + }; + static constexpr uint64_t kMul = sizeof(size_t) == 4 ? uint64_t{0xcc9e2d51} - : uint64_t{0x9ddfea08eb382d69}; - - template - struct FitsIn64Bits : std::integral_constant {}; + : uint64_t{0xdcb22ca68cb134ed}; template using IntegralFastPath = @@ -1061,7 +1099,7 @@ class ABSL_DLL MixingHashState : public HashStateBase { template ::value, int> = 0> static size_t hash(T value) { return static_cast( - Mix(Seed(), static_cast>(value))); + WeakMix(Seed() ^ static_cast>(value))); } // Overload of MixingHashState::hash() @@ -1099,6 +1137,7 @@ class ABSL_DLL MixingHashState : public HashStateBase { // Allow the HashState type-erasure implementation to invoke // RunCombinedUnordered() directly. friend class absl::HashState; + friend struct CombineRaw; // Workaround for MSVC bug. // We make the type copyable to fix the calling convention, even though we @@ -1108,6 +1147,14 @@ class ABSL_DLL MixingHashState : public HashStateBase { explicit MixingHashState(uint64_t state) : state_(state) {} + // Combines a raw value from e.g. integrals/floats/pointers/etc. This allows + // us to be consistent with IntegralFastPath when combining raw types, but + // optimize Read1To3 and Read4To8 differently for the string case. + static MixingHashState combine_raw(MixingHashState hash_state, + uint64_t value) { + return MixingHashState(WeakMix(hash_state.state_ ^ value)); + } + // Implementation of the base case for combine_contiguous where we actually // mix the bytes into the state. // Dispatch to different implementations of the combine_contiguous depending @@ -1121,6 +1168,49 @@ class ABSL_DLL MixingHashState : public HashStateBase { std::integral_constant /* sizeof_size_t */); + ABSL_ATTRIBUTE_ALWAYS_INLINE static uint64_t CombineSmallContiguousImpl( + uint64_t state, const unsigned char* first, size_t len) { + ABSL_ASSUME(len <= 8); + uint64_t v; + if (len >= 4) { + v = Read4To8(first, len); + } else if (len > 0) { + v = Read1To3(first, len); + } else { + // Empty ranges have no effect. + return state; + } + return WeakMix(state ^ v); + } + + ABSL_ATTRIBUTE_ALWAYS_INLINE static uint64_t CombineContiguousImpl9to16( + uint64_t state, const unsigned char* first, size_t len) { + ABSL_ASSUME(len >= 9); + ABSL_ASSUME(len <= 16); + // Note: any time one half of the mix function becomes zero it will fail to + // incorporate any bits from the other half. However, there is exactly 1 in + // 2^64 values for each side that achieve this, and only when the size is + // exactly 16 -- for smaller sizes there is an overlapping byte that makes + // this impossible unless the seed is *also* incredibly unlucky. + auto p = Read9To16(first, len); + return Mix(state ^ p.first, kMul ^ p.second); + } + + ABSL_ATTRIBUTE_ALWAYS_INLINE static uint64_t CombineContiguousImpl17to32( + uint64_t state, const unsigned char* first, size_t len) { + ABSL_ASSUME(len >= 17); + ABSL_ASSUME(len <= 32); + // Do two mixes of overlapping 16-byte ranges in parallel to minimize + // latency. + const uint64_t m0 = + Mix(Read8(first) ^ kStaticRandomData[1], Read8(first + 8) ^ state); + + const unsigned char* tail_16b_ptr = first + (len - 16); + const uint64_t m1 = Mix(Read8(tail_16b_ptr) ^ kStaticRandomData[3], + Read8(tail_16b_ptr + 8) ^ state); + return m0 ^ m1; + } + // Slow dispatch path for calls to CombineContiguousImpl with a size argument // larger than PiecewiseChunkSize(). Has the same effect as calling // CombineContiguousImpl() repeatedly with the chunk stride size. @@ -1136,8 +1226,8 @@ class ABSL_DLL MixingHashState : public HashStateBase { // are in .second. static std::pair Read9To16(const unsigned char* p, size_t len) { - uint64_t low_mem = absl::base_internal::UnalignedLoad64(p); - uint64_t high_mem = absl::base_internal::UnalignedLoad64(p + len - 8); + uint64_t low_mem = Read8(p); + uint64_t high_mem = Read8(p + len - 8); #ifdef ABSL_IS_LITTLE_ENDIAN uint64_t most_significant = high_mem; uint64_t least_significant = low_mem; @@ -1148,55 +1238,81 @@ class ABSL_DLL MixingHashState : public HashStateBase { return {least_significant, most_significant}; } - // Reads 4 to 8 bytes from p. Zero pads to fill uint64_t. - static uint64_t Read4To8(const unsigned char* p, size_t len) { - uint32_t low_mem = absl::base_internal::UnalignedLoad32(p); - uint32_t high_mem = absl::base_internal::UnalignedLoad32(p + len - 4); -#ifdef ABSL_IS_LITTLE_ENDIAN - uint32_t most_significant = high_mem; - uint32_t least_significant = low_mem; -#else - uint32_t most_significant = low_mem; - uint32_t least_significant = high_mem; + // Reads 8 bytes from p. + static uint64_t Read8(const unsigned char* p) { + // Suppress erroneous array bounds errors on GCC. +#if defined(__GNUC__) && !defined(__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Warray-bounds" #endif - return (static_cast(most_significant) << (len - 4) * 8) | - least_significant; + return absl::base_internal::UnalignedLoad64(p); +#if defined(__GNUC__) && !defined(__clang__) +#pragma GCC diagnostic pop +#endif + } + + // Reads 4 to 8 bytes from p. Zero pads to fill uint64_t. + // TODO(b/384509507): consider optimizing this by not requiring the output to + // be equivalent to an integer load for 4/8 bytes. Currently, we rely on this + // behavior for the HashConsistentAcrossIntTypes test case. Ditto for + // Read1To3. + static uint64_t Read4To8(const unsigned char* p, size_t len) { + // If `len < 8`, we duplicate bytes in the middle. + // E.g.: + // `ABCD` will be read as `ABCDABCD`. + // `ABCDE` will be read as `ABCDBCDE`. + // `ABCDEF` will be read as `ABCDCDEF`. + // `ABCDEFG` will be read as `ABCDDEFG`. + // We also do not care about endianness. On big-endian platforms, bytes will + // be shuffled (it's fine). We always shift low memory by 32, because that + // can be pipelined earlier. Reading high memory requires computing + // `p + len - 4`. + uint64_t most_significant = + static_cast(absl::base_internal::UnalignedLoad32(p)) << 32; + uint64_t least_significant = + absl::base_internal::UnalignedLoad32(p + len - 4); + return most_significant | least_significant; } // Reads 1 to 3 bytes from p. Zero pads to fill uint32_t. static uint32_t Read1To3(const unsigned char* p, size_t len) { - // The trick used by this implementation is to avoid branches if possible. - unsigned char mem0 = p[0]; - unsigned char mem1 = p[len / 2]; - unsigned char mem2 = p[len - 1]; -#ifdef ABSL_IS_LITTLE_ENDIAN - unsigned char significant2 = mem2; - unsigned char significant1 = mem1; - unsigned char significant0 = mem0; -#else - unsigned char significant2 = mem0; - unsigned char significant1 = len == 2 ? mem0 : mem1; - unsigned char significant0 = mem2; -#endif - return static_cast(significant0 | // - (significant1 << (len / 2 * 8)) | // - (significant2 << ((len - 1) * 8))); + // The trick used by this implementation is to avoid branches. + // We always read three bytes by duplicating. + // E.g., + // `A` is read as `AAA`. + // `AB` is read as `ABB`. + // `ABC` is read as `ABC`. + // We always shift `p[0]` so that it can be pipelined better. + // Other bytes require extra computation to find indices. + uint32_t mem0 = (static_cast(p[0]) << 16) | p[len - 1]; + uint32_t mem1 = static_cast(p[len / 2]) << 8; + return mem0 | mem1; } - ABSL_ATTRIBUTE_ALWAYS_INLINE static uint64_t Mix(uint64_t state, uint64_t v) { + ABSL_ATTRIBUTE_ALWAYS_INLINE static uint64_t Mix(uint64_t lhs, uint64_t rhs) { // Though the 128-bit product on AArch64 needs two instructions, it is // still a good balance between speed and hash quality. using MultType = absl::conditional_t; - // We do the addition in 64-bit space to make sure the 128-bit - // multiplication is fast. If we were to do it as MultType the compiler has - // to assume that the high word is non-zero and needs to perform 2 - // multiplications instead of one. - MultType m = state + v; - m *= kMul; + MultType m = lhs; + m *= rhs; return static_cast(m ^ (m >> (sizeof(m) * 8 / 2))); } + // Slightly lower latency than Mix, but with lower quality. The byte swap + // helps ensure that low bits still have high quality. + ABSL_ATTRIBUTE_ALWAYS_INLINE static uint64_t WeakMix(uint64_t n) { + // WeakMix doesn't work well on 32-bit platforms so just use Mix. + if (sizeof(size_t) < 8) return Mix(n, kMul); +#ifdef __ARM_ACLE + // gbswap_64 compiles to `rev` on ARM, but `rbit` is better because it + // reverses bits rather than reversing bytes. + return __rbitll(n * kMul); +#else + return absl::gbswap_64(n * kMul); +#endif + } + // An extern to avoid bloat on a direct call to LowLevelHash() with fixed // values for both the seed and salt parameters. static uint64_t LowLevelHashImpl(const unsigned char* data, size_t len); @@ -1248,21 +1364,15 @@ inline uint64_t MixingHashState::CombineContiguousImpl( std::integral_constant /* sizeof_size_t */) { // For large values we use CityHash, for small ones we just use a // multiplicative hash. - uint64_t v; - if (len > 8) { - if (ABSL_PREDICT_FALSE(len > PiecewiseChunkSize())) { - return CombineLargeContiguousImpl32(state, first, len); - } - v = hash_internal::CityHash32(reinterpret_cast(first), len); - } else if (len >= 4) { - v = Read4To8(first, len); - } else if (len > 0) { - v = Read1To3(first, len); - } else { - // Empty ranges have no effect. - return state; + if (len <= 8) { + return CombineSmallContiguousImpl(state, first, len); } - return Mix(state, v); + if (ABSL_PREDICT_TRUE(len <= PiecewiseChunkSize())) { + return Mix(state ^ hash_internal::CityHash32( + reinterpret_cast(first), len), + kMul); + } + return CombineLargeContiguousImpl32(state, first, len); } // Overload of MixingHashState::CombineContiguousImpl() @@ -1271,38 +1381,19 @@ inline uint64_t MixingHashState::CombineContiguousImpl( std::integral_constant /* sizeof_size_t */) { // For large values we use LowLevelHash or CityHash depending on the platform, // for small ones we just use a multiplicative hash. - uint64_t v; - if (len > 16) { - if (ABSL_PREDICT_FALSE(len > PiecewiseChunkSize())) { - return CombineLargeContiguousImpl64(state, first, len); - } - v = Hash64(first, len); - } else if (len > 8) { - // This hash function was constructed by the ML-driven algorithm discovery - // using reinforcement learning. We fed the agent lots of inputs from - // microbenchmarks, SMHasher, low hamming distance from generated inputs and - // picked up the one that was good on micro and macrobenchmarks. - auto p = Read9To16(first, len); - uint64_t lo = p.first; - uint64_t hi = p.second; - // Rotation by 53 was found to be most often useful when discovering these - // hashing algorithms with ML techniques. - lo = absl::rotr(lo, 53); - state += kMul; - lo += state; - state ^= hi; - uint128 m = state; - m *= lo; - return static_cast(m ^ (m >> 64)); - } else if (len >= 4) { - v = Read4To8(first, len); - } else if (len > 0) { - v = Read1To3(first, len); - } else { - // Empty ranges have no effect. - return state; + if (len <= 8) { + return CombineSmallContiguousImpl(state, first, len); } - return Mix(state, v); + if (len <= 16) { + return CombineContiguousImpl9to16(state, first, len); + } + if (len <= 32) { + return CombineContiguousImpl17to32(state, first, len); + } + if (ABSL_PREDICT_TRUE(len <= PiecewiseChunkSize())) { + return Mix(state ^ Hash64(first, len), kMul); + } + return CombineLargeContiguousImpl64(state, first, len); } struct AggregateBarrier {}; diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/hash/internal/spy_hash_state.h b/naiveproxy/src/third_party/abseil-cpp/absl/hash/internal/spy_hash_state.h index 357c301c4a..92490b1a21 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/hash/internal/spy_hash_state.h +++ b/naiveproxy/src/third_party/abseil-cpp/absl/hash/internal/spy_hash_state.h @@ -16,6 +16,7 @@ #define ABSL_HASH_INTERNAL_SPY_HASH_STATE_H_ #include +#include #include #include #include @@ -196,6 +197,7 @@ class SpyHashStateImpl : public HashStateBase> { private: template friend class SpyHashStateImpl; + friend struct CombineRaw; struct UnorderedCombinerCallback { std::vector element_hash_representations; @@ -213,6 +215,12 @@ class SpyHashStateImpl : public HashStateBase> { } }; + // Combines raw data from e.g. integrals/floats/pointers/etc. + static SpyHashStateImpl combine_raw(SpyHashStateImpl state, uint64_t value) { + const unsigned char* data = reinterpret_cast(&value); + return SpyHashStateImpl::combine_contiguous(std::move(state), data, 8); + } + // This is true if SpyHashStateImpl has been passed to a call of // AbslHashValue with the wrong type. This detects that the user called // AbslHashValue directly (because the hash state type does not match). diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/log/BUILD.bazel b/naiveproxy/src/third_party/abseil-cpp/absl/log/BUILD.bazel index f565e2bc4d..dc9b0b43e8 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/log/BUILD.bazel +++ b/naiveproxy/src/third_party/abseil-cpp/absl/log/BUILD.bazel @@ -223,7 +223,7 @@ cc_library( "//absl/base:log_severity", "//absl/base:raw_logging_internal", "//absl/strings", - "@com_google_googletest//:gtest", + "@googletest//:gtest", ], ) @@ -281,8 +281,8 @@ cc_test( "//absl/base:log_severity", "//absl/flags:flag", "//absl/types:optional", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -303,8 +303,8 @@ cc_test( deps = [ ":absl_check", ":check_test_impl", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -318,8 +318,8 @@ cc_test( deps = [ ":absl_log", ":log_basic_test_impl", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -338,8 +338,8 @@ cc_test( deps = [ ":check", ":check_test_impl", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -362,7 +362,7 @@ cc_library( "//absl/status", "//absl/strings", "//absl/strings:string_view", - "@com_google_googletest//:gtest", + "@googletest//:gtest", ], ) @@ -376,8 +376,8 @@ cc_test( ":die_if_null", "//absl/base:core_headers", "//absl/log/internal:test_helpers", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -400,8 +400,8 @@ cc_test( "//absl/log/internal:test_helpers", "//absl/log/internal:test_matchers", "//absl/strings", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -419,8 +419,8 @@ cc_test( "//absl/base:log_severity", "//absl/log/internal:globals", "//absl/log/internal:test_helpers", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -434,8 +434,8 @@ cc_test( deps = [ ":log", ":log_basic_test_impl", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -456,7 +456,7 @@ cc_library( "//absl/log/internal:test_actions", "//absl/log/internal:test_helpers", "//absl/log/internal:test_matchers", - "@com_google_googletest//:gtest", + "@googletest//:gtest", ], ) @@ -477,8 +477,8 @@ cc_test( "//absl/strings", "//absl/time", "//absl/types:span", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -496,8 +496,8 @@ cc_test( "//absl/strings", "//absl/strings:str_format", "//absl/types:optional", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -512,8 +512,8 @@ cc_test( ":scoped_mock_log", "//absl/base:core_headers", "//absl/base:log_severity", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -538,8 +538,8 @@ cc_test( "//absl/log/internal:test_helpers", "//absl/log/internal:test_matchers", "//absl/strings", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -560,8 +560,8 @@ cc_test( "//absl/log/internal:test_helpers", "//absl/log/internal:test_matchers", "//absl/strings", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -580,8 +580,8 @@ cc_test( "//absl/log/internal:test_matchers", "//absl/strings", "//absl/time", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -608,8 +608,8 @@ cc_test( "//absl/memory", "//absl/strings", "//absl/synchronization", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -632,8 +632,8 @@ cc_test( "//absl/status", "//absl/strings", "//absl/strings:str_format", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -650,8 +650,8 @@ cc_test( "//absl/base:core_headers", "//absl/log/internal:test_helpers", "//absl/log/internal:test_matchers", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -675,6 +675,6 @@ cc_test( "//absl/base:log_severity", "//absl/flags:flag", "//absl/log/internal:flags", - "@com_github_google_benchmark//:benchmark_main", + "@google_benchmark//:benchmark_main", ], ) diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/log/CMakeLists.txt b/naiveproxy/src/third_party/abseil-cpp/absl/log/CMakeLists.txt index 5b9a5f9d83..73deb45be6 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/log/CMakeLists.txt +++ b/naiveproxy/src/third_party/abseil-cpp/absl/log/CMakeLists.txt @@ -206,6 +206,7 @@ absl_cc_library( absl::log_internal_proto absl::log_internal_log_sink_set absl::log_internal_nullguard + absl::log_internal_structured_proto absl::log_globals absl::log_entry absl::log_severity @@ -666,12 +667,52 @@ absl_cc_library( LINKOPTS ${ABSL_DEFAULT_LINKOPTS} DEPS + absl::any_invocable absl::config absl::core_headers absl::log_internal_message + absl::log_internal_structured_proto absl::strings ) +absl_cc_library( + NAME + log_internal_structured_proto + SRCS + "internal/structured_proto.cc" + HDRS + "internal/structured_proto.h" + COPTS + ${ABSL_DEFAULT_COPTS} + LINKOPTS + ${ABSL_DEFAULT_LINKOPTS} + DEPS + absl::log_internal_proto + absl::config + absl::span + absl::strings + absl::variant + PUBLIC +) + +absl_cc_test( + NAME + log_internal_structured_proto_test + SRCS + "internal/structured_proto_test.cc" + COPTS + ${ABSL_TEST_COPTS} + LINKOPTS + ${ABSL_DEFAULT_LINKOPTS} + DEPS + absl::config + absl::log_internal_structured_proto + absl::span + absl::string_view + absl::utility + GTest::gmock_main +) + absl_cc_library( NAME log_structured diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/log/internal/BUILD.bazel b/naiveproxy/src/third_party/abseil-cpp/absl/log/internal/BUILD.bazel index 365da3d0c2..594f86734b 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/log/internal/BUILD.bazel +++ b/naiveproxy/src/third_party/abseil-cpp/absl/log/internal/BUILD.bazel @@ -23,7 +23,7 @@ load( package( default_visibility = [ - "//absl/log:__pkg__", + ":internal_users", ], features = [ "header_modules", @@ -34,6 +34,20 @@ package( licenses(["notice"]) +package_group( + name = "internal_users", + packages = [ + "//absl/log", + ], +) + +package_group( + name = "structured_proto_users", + packages = [ + "//absl/log/...", + ], +) + cc_library( name = "check_impl", hdrs = ["check_impl.h"], @@ -176,6 +190,7 @@ cc_library( ":log_sink_set", ":nullguard", ":proto", + ":structured_proto", "//absl/base", "//absl/base:config", "//absl/base:core_headers", @@ -280,14 +295,52 @@ cc_library( hdrs = ["structured.h"], copts = ABSL_DEFAULT_COPTS, linkopts = ABSL_DEFAULT_LINKOPTS, + visibility = [ + ":internal_users", + ":structured_proto_users", + ], deps = [ ":log_message", + ":structured_proto", "//absl/base:config", "//absl/base:core_headers", + "//absl/functional:any_invocable", "//absl/strings", ], ) +cc_library( + name = "structured_proto", + srcs = ["structured_proto.cc"], + hdrs = ["structured_proto.h"], + copts = ABSL_DEFAULT_COPTS, + linkopts = ABSL_DEFAULT_LINKOPTS, + visibility = [ + ":structured_proto_users", + ], + deps = [ + ":proto", + "//absl/base:config", + "//absl/strings", + "//absl/types:span", + "//absl/types:variant", + ], +) + +cc_test( + name = "structured_proto_test", + srcs = ["structured_proto_test.cc"], + deps = [ + ":structured_proto", + "//absl/base:config", + "//absl/strings:string_view", + "//absl/types:span", + "//absl/utility", + "@googletest//:gtest", + "@googletest//:gtest_main", + ], +) + cc_library( name = "test_actions", testonly = True, @@ -303,7 +356,7 @@ cc_library( "//absl/strings", "//absl/time", ] + select({ - "//absl:msvc_compiler": [], + "@rules_cc//cc/compiler:msvc-cl": [], "//conditions:default": [ ], }), @@ -316,13 +369,17 @@ cc_library( hdrs = ["test_helpers.h"], copts = ABSL_DEFAULT_COPTS, linkopts = ABSL_DEFAULT_LINKOPTS, + visibility = [ + ":internal_users", + ":structured_proto_users", + ], deps = [ ":globals", "//absl/base:config", "//absl/base:log_severity", "//absl/log:globals", "//absl/log:initialize", - "@com_google_googletest//:gtest", + "@googletest//:gtest", ], ) @@ -333,6 +390,10 @@ cc_library( hdrs = ["test_matchers.h"], copts = ABSL_DEFAULT_COPTS, linkopts = ABSL_DEFAULT_LINKOPTS, + visibility = [ + ":internal_users", + ":structured_proto_users", + ], deps = [ ":test_helpers", "//absl/base:config", @@ -341,9 +402,9 @@ cc_library( "//absl/log:log_entry", "//absl/strings", "//absl/time", - "@com_google_googletest//:gtest", + "@googletest//:gtest", ] + select({ - "//absl:msvc_compiler": [], + "@rules_cc//cc/compiler:msvc-cl": [], "//conditions:default": [ ], }), @@ -363,6 +424,10 @@ cc_library( hdrs = ["proto.h"], copts = ABSL_DEFAULT_COPTS, linkopts = ABSL_DEFAULT_LINKOPTS, + visibility = [ + ":internal_users", + ":structured_proto_users", + ], deps = [ "//absl/base", "//absl/base:config", @@ -424,7 +489,7 @@ cc_binary( "//absl/memory", "//absl/random:distributions", "//absl/strings", - "@com_github_google_benchmark//:benchmark_main", + "@google_benchmark//:benchmark_main", ], ) @@ -452,8 +517,8 @@ cc_test( "//absl/base:log_severity", "//absl/log", "//absl/log:globals", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -464,8 +529,8 @@ cc_test( linkopts = ABSL_DEFAULT_LINKOPTS, deps = [ ":fnmatch", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -477,6 +542,6 @@ cc_test( tags = ["benchmark"], deps = [ ":fnmatch", - "@com_github_google_benchmark//:benchmark_main", + "@google_benchmark//:benchmark_main", ], ) diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/log/internal/BUILD.gn b/naiveproxy/src/third_party/abseil-cpp/absl/log/internal/BUILD.gn index 065247e2d2..854f6b45cf 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/log/internal/BUILD.gn +++ b/naiveproxy/src/third_party/abseil-cpp/absl/log/internal/BUILD.gn @@ -107,6 +107,7 @@ absl_source_set("log_message") { ":log_sink_set", ":nullguard", ":proto", + ":structured_proto", "//third_party/abseil-cpp/absl/base", "//third_party/abseil-cpp/absl/base:config", "//third_party/abseil-cpp/absl/base:core_headers", @@ -196,12 +197,39 @@ absl_source_set("structured") { public = [ "structured.h" ] deps = [ ":log_message", + ":structured_proto", "//third_party/abseil-cpp/absl/base:config", "//third_party/abseil-cpp/absl/base:core_headers", + "//third_party/abseil-cpp/absl/functional:any_invocable", + "//third_party/abseil-cpp/absl/strings", "//third_party/abseil-cpp/absl/strings:string_view", ] } +absl_source_set("structured_proto") { + sources = [ "structured_proto.cc" ] + public = [ "structured_proto.h" ] + visibility = [ "//third_party/abseil-cpp/absl/log/*" ] + deps = [ + ":proto", + "//third_party/abseil-cpp/absl/base:config", + "//third_party/abseil-cpp/absl/strings", + "//third_party/abseil-cpp/absl/types:span", + "//third_party/abseil-cpp/absl/types:variant", + ] +} + +absl_test("structured_proto_test") { + sources = [ "structured_proto_test.cc" ] + deps = [ + ":structured_proto", + "//third_party/abseil-cpp/absl/base:config", + "//third_party/abseil-cpp/absl/strings:string_view", + "//third_party/abseil-cpp/absl/types:span", + "//third_party/abseil-cpp/absl/utility", + ] +} + absl_source_set("test_actions") { testonly = true sources = [ "test_actions.cc" ] diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/log/internal/check_op.cc b/naiveproxy/src/third_party/abseil-cpp/absl/log/internal/check_op.cc index cec94218ec..bda8c095c3 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/log/internal/check_op.cc +++ b/naiveproxy/src/third_party/abseil-cpp/absl/log/internal/check_op.cc @@ -35,23 +35,23 @@ namespace absl { ABSL_NAMESPACE_BEGIN namespace log_internal { -#define ABSL_LOGGING_INTERNAL_DEFINE_MAKE_CHECK_OP_STRING(x) \ - template absl::Nonnull MakeCheckOpString( \ +#define ABSL_LOG_INTERNAL_DEFINE_MAKE_CHECK_OP_STRING(x) \ + template absl::Nonnull MakeCheckOpString( \ x, x, absl::Nonnull) -ABSL_LOGGING_INTERNAL_DEFINE_MAKE_CHECK_OP_STRING(bool); -ABSL_LOGGING_INTERNAL_DEFINE_MAKE_CHECK_OP_STRING(int64_t); -ABSL_LOGGING_INTERNAL_DEFINE_MAKE_CHECK_OP_STRING(uint64_t); -ABSL_LOGGING_INTERNAL_DEFINE_MAKE_CHECK_OP_STRING(float); -ABSL_LOGGING_INTERNAL_DEFINE_MAKE_CHECK_OP_STRING(double); -ABSL_LOGGING_INTERNAL_DEFINE_MAKE_CHECK_OP_STRING(char); -ABSL_LOGGING_INTERNAL_DEFINE_MAKE_CHECK_OP_STRING(unsigned char); -ABSL_LOGGING_INTERNAL_DEFINE_MAKE_CHECK_OP_STRING(const std::string&); -ABSL_LOGGING_INTERNAL_DEFINE_MAKE_CHECK_OP_STRING(const absl::string_view&); -ABSL_LOGGING_INTERNAL_DEFINE_MAKE_CHECK_OP_STRING(const char*); -ABSL_LOGGING_INTERNAL_DEFINE_MAKE_CHECK_OP_STRING(const signed char*); -ABSL_LOGGING_INTERNAL_DEFINE_MAKE_CHECK_OP_STRING(const unsigned char*); -ABSL_LOGGING_INTERNAL_DEFINE_MAKE_CHECK_OP_STRING(const void*); -#undef ABSL_LOGGING_INTERNAL_DEFINE_MAKE_CHECK_OP_STRING +ABSL_LOG_INTERNAL_DEFINE_MAKE_CHECK_OP_STRING(bool); +ABSL_LOG_INTERNAL_DEFINE_MAKE_CHECK_OP_STRING(int64_t); +ABSL_LOG_INTERNAL_DEFINE_MAKE_CHECK_OP_STRING(uint64_t); +ABSL_LOG_INTERNAL_DEFINE_MAKE_CHECK_OP_STRING(float); +ABSL_LOG_INTERNAL_DEFINE_MAKE_CHECK_OP_STRING(double); +ABSL_LOG_INTERNAL_DEFINE_MAKE_CHECK_OP_STRING(char); +ABSL_LOG_INTERNAL_DEFINE_MAKE_CHECK_OP_STRING(unsigned char); +ABSL_LOG_INTERNAL_DEFINE_MAKE_CHECK_OP_STRING(const std::string&); +ABSL_LOG_INTERNAL_DEFINE_MAKE_CHECK_OP_STRING(const absl::string_view&); +ABSL_LOG_INTERNAL_DEFINE_MAKE_CHECK_OP_STRING(const char*); +ABSL_LOG_INTERNAL_DEFINE_MAKE_CHECK_OP_STRING(const signed char*); +ABSL_LOG_INTERNAL_DEFINE_MAKE_CHECK_OP_STRING(const unsigned char*); +ABSL_LOG_INTERNAL_DEFINE_MAKE_CHECK_OP_STRING(const void*); +#undef ABSL_LOG_INTERNAL_DEFINE_MAKE_CHECK_OP_STRING CheckOpMessageBuilder::CheckOpMessageBuilder( absl::Nonnull exprtext) { diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/log/internal/log_message.cc b/naiveproxy/src/third_party/abseil-cpp/absl/log/internal/log_message.cc index 51961fd6a4..9e7722dac0 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/log/internal/log_message.cc +++ b/naiveproxy/src/third_party/abseil-cpp/absl/log/internal/log_message.cc @@ -48,6 +48,7 @@ #include "absl/log/internal/log_format.h" #include "absl/log/internal/log_sink_set.h" #include "absl/log/internal/proto.h" +#include "absl/log/internal/structured_proto.h" #include "absl/log/log_entry.h" #include "absl/log/log_sink.h" #include "absl/log/log_sink_registry.h" @@ -632,6 +633,47 @@ template void LogMessage::CopyToEncodedBuffer( template void LogMessage::CopyToEncodedBuffer< LogMessage::StringType::kNotLiteral>(char ch, size_t num); +template void LogMessage::CopyToEncodedBufferWithStructuredProtoField< + LogMessage::StringType::kLiteral>(StructuredProtoField field, + absl::string_view str); +template void LogMessage::CopyToEncodedBufferWithStructuredProtoField< + LogMessage::StringType::kNotLiteral>(StructuredProtoField field, + absl::string_view str); + +template +void LogMessage::CopyToEncodedBufferWithStructuredProtoField( + StructuredProtoField field, absl::string_view str) { + auto encoded_remaining_copy = data_->encoded_remaining(); + size_t encoded_field_size = BufferSizeForStructuredProtoField(field); + constexpr uint8_t tag_value = str_type == StringType::kLiteral + ? ValueTag::kStringLiteral + : ValueTag::kString; + auto start = EncodeMessageStart( + EventTag::kValue, + encoded_field_size + + BufferSizeFor(tag_value, WireType::kLengthDelimited) + str.size(), + &encoded_remaining_copy); + + // Write the encoded proto field. + if (!EncodeStructuredProtoField(field, encoded_remaining_copy)) { + // The header / field will not fit; zero `encoded_remaining()` so we + // don't write anything else later. + data_->encoded_remaining().remove_suffix(data_->encoded_remaining().size()); + return; + } + + // Write the string, truncating if necessary. + if (!EncodeStringTruncate(ValueTag::kString, str, &encoded_remaining_copy)) { + // The length of the string itself did not fit; zero `encoded_remaining()` + // so the value is not encoded at all. + data_->encoded_remaining().remove_suffix(data_->encoded_remaining().size()); + return; + } + + EncodeMessageLength(start, &encoded_remaining_copy); + data_->encoded_remaining() = encoded_remaining_copy; +} + // We intentionally don't return from these destructors. Disable MSVC's warning // about the destructor never returning as we do so intentionally here. #if defined(_MSC_VER) && !defined(__clang__) diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/log/internal/log_message.h b/naiveproxy/src/third_party/abseil-cpp/absl/log/internal/log_message.h index 474d1da68d..7d0e403e3a 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/log/internal/log_message.h +++ b/naiveproxy/src/third_party/abseil-cpp/absl/log/internal/log_message.h @@ -41,6 +41,7 @@ #include "absl/base/log_severity.h" #include "absl/base/nullability.h" #include "absl/log/internal/nullguard.h" +#include "absl/log/internal/structured_proto.h" #include "absl/log/log_entry.h" #include "absl/log/log_sink.h" #include "absl/strings/has_absl_stringify.h" @@ -52,6 +53,8 @@ ABSL_NAMESPACE_BEGIN namespace log_internal { constexpr int kLogMessageBufferSize = 15000; +enum class StructuredStringType; + class LogMessage { public: struct InfoTag {}; @@ -217,6 +220,10 @@ class LogMessage { struct LogMessageData; // Opaque type containing message state friend class AsLiteralImpl; friend class StringifySink; + template + friend class AsStructuredStringTypeImpl; + template + friend class AsStructuredValueImpl; // This streambuf writes directly into the structured logging buffer so that // arbitrary types can be encoded as string data (using @@ -247,6 +254,13 @@ class LogMessage { template void CopyToEncodedBuffer(char ch, size_t num) ABSL_ATTRIBUTE_NOINLINE; + // Copies `field` to the encoded buffer, then appends `str` after it + // (truncating `str` if necessary to fit). + template + void CopyToEncodedBufferWithStructuredProtoField(StructuredProtoField field, + absl::string_view str) + ABSL_ATTRIBUTE_NOINLINE; + // Returns `true` if the message is fatal or enabled debug-fatal. bool IsFatal() const; diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/log/internal/structured.h b/naiveproxy/src/third_party/abseil-cpp/absl/log/internal/structured.h index abc0a5aade..50783dffd2 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/log/internal/structured.h +++ b/naiveproxy/src/third_party/abseil-cpp/absl/log/internal/structured.h @@ -20,10 +20,14 @@ #define ABSL_LOG_INTERNAL_STRUCTURED_H_ #include +#include -#include "absl/base/config.h" #include "absl/base/attributes.h" +#include "absl/base/config.h" +#include "absl/functional/any_invocable.h" #include "absl/log/internal/log_message.h" +#include "absl/log/internal/structured_proto.h" +#include "absl/strings/str_cat.h" #include "absl/strings/string_view.h" namespace absl { @@ -54,6 +58,105 @@ class ABSL_MUST_USE_RESULT AsLiteralImpl final { } }; +enum class StructuredStringType { + kLiteral, + kNotLiteral, +}; + +// Structured log data for a string and associated structured proto field, +// both of which must outlive this object. +template +class ABSL_MUST_USE_RESULT AsStructuredStringTypeImpl final { + public: + constexpr AsStructuredStringTypeImpl( + absl::string_view str ABSL_ATTRIBUTE_LIFETIME_BOUND, + StructuredProtoField field ABSL_ATTRIBUTE_LIFETIME_BOUND) + : str_(str), field_(field) {} + + private: + absl::string_view str_; + StructuredProtoField field_; + + friend std::ostream& operator<<(std::ostream& os, + const AsStructuredStringTypeImpl& impl) { + return os << impl.str_; + } + void AddToMessage(LogMessage& m) const { + if (str_type == StructuredStringType::kLiteral) { + return m.CopyToEncodedBufferWithStructuredProtoField< + log_internal::LogMessage::StringType::kLiteral>(field_, str_); + } else { + return m.CopyToEncodedBufferWithStructuredProtoField< + log_internal::LogMessage::StringType::kNotLiteral>(field_, str_); + } + } + friend LogMessage& operator<<(LogMessage& m, + const AsStructuredStringTypeImpl& impl) { + impl.AddToMessage(m); + return m; + } +}; + +using AsStructuredLiteralImpl = + AsStructuredStringTypeImpl; +using AsStructuredNotLiteralImpl = + AsStructuredStringTypeImpl; + +// Structured log data for a stringifyable type T and associated structured +// proto field, both of which must outlive this object. +template +class ABSL_MUST_USE_RESULT AsStructuredValueImpl final { + public: + using ValueFormatter = absl::AnyInvocable; + + constexpr AsStructuredValueImpl( + T value ABSL_ATTRIBUTE_LIFETIME_BOUND, + StructuredProtoField field ABSL_ATTRIBUTE_LIFETIME_BOUND, + ValueFormatter value_formatter = + [](T value) { return absl::StrCat(value); }) + : value_(value), + field_(field), + value_formatter_(std::move(value_formatter)) {} + + private: + T value_; + StructuredProtoField field_; + ValueFormatter value_formatter_; + + friend std::ostream& operator<<(std::ostream& os, + const AsStructuredValueImpl& impl) { + return os << impl.value_formatter_(impl.value_); + } + void AddToMessage(LogMessage& m) const { + m.CopyToEncodedBufferWithStructuredProtoField< + log_internal::LogMessage::StringType::kNotLiteral>( + field_, value_formatter_(value_)); + } + friend LogMessage& operator<<(LogMessage& m, + const AsStructuredValueImpl& impl) { + impl.AddToMessage(m); + return m; + } +}; + +#ifdef ABSL_HAVE_CLASS_TEMPLATE_ARGUMENT_DEDUCTION + +// Template deduction guide so `AsStructuredValueImpl(42, data)` works +// without specifying the template type. +template +AsStructuredValueImpl(T value, StructuredProtoField field) + -> AsStructuredValueImpl; + +// Template deduction guide so `AsStructuredValueImpl(42, data, formatter)` +// works without specifying the template type. +template +AsStructuredValueImpl( + T value, StructuredProtoField field, + typename AsStructuredValueImpl::ValueFormatter value_formatter) + -> AsStructuredValueImpl; + +#endif // ABSL_HAVE_CLASS_TEMPLATE_ARGUMENT_DEDUCTION + } // namespace log_internal ABSL_NAMESPACE_END } // namespace absl diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/log/internal/structured_proto.cc b/naiveproxy/src/third_party/abseil-cpp/absl/log/internal/structured_proto.cc new file mode 100644 index 0000000000..e3829e4b5d --- /dev/null +++ b/naiveproxy/src/third_party/abseil-cpp/absl/log/internal/structured_proto.cc @@ -0,0 +1,115 @@ +// +// Copyright 2024 The Abseil Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "absl/log/internal/structured_proto.h" + +#include + +#include "absl/base/config.h" +#include "absl/log/internal/proto.h" +#include "absl/types/span.h" +#include "absl/types/variant.h" + +namespace absl { +ABSL_NAMESPACE_BEGIN +namespace log_internal { + +namespace { + +// Handles protobuf-encoding a type contained inside +// `StructuredProtoField::Varint`. +struct VarintEncoderVisitor final { + template + bool operator()(T value) const { + return EncodeVarint(field_number, value, &buf); + } + + uint64_t field_number; + absl::Span& buf; +}; + +// Handles protobuf-encoding a type contained inside +// `StructuredProtoField::I64`. +struct I64EncoderVisitor final { + bool operator()(uint64_t value) const { + return Encode64Bit(field_number, value, &buf); + } + + bool operator()(int64_t value) const { + return Encode64Bit(field_number, value, &buf); + } + + bool operator()(double value) const { + return EncodeDouble(field_number, value, &buf); + } + + uint64_t field_number; + absl::Span& buf; +}; + +// Handles protobuf-encoding a type contained inside +// `StructuredProtoField::I32`. +struct I32EncoderVisitor final { + bool operator()(uint32_t value) const { + return Encode32Bit(field_number, value, &buf); + } + + bool operator()(int32_t value) const { + return Encode32Bit(field_number, value, &buf); + } + + bool operator()(float value) const { + return EncodeFloat(field_number, value, &buf); + } + + uint64_t field_number; + absl::Span& buf; +}; + +// Handles protobuf-encoding a type contained inside `StructuredProtoField`. +struct EncoderVisitor final { + bool operator()(StructuredProtoField::Varint varint) { + return absl::visit(VarintEncoderVisitor{field_number, buf}, varint); + } + + bool operator()(StructuredProtoField::I64 i64) { + return absl::visit(I64EncoderVisitor{field_number, buf}, i64); + } + + bool operator()(StructuredProtoField::LengthDelimited length_delimited) { + // No need for a visitor, since `StructuredProtoField::LengthDelimited` is + // just `absl::Span`. + return EncodeBytes(field_number, length_delimited, &buf); + } + + bool operator()(StructuredProtoField::I32 i32) { + return absl::visit(I32EncoderVisitor{field_number, buf}, i32); + } + + uint64_t field_number; + absl::Span& buf; +}; + +} // namespace + +bool EncodeStructuredProtoField(StructuredProtoField field, + absl::Span& buf) { + return absl::visit(EncoderVisitor{field.field_number, buf}, field.value); +} + +} // namespace log_internal + +ABSL_NAMESPACE_END +} // namespace absl diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/log/internal/structured_proto.h b/naiveproxy/src/third_party/abseil-cpp/absl/log/internal/structured_proto.h new file mode 100644 index 0000000000..3ebc4beb55 --- /dev/null +++ b/naiveproxy/src/third_party/abseil-cpp/absl/log/internal/structured_proto.h @@ -0,0 +1,107 @@ +// Copyright 2024 The Abseil Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// ----------------------------------------------------------------------------- +// File: log/internal/structured_proto.h +// ----------------------------------------------------------------------------- + +#ifndef ABSL_LOG_INTERNAL_STRUCTURED_PROTO_H_ +#define ABSL_LOG_INTERNAL_STRUCTURED_PROTO_H_ + +#include +#include + +#include "absl/base/config.h" +#include "absl/log/internal/proto.h" +#include "absl/types/span.h" +#include "absl/types/variant.h" + +namespace absl { +ABSL_NAMESPACE_BEGIN +namespace log_internal { + +// Sum type holding a single valid protobuf field suitable for encoding. +struct StructuredProtoField final { + // Numeric type encoded with varint encoding: + // https://protobuf.dev/programming-guides/encoding/#varints + using Varint = absl::variant; + + // Fixed-length 64-bit integer encoding: + // https://protobuf.dev/programming-guides/encoding/#non-varints + using I64 = absl::variant; + + // Length-delimited record type (string, sub-message): + // https://protobuf.dev/programming-guides/encoding/#length-types + using LengthDelimited = absl::Span; + + // Fixed-length 32-bit integer encoding: + // https://protobuf.dev/programming-guides/encoding/#non-varints + using I32 = absl::variant; + + // Valid record type: + // https://protobuf.dev/programming-guides/encoding/#structure + using Value = absl::variant; + + // Field number for the protobuf value. + uint64_t field_number; + + // Value to encode. + Value value; +}; + +// Estimates the number of bytes needed to encode `field` using +// protobuf encoding. +// +// The returned value might be larger than the actual number of bytes needed. +inline size_t BufferSizeForStructuredProtoField(StructuredProtoField field) { + // Visitor to estimate the number of bytes of one of the types contained + // inside `StructuredProtoField`. + struct BufferSizeVisitor final { + size_t operator()(StructuredProtoField::Varint /*unused*/) { + return BufferSizeFor(field_number, WireType::kVarint); + } + + size_t operator()(StructuredProtoField::I64 /*unused*/) { + return BufferSizeFor(field_number, WireType::k64Bit); + } + + size_t operator()(StructuredProtoField::LengthDelimited length_delimited) { + return BufferSizeFor(field_number, WireType::kLengthDelimited) + + length_delimited.size(); + } + + size_t operator()(StructuredProtoField::I32 /*unused*/) { + return BufferSizeFor(field_number, WireType::k32Bit); + } + + uint64_t field_number; + }; + + return absl::visit(BufferSizeVisitor{field.field_number}, field.value); +} + +// Encodes `field` into `buf` using protobuf encoding. +// +// On success, returns `true` and advances `buf` to the end of +// the bytes consumed. +// +// On failure (if `buf` was too small), returns `false`. +bool EncodeStructuredProtoField(StructuredProtoField field, + absl::Span& buf); + +} // namespace log_internal +ABSL_NAMESPACE_END +} // namespace absl + +#endif // ABSL_LOG_INTERNAL_STRUCTURED_PROTO_H_ diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/log/log.h b/naiveproxy/src/third_party/abseil-cpp/absl/log/log.h index a4e1d1fe81..4a4e03803a 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/log/log.h +++ b/naiveproxy/src/third_party/abseil-cpp/absl/log/log.h @@ -260,44 +260,55 @@ ABSL_LOG_INTERNAL_DLOG_IF_IMPL(_##severity, condition) // LOG_EVERY_N +// LOG_FIRST_N +// LOG_EVERY_POW_2 +// LOG_EVERY_N_SEC // -// An instance of `LOG_EVERY_N` increments a hidden zero-initialized counter -// every time execution passes through it and logs the specified message when -// the counter's value is a multiple of `n`, doing nothing otherwise. Each -// instance has its own counter. The counter's value can be logged by streaming -// the symbol `COUNTER`. `LOG_EVERY_N` is thread-safe. -// Example: +// These "stateful" macros log conditionally based on a hidden counter or timer. +// When the condition is false and no logging is done, streamed operands aren't +// evaluated either. Each instance has its own state (i.e. counter, timer) +// that's independent of other instances of the macros. The macros in this +// family are thread-safe in the sense that they are meant to be called +// concurrently and will not invoke undefined behavior, however their +// implementation prioritizes efficiency over exactness and may occasionally log +// more or less often than specified. +// +// * `LOG_EVERY_N` logs the first time and once every `n` times thereafter. +// * `LOG_FIRST_N` logs the first `n` times and then stops. +// * `LOG_EVERY_POW_2` logs the first, second, fourth, eighth, etc. times. +// * `LOG_EVERY_N_SEC` logs the first time and no more than once every `n` +// seconds thereafter. `n` is passed as a floating point value. +// +// The `LOG_IF`... variations with an extra condition evaluate the specified +// condition first and short-circuit if it is false. For example, an evaluation +// of `LOG_IF_FIRST_N` does not count against the first `n` if the specified +// condition is false. Stateful `VLOG`... variations likewise short-circuit +// if `VLOG` is disabled. +// +// An approximate count of the number of times a particular instance's stateful +// condition has been evaluated (i.e. excluding those where a specified `LOG_IF` +// condition was false) can be included in the logged message by streaming the +// symbol `COUNTER`. +// +// The `n` parameter need not be a constant. Conditional logging following a +// change to `n` isn't fully specified, but it should converge on the new value +// within roughly `max(old_n, new_n)` evaluations or seconds. +// +// Examples: // // LOG_EVERY_N(WARNING, 1000) << "Got a packet with a bad CRC (" << COUNTER // << " total)"; -#define LOG_EVERY_N(severity, n) \ - ABSL_LOG_INTERNAL_LOG_EVERY_N_IMPL(_##severity, n) - -// LOG_FIRST_N -// -// `LOG_FIRST_N` behaves like `LOG_EVERY_N` except that the specified message is -// logged when the counter's value is less than `n`. `LOG_FIRST_N` is -// thread-safe. -#define LOG_FIRST_N(severity, n) \ - ABSL_LOG_INTERNAL_LOG_FIRST_N_IMPL(_##severity, n) - -// LOG_EVERY_POW_2 -// -// `LOG_EVERY_POW_2` behaves like `LOG_EVERY_N` except that the specified -// message is logged when the counter's value is a power of 2. -// `LOG_EVERY_POW_2` is thread-safe. -#define LOG_EVERY_POW_2(severity) \ - ABSL_LOG_INTERNAL_LOG_EVERY_POW_2_IMPL(_##severity) - -// LOG_EVERY_N_SEC -// -// An instance of `LOG_EVERY_N_SEC` uses a hidden state variable to log the -// specified message at most once every `n_seconds`. A hidden counter of -// executions (whether a message is logged or not) is also maintained and can be -// logged by streaming the symbol `COUNTER`. `LOG_EVERY_N_SEC` is thread-safe. -// Example: // // LOG_EVERY_N_SEC(INFO, 2.5) << "Got " << COUNTER << " cookies so far"; +// +// LOG_IF_EVERY_N(INFO, (size > 1024), 10) << "Got the " << COUNTER +// << "th big cookie"; +#define LOG_EVERY_N(severity, n) \ + ABSL_LOG_INTERNAL_LOG_EVERY_N_IMPL(_##severity, n) +#define LOG_FIRST_N(severity, n) \ + ABSL_LOG_INTERNAL_LOG_FIRST_N_IMPL(_##severity, n) +#define LOG_EVERY_POW_2(severity) \ + ABSL_LOG_INTERNAL_LOG_EVERY_POW_2_IMPL(_##severity) #define LOG_EVERY_N_SEC(severity, n_seconds) \ ABSL_LOG_INTERNAL_LOG_EVERY_N_SEC_IMPL(_##severity, n_seconds) @@ -328,13 +339,6 @@ #define VLOG_EVERY_N_SEC(severity, n_seconds) \ ABSL_LOG_INTERNAL_VLOG_EVERY_N_SEC_IMPL(severity, n_seconds) -// `LOG_IF_EVERY_N` and friends behave as the corresponding `LOG_EVERY_N` -// but neither increment a counter nor log a message if condition is false (as -// `LOG_IF`). -// Example: -// -// LOG_IF_EVERY_N(INFO, (size > 1024), 10) << "Got the " << COUNTER -// << "th big cookie"; #define LOG_IF_EVERY_N(severity, condition, n) \ ABSL_LOG_INTERNAL_LOG_IF_EVERY_N_IMPL(_##severity, condition, n) #define LOG_IF_FIRST_N(severity, condition, n) \ diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/log/scoped_mock_log.h b/naiveproxy/src/third_party/abseil-cpp/absl/log/scoped_mock_log.h index 399e604deb..a383066741 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/log/scoped_mock_log.h +++ b/naiveproxy/src/third_party/abseil-cpp/absl/log/scoped_mock_log.h @@ -40,8 +40,8 @@ enum class MockLogDefault { kIgnoreUnexpected, kDisallowUnexpected }; // ScopedMockLog // -// ScopedMockLog is a LogSink that intercepts LOG() messages issued during its -// lifespan. +// ScopedMockLog is a LogSink that intercepts LOG() messages issued by all +// threads when active. // // Using this together with GoogleTest, it's easy to test how a piece of code // calls LOG(). The typical usage, noting the distinction between diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/memory/BUILD.bazel b/naiveproxy/src/third_party/abseil-cpp/absl/memory/BUILD.bazel index 4573f17d26..d50a502e70 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/memory/BUILD.bazel +++ b/naiveproxy/src/third_party/abseil-cpp/absl/memory/BUILD.bazel @@ -54,7 +54,7 @@ cc_test( deps = [ ":memory", "//absl/base:core_headers", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/meta/BUILD.bazel b/naiveproxy/src/third_party/abseil-cpp/absl/meta/BUILD.bazel index cf5df9b88e..d01cb8a217 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/meta/BUILD.bazel +++ b/naiveproxy/src/third_party/abseil-cpp/absl/meta/BUILD.bazel @@ -53,7 +53,7 @@ cc_test( "//absl/base:config", "//absl/base:core_headers", "//absl/time", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/meta/type_traits.h b/naiveproxy/src/third_party/abseil-cpp/absl/meta/type_traits.h index ded55820a3..02da0674a8 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/meta/type_traits.h +++ b/naiveproxy/src/third_party/abseil-cpp/absl/meta/type_traits.h @@ -503,10 +503,11 @@ using swap_internal::Swap; // remove the condition. // // Clang on all platforms fails to detect that a type with a user-provided -// move-assignment operator is not trivially relocatable. So in fact we -// opt out of Clang altogether, for now. +// move-assignment operator is not trivially relocatable so we also check for +// is_trivially_move_assignable for Clang. // -// TODO(b/325479096): Remove the opt-out once Clang's behavior is fixed. +// TODO(b/325479096): Remove the Clang is_trivially_move_assignable version once +// Clang's behavior is fixed. // // According to https://github.com/abseil/abseil-cpp/issues/1479, this does not // work with NVCC either. @@ -516,6 +517,15 @@ using swap_internal::Swap; template struct is_trivially_relocatable : std::integral_constant {}; +#elif ABSL_HAVE_BUILTIN(__is_trivially_relocatable) && defined(__clang__) && \ + !(defined(_WIN32) || defined(_WIN64)) && !defined(__APPLE__) && \ + !defined(__NVCC__) +template +struct is_trivially_relocatable + : std::integral_constant< + bool, std::is_trivially_copyable::value || + (__is_trivially_relocatable(T) && + std::is_trivially_move_assignable::value)> {}; #else // Otherwise we use a fallback that detects only those types we can feasibly // detect. Any type that is trivially copyable is by definition trivially @@ -648,9 +658,9 @@ struct IsView> : std::true_type {}; // Until then, we consider an assignment from an "owner" (such as std::string) // to a "view" (such as std::string_view) to be a lifetime-bound assignment. template -using IsLifetimeBoundAssignment = - std::integral_constant>::value && - IsOwner>::value>; +using IsLifetimeBoundAssignment = absl::conjunction< + std::integral_constant::value>, + IsOwner>, IsView>>; } // namespace type_traits_internal diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/numeric/BUILD.bazel b/naiveproxy/src/third_party/abseil-cpp/absl/numeric/BUILD.bazel index f202c6e06f..7b92eed583 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/numeric/BUILD.bazel +++ b/naiveproxy/src/third_party/abseil-cpp/absl/numeric/BUILD.bazel @@ -54,8 +54,8 @@ cc_binary( ":bits", "//absl/base:core_headers", "//absl/random", - "@com_github_google_benchmark//:benchmark_main", - "@com_google_googletest//:gtest", + "@google_benchmark//:benchmark_main", + "@googletest//:gtest", ], ) @@ -70,8 +70,8 @@ cc_test( deps = [ ":bits", "//absl/random", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -109,8 +109,8 @@ cc_test( "//absl/meta:type_traits", "//absl/strings", "//absl/types:compare", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -123,8 +123,8 @@ cc_test( deps = [ ":int128", "//absl/base:config", - "@com_github_google_benchmark//:benchmark_main", - "@com_google_googletest//:gtest", + "@google_benchmark//:benchmark_main", + "@googletest//:gtest", ], ) diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/profiling/BUILD.bazel b/naiveproxy/src/third_party/abseil-cpp/absl/profiling/BUILD.bazel index abe127ecdc..c5e3b00593 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/profiling/BUILD.bazel +++ b/naiveproxy/src/third_party/abseil-cpp/absl/profiling/BUILD.bazel @@ -59,8 +59,8 @@ cc_test( "//absl/synchronization", "//absl/synchronization:thread_pool", "//absl/time", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -88,8 +88,8 @@ cc_test( deps = [ ":exponential_biased", "//absl/strings", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -119,8 +119,8 @@ cc_test( deps = [ ":periodic_sampler", "//absl/base:core_headers", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -135,6 +135,6 @@ cc_binary( deps = [ ":periodic_sampler", "//absl/base:core_headers", - "@com_github_google_benchmark//:benchmark_main", + "@google_benchmark//:benchmark_main", ], ) diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/random/BUILD.bazel b/naiveproxy/src/third_party/abseil-cpp/absl/random/BUILD.bazel index a359e1b981..ef8ac7ef60 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/random/BUILD.bazel +++ b/naiveproxy/src/third_party/abseil-cpp/absl/random/BUILD.bazel @@ -93,7 +93,10 @@ cc_library( hdrs = ["seed_gen_exception.h"], copts = ABSL_DEFAULT_COPTS, linkopts = ABSL_DEFAULT_LINKOPTS, - deps = ["//absl/base:config"], + deps = [ + "//absl/base:config", + "//absl/base:raw_logging_internal", + ], ) cc_library( @@ -161,7 +164,7 @@ cc_library( "//absl/meta:type_traits", "//absl/random/internal:mock_helpers", "//absl/utility", - "@com_google_googletest//:gtest", + "@googletest//:gtest", ], ) @@ -177,8 +180,8 @@ cc_test( ":random", "//absl/random/internal:pcg_engine", "//absl/random/internal:sequence_urbg", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -203,8 +206,8 @@ cc_test( "//absl/random/internal:sequence_urbg", "//absl/strings", "//absl/strings:str_format", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -223,8 +226,8 @@ cc_test( "//absl/meta:type_traits", "//absl/numeric:int128", "//absl/random/internal:distribution_test_util", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -237,8 +240,8 @@ cc_test( deps = [ ":distributions", ":random", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -262,8 +265,8 @@ cc_test( "//absl/random/internal:sequence_urbg", "//absl/strings", "//absl/strings:str_format", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -283,8 +286,8 @@ cc_test( "//absl/random/internal:pcg_engine", "//absl/random/internal:sequence_urbg", "//absl/strings", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -313,8 +316,8 @@ cc_test( "//absl/random/internal:sequence_urbg", "//absl/strings", "//absl/strings:str_format", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -336,8 +339,8 @@ cc_test( "//absl/random/internal:sequence_urbg", "//absl/strings", "//absl/strings:str_format", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -360,8 +363,8 @@ cc_test( "//absl/random/internal:sequence_urbg", "//absl/strings", "//absl/strings:str_format", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -382,8 +385,8 @@ cc_test( "//absl/random/internal:pcg_engine", "//absl/random/internal:sequence_urbg", "//absl/strings", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -409,8 +412,8 @@ cc_test( "//absl/random/internal:pcg_engine", "//absl/random/internal:sequence_urbg", "//absl/strings", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -430,8 +433,8 @@ cc_test( "//absl/random/internal:pcg_engine", "//absl/random/internal:sequence_urbg", "//absl/strings", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -446,8 +449,8 @@ cc_test( ":random", "//absl/base:fast_type_id", "//absl/random/internal:sequence_urbg", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -465,8 +468,8 @@ cc_test( ":mock_distributions", ":mocking_bit_gen", ":random", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -486,8 +489,8 @@ cc_test( ":mocking_bit_gen", ":random", "//absl/numeric:int128", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -502,8 +505,8 @@ cc_test( ], deps = [ ":random", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -517,8 +520,8 @@ cc_test( ":random", ":seed_sequences", "//absl/random/internal:nonsecure_base", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -540,6 +543,6 @@ cc_binary( "//absl/meta:type_traits", "//absl/random/internal:fast_uniform_bits", "//absl/random/internal:randen_engine", - "@com_github_google_benchmark//:benchmark_main", + "@google_benchmark//:benchmark_main", ], ) diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/random/BUILD.gn b/naiveproxy/src/third_party/abseil-cpp/absl/random/BUILD.gn index 317b71369a..edd09515aa 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/random/BUILD.gn +++ b/naiveproxy/src/third_party/abseil-cpp/absl/random/BUILD.gn @@ -54,7 +54,10 @@ absl_source_set("distributions") { absl_source_set("seed_gen_exception") { public = [ "seed_gen_exception.h" ] sources = [ "seed_gen_exception.cc" ] - deps = [ "//third_party/abseil-cpp/absl/base:config" ] + deps = [ + "//third_party/abseil-cpp/absl/base:config", + "//third_party/abseil-cpp/absl/base:raw_logging_internal", + ] } absl_source_set("seed_sequences") { diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/random/CMakeLists.txt b/naiveproxy/src/third_party/abseil-cpp/absl/random/CMakeLists.txt index 2e4f0e459f..8f62696465 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/random/CMakeLists.txt +++ b/naiveproxy/src/third_party/abseil-cpp/absl/random/CMakeLists.txt @@ -211,6 +211,7 @@ absl_cc_library( ${ABSL_DEFAULT_LINKOPTS} DEPS absl::config + absl::raw_logging_internal ) absl_cc_library( @@ -674,6 +675,7 @@ absl_cc_library( LINKOPTS ${ABSL_DEFAULT_LINKOPTS} DEPS + absl::config absl::int128 absl::type_traits ) @@ -851,6 +853,7 @@ absl_cc_library( absl::random_internal_platform absl::random_internal_randen_hwaes_impl absl::config + absl::optional ) # Internal-only target, do not depend on directly. @@ -1033,8 +1036,7 @@ absl_cc_test( absl::random_internal_nonsecure_base absl::random_random absl::random_distributions - absl::random_seed_sequences - absl::strings + absl::type_traits GTest::gtest_main ) diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/random/internal/BUILD.bazel b/naiveproxy/src/third_party/abseil-cpp/absl/random/internal/BUILD.bazel index cf4b8f34f2..666f411091 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/random/internal/BUILD.bazel +++ b/naiveproxy/src/third_party/abseil-cpp/absl/random/internal/BUILD.bazel @@ -14,14 +14,14 @@ # limitations under the License. # +load("@bazel_skylib//lib:selects.bzl", "selects") + # Internal-only implementation classes for Abseil Random load( "//absl:copts/configure_copts.bzl", "ABSL_DEFAULT_COPTS", "ABSL_DEFAULT_LINKOPTS", - "ABSL_RANDOM_RANDEN_COPTS", "ABSL_TEST_COPTS", - "absl_random_randen_copts_init", ) default_package_visibility = [ @@ -39,6 +39,72 @@ package( licenses(["notice"]) +# Used to select on compilers that support GCC-compatible options +# (e.g. "-maes"). +selects.config_setting_group( + name = "gcc_compatible", + match_any = [ + "@rules_cc//cc/compiler:clang", + "@rules_cc//cc/compiler:gcc", + ], +) + +selects.config_setting_group( + name = "gcc_compatible-aarch32", + match_all = [ + ":gcc_compatible", + "@platforms//cpu:aarch32", + ], +) + +selects.config_setting_group( + name = "gcc_compatible-aarch64", + match_all = [ + ":gcc_compatible", + "@platforms//cpu:aarch64", + ], +) + +selects.config_setting_group( + name = "ppc_crypto", + match_any = [ + "@platforms//cpu:ppc", + "@platforms//cpu:ppc32", + "@platforms//cpu:ppc64le", + ], +) + +selects.config_setting_group( + name = "gcc_compatible-ppc_crypto", + match_all = [ + ":gcc_compatible", + ":ppc_crypto", + ], +) + +selects.config_setting_group( + name = "gcc_compatible-x86_64", + match_all = [ + ":gcc_compatible", + "@platforms//cpu:x86_64", + ], +) + +# Some libraries are compiled with options to generate AES-NI +# instructions, and runtime dispatch is used to determine if the host +# microarchitecture supports AES-NI or if a portable fallback library +# should be called. +ABSL_RANDOM_RANDEN_COPTS = select({ + ":gcc_compatible-aarch32": ["-mfpu=neon"], + ":gcc_compatible-aarch64": ["-march=armv8-a+crypto"], + ":gcc_compatible-ppc_crypto": ["-mcrypto"], + ":gcc_compatible-x86_64": [ + "-maes", + "-msse4.1", + ], + "//conditions:default": [], +}) + cc_library( name = "traits", hdrs = ["traits.h"], @@ -88,8 +154,8 @@ cc_library( ], copts = ABSL_DEFAULT_COPTS, linkopts = ABSL_DEFAULT_LINKOPTS + select({ - "//absl:msvc_compiler": ["-DEFAULTLIB:bcrypt.lib"], - "//absl:clang-cl_compiler": ["-DEFAULTLIB:bcrypt.lib"], + "@rules_cc//cc/compiler:msvc-cl": ["-DEFAULTLIB:bcrypt.lib"], + "@rules_cc//cc/compiler:clang-cl": ["-DEFAULTLIB:bcrypt.lib"], "//absl:mingw_compiler": [ "-DEFAULTLIB:bcrypt.lib", "-lbcrypt", @@ -117,9 +183,9 @@ cc_library( ], copts = ABSL_DEFAULT_COPTS, linkopts = select({ - "//absl:msvc_compiler": [], - "//absl:clang-cl_compiler": [], - "//absl:wasm": [], + "@rules_cc//cc/compiler:msvc-cl": [], + "@rules_cc//cc/compiler:clang-cl": [], + "@rules_cc//cc/compiler:emscripten": [], "//conditions:default": ["-pthread"], }) + ABSL_DEFAULT_LINKOPTS, deps = [ @@ -183,6 +249,7 @@ cc_library( copts = ABSL_DEFAULT_COPTS, linkopts = ABSL_DEFAULT_LINKOPTS, deps = [ + "//absl/base:config", "//absl/meta:type_traits", "//absl/numeric:int128", ], @@ -321,8 +388,6 @@ cc_library( ], ) -absl_random_randen_copts_init() - cc_library( name = "randen_hwaes", srcs = [ @@ -338,6 +403,7 @@ cc_library( ":platform", ":randen_hwaes_impl", "//absl/base:config", + "//absl/types:optional", ], ) @@ -349,8 +415,8 @@ cc_library( "randen_hwaes.h", ], copts = ABSL_DEFAULT_COPTS + ABSL_RANDOM_RANDEN_COPTS + select({ - "//absl:msvc_compiler": [], - "//absl:clang-cl_compiler": [], + "@rules_cc//cc/compiler:msvc-cl": [], + "@rules_cc//cc/compiler:clang-cl": [], "//conditions:default": ["-Wno-pass-failed"], }), linkopts = ABSL_DEFAULT_LINKOPTS, @@ -417,8 +483,8 @@ cc_test( linkopts = ABSL_DEFAULT_LINKOPTS, deps = [ ":traits", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -434,8 +500,8 @@ cc_test( ":generate_real", "//absl/flags:flag", "//absl/numeric:bits", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -447,8 +513,8 @@ cc_test( linkopts = ABSL_DEFAULT_LINKOPTS, deps = [ ":distribution_test_util", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -460,8 +526,8 @@ cc_test( linkopts = ABSL_DEFAULT_LINKOPTS, deps = [ ":fastmath", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -474,8 +540,8 @@ cc_test( deps = [ ":explicit_seed_seq", "//absl/random:seed_sequences", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -487,8 +553,8 @@ cc_test( linkopts = ABSL_DEFAULT_LINKOPTS, deps = [ ":salted_seed_seq", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -503,8 +569,8 @@ cc_test( deps = [ ":distribution_test_util", "//absl/base:core_headers", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -518,8 +584,8 @@ cc_test( linkopts = ABSL_DEFAULT_LINKOPTS, deps = [ ":fast_uniform_bits", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -543,7 +609,7 @@ cc_library( ":mock_helpers", "//absl/base:config", "//absl/random:mocking_bit_gen", - "@com_google_googletest//:gtest", + "@googletest//:gtest", ], ) @@ -557,12 +623,11 @@ cc_test( linkopts = ABSL_DEFAULT_LINKOPTS, deps = [ ":nonsecure_base", + "//absl/meta:type_traits", "//absl/random", "//absl/random:distributions", - "//absl/random:seed_sequences", - "//absl/strings", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -574,8 +639,8 @@ cc_test( linkopts = ABSL_DEFAULT_LINKOPTS, deps = [ ":seed_material", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -591,8 +656,8 @@ cc_test( ":pool_urbg", "//absl/meta:type_traits", "//absl/types:span", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -607,8 +672,8 @@ cc_test( ":explicit_seed_seq", ":pcg_engine", "//absl/time", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -626,8 +691,8 @@ cc_test( "//absl/log", "//absl/strings", "//absl/time", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -640,8 +705,8 @@ cc_test( deps = [ ":randen", "//absl/meta:type_traits", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -655,8 +720,8 @@ cc_test( ":platform", ":randen_slow", "//absl/base:endian", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -673,7 +738,7 @@ cc_test( ":randen_hwaes_impl", # build_cleaner: keep "//absl/log", "//absl/strings:str_format", - "@com_google_googletest//:gtest", + "@googletest//:gtest", ], ) @@ -687,8 +752,8 @@ cc_test( ":wide_multiply", "//absl/numeric:bits", "//absl/numeric:int128", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -780,8 +845,8 @@ cc_test( linkopts = ABSL_DEFAULT_LINKOPTS, deps = [ ":iostream_state_saver", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -793,7 +858,7 @@ cc_test( linkopts = ABSL_DEFAULT_LINKOPTS, deps = [ ":uniform_helper", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/random/internal/BUILD.gn b/naiveproxy/src/third_party/abseil-cpp/absl/random/internal/BUILD.gn index c30fbfd894..794d6d4921 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/random/internal/BUILD.gn +++ b/naiveproxy/src/third_party/abseil-cpp/absl/random/internal/BUILD.gn @@ -105,6 +105,7 @@ absl_source_set("salted_seed_seq") { absl_source_set("iostream_state_saver") { public = [ "iostream_state_saver.h" ] deps = [ + "//third_party/abseil-cpp/absl/base:config", "//third_party/abseil-cpp/absl/meta:type_traits", "//third_party/abseil-cpp/absl/numeric:int128", ] @@ -225,6 +226,7 @@ absl_source_set("randen_hwaes") { ":platform", ":randen_hwaes_impl", "//third_party/abseil-cpp/absl/base:config", + "//third_party/abseil-cpp/absl/types:optional", ] visibility = [ "//third_party/abseil-cpp/absl/random/*" ] } @@ -294,6 +296,16 @@ absl_source_set("mock_overload_set") { ] } +absl_test("nonsecure_base_test") { + sources = [ "nonsecure_base_test.cc" ] + deps = [ + ":nonsecure_base", + "//third_party/abseil-cpp/absl/meta:type_traits", + "//third_party/abseil-cpp/absl/random", + "//third_party/abseil-cpp/absl/random:distributions", + ] +} + # TODO(danilchap): Enable when can be compiled on all chromium bots. # nanobenchmark uses platform specific functions to take accurate current time, # and fallbacks to clock_gettime. Several chromium configurations lack both diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/random/internal/distribution_test_util.h b/naiveproxy/src/third_party/abseil-cpp/absl/random/internal/distribution_test_util.h index 6d94cf6c97..1189340e3a 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/random/internal/distribution_test_util.h +++ b/naiveproxy/src/third_party/abseil-cpp/absl/random/internal/distribution_test_util.h @@ -16,9 +16,9 @@ #define ABSL_RANDOM_INTERNAL_DISTRIBUTION_TEST_UTIL_H_ #include -#include -#include +#include +#include "absl/base/config.h" #include "absl/strings/string_view.h" #include "absl/types/span.h" @@ -96,7 +96,7 @@ double BetaIncomplete(double x, double p, double q); // https://www.jstor.org/stable/2346798 // https://www.jstor.org/stable/2346887 // -// BetaIncompleteInv(p, q, beta, alhpa) +// BetaIncompleteInv(p, q, beta, alpha) // `p` is beta parameter p, `q` is beta parameter q. // `alpha` is the value of the lower tail area. // diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h b/naiveproxy/src/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h index e6e242ee1e..0f56bcb834 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +++ b/naiveproxy/src/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h @@ -16,10 +16,14 @@ #define ABSL_RANDOM_INTERNAL_IOSTREAM_STATE_SAVER_H_ #include -#include +#include +#include +#include #include +#include #include +#include "absl/base/config.h" #include "absl/meta/type_traits.h" #include "absl/numeric/int128.h" @@ -95,7 +99,6 @@ typename absl::enable_if_t::value, null_state_saver> make_ostream_state_saver(T& is, // NOLINT(runtime/references) std::ios_base::fmtflags flags = std::ios_base::dec) { - std::cerr << "null_state_saver"; using result_type = null_state_saver; return result_type(is, flags); } diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/random/internal/platform.h b/naiveproxy/src/third_party/abseil-cpp/absl/random/internal/platform.h index d779f481dd..bd2993e181 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/random/internal/platform.h +++ b/naiveproxy/src/third_party/abseil-cpp/absl/random/internal/platform.h @@ -12,6 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. +// SKIP_ABSL_INLINE_NAMESPACE_CHECK + #ifndef ABSL_RANDOM_INTERNAL_PLATFORM_H_ #define ABSL_RANDOM_INTERNAL_PLATFORM_H_ @@ -134,7 +136,14 @@ // accelerated Randen implementation. #define ABSL_RANDOM_INTERNAL_AES_DISPATCH 0 -#if defined(ABSL_ARCH_X86_64) +// iOS does not support dispatch, even on x86, since applications +// should be bundled as fat binaries, with a different build tailored for +// each specific supported platform/architecture. +#if (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE) || \ + (defined(TARGET_OS_IPHONE_SIMULATOR) && TARGET_OS_IPHONE_SIMULATOR) +#undef ABSL_RANDOM_INTERNAL_AES_DISPATCH +#define ABSL_RANDOM_INTERNAL_AES_DISPATCH 0 +#elif defined(ABSL_ARCH_X86_64) // Dispatch is available on x86_64 #undef ABSL_RANDOM_INTERNAL_AES_DISPATCH #define ABSL_RANDOM_INTERNAL_AES_DISPATCH 1 @@ -142,8 +151,8 @@ // Or when running linux PPC #undef ABSL_RANDOM_INTERNAL_AES_DISPATCH #define ABSL_RANDOM_INTERNAL_AES_DISPATCH 1 -#elif defined(__linux__) && defined(ABSL_ARCH_AARCH64) -// Or when running linux AArch64 +#elif (defined(__linux__) || defined(__APPLE__)) && defined(ABSL_ARCH_AARCH64) +// Or when running linux or macOS AArch64 #undef ABSL_RANDOM_INTERNAL_AES_DISPATCH #define ABSL_RANDOM_INTERNAL_AES_DISPATCH 1 #elif defined(__linux__) && defined(ABSL_ARCH_ARM) && (__ARM_ARCH >= 8) @@ -159,13 +168,4 @@ #define ABSL_RANDOM_INTERNAL_AES_DISPATCH 0 #endif -// iOS does not support dispatch, even on x86, since applications -// should be bundled as fat binaries, with a different build tailored for -// each specific supported platform/architecture. -#if (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE) || \ - (defined(TARGET_OS_IPHONE_SIMULATOR) && TARGET_OS_IPHONE_SIMULATOR) -#undef ABSL_RANDOM_INTERNAL_AES_DISPATCH -#define ABSL_RANDOM_INTERNAL_AES_DISPATCH 0 -#endif - #endif // ABSL_RANDOM_INTERNAL_PLATFORM_H_ diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/random/internal/randen_detect.cc b/naiveproxy/src/third_party/abseil-cpp/absl/random/internal/randen_detect.cc index bdeab877b9..828db4790a 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +++ b/naiveproxy/src/third_party/abseil-cpp/absl/random/internal/randen_detect.cc @@ -19,10 +19,21 @@ #include "absl/random/internal/randen_detect.h" +#if defined(__APPLE__) && defined(__aarch64__) +#if defined(__has_include) +#if __has_include() +#include +#endif +#endif +#include +#include +#endif + #include #include #include "absl/random/internal/platform.h" +#include "absl/types/optional.h" // IWYU pragma: keep #if !defined(__UCLIBC__) && defined(__GLIBC__) && \ (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 16)) @@ -102,6 +113,19 @@ static uint32_t GetAuxval(uint32_t hwcap_type) { #endif +#if defined(__APPLE__) && defined(ABSL_ARCH_AARCH64) +template +static absl::optional ReadSysctlByName(const char* name) { + T val; + size_t val_size = sizeof(T); + int ret = sysctlbyname(name, &val, &val_size, nullptr, 0); + if (ret == -1) { + return std::nullopt; + } + return val; +} +#endif + namespace absl { ABSL_NAMESPACE_BEGIN namespace random_internal { @@ -129,7 +153,9 @@ namespace random_internal { // cpu capabilities, and should allow us to enable crypto in the android // builds where it is supported. // -// 3. Use the default for the compiler architecture. +// 3. When __APPLE__ is defined on AARCH64, use sysctlbyname(). +// +// 4. Use the default for the compiler architecture. // bool CPUSupportsRandenHwAes() { @@ -178,8 +204,36 @@ bool CPUSupportsRandenHwAes() { return ((hwcap & kNEON) != 0) && ((hwcap & kAES) != 0); #endif +#elif defined(__APPLE__) && defined(ABSL_ARCH_AARCH64) + // 3. Use sysctlbyname. + + // Newer XNU kernels support querying all capabilities in a single + // sysctlbyname. +#if defined(CAP_BIT_AdvSIMD) && defined(CAP_BIT_FEAT_AES) + static const absl::optional caps = + ReadSysctlByName("hw.optional.arm.caps"); + if (caps.has_value()) { + constexpr uint64_t kNeonAndAesCaps = + (uint64_t{1} << CAP_BIT_AdvSIMD) | (uint64_t{1} << CAP_BIT_FEAT_AES); + return (*caps & kNeonAndAesCaps) == kNeonAndAesCaps; + } +#endif + + // https://developer.apple.com/documentation/kernel/1387446-sysctlbyname/determining_instruction_set_characteristics#overview + static const absl::optional adv_simd = + ReadSysctlByName("hw.optional.AdvSIMD"); + if (adv_simd.value_or(0) == 0) { + return false; + } + // https://developer.apple.com/documentation/kernel/1387446-sysctlbyname/determining_instruction_set_characteristics#3918855 + static const absl::optional feat_aes = + ReadSysctlByName("hw.optional.arm.FEAT_AES"); + if (feat_aes.value_or(0) == 0) { + return false; + } + return true; #else // ABSL_INTERNAL_USE_GETAUXVAL - // 3. By default, assume that the compiler default. + // 4. By default, assume that the compiler default. return ABSL_HAVE_ACCELERATED_AES ? true : false; #endif @@ -215,9 +269,6 @@ bool CPUSupportsRandenHwAes() { // __asm __volatile("mrs %0, id_aa64isar0_el1" :"=&r" (val)); // // * Use a CPUID-style heuristic database. - // - // * On Apple (__APPLE__), AES is available on Arm v8. - // https://stackoverflow.com/questions/45637888/how-to-determine-armv8-features-at-runtime-on-ios } #if defined(__clang__) diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/random/internal/randen_engine.h b/naiveproxy/src/third_party/abseil-cpp/absl/random/internal/randen_engine.h index fe2d9f6c15..925e1bbab5 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/random/internal/randen_engine.h +++ b/naiveproxy/src/third_party/abseil-cpp/absl/random/internal/randen_engine.h @@ -18,9 +18,10 @@ #include #include #include -#include +#include #include #include +#include #include #include "absl/base/internal/endian.h" diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/random/seed_gen_exception.cc b/naiveproxy/src/third_party/abseil-cpp/absl/random/seed_gen_exception.cc index fdcb54a86c..6fb4ad3766 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +++ b/naiveproxy/src/third_party/abseil-cpp/absl/random/seed_gen_exception.cc @@ -14,9 +14,8 @@ #include "absl/random/seed_gen_exception.h" -#include - #include "absl/base/config.h" +#include "absl/base/internal/raw_logging.h" namespace absl { ABSL_NAMESPACE_BEGIN @@ -36,7 +35,7 @@ void ThrowSeedGenException() { #ifdef ABSL_HAVE_EXCEPTIONS throw absl::SeedGenException(); #else - std::cerr << kExceptionMessage << std::endl; + ABSL_RAW_LOG(FATAL, "%s", kExceptionMessage); std::terminate(); #endif } diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/status/BUILD.bazel b/naiveproxy/src/third_party/abseil-cpp/absl/status/BUILD.bazel index db995484ff..b0eb27ab29 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/status/BUILD.bazel +++ b/naiveproxy/src/third_party/abseil-cpp/absl/status/BUILD.bazel @@ -81,8 +81,8 @@ cc_test( "//absl/strings", "//absl/strings:cord", "//absl/strings:str_format", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -127,8 +127,8 @@ cc_test( "//absl/types:any", "//absl/types:variant", "//absl/utility", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -147,7 +147,7 @@ cc_library( ":statusor", "//absl/base:config", "//absl/strings:string_view", - "@com_google_googletest//:gtest", + "@googletest//:gtest", ], ) @@ -162,7 +162,7 @@ cc_test( ":status_matchers", ":statusor", "//absl/strings", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/strings/BUILD.bazel b/naiveproxy/src/third_party/abseil-cpp/absl/strings/BUILD.bazel index 1b5fbea671..81b8d89379 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/strings/BUILD.bazel +++ b/naiveproxy/src/third_party/abseil-cpp/absl/strings/BUILD.bazel @@ -146,8 +146,8 @@ cc_test( visibility = ["//visibility:private"], deps = [ ":strings", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -166,8 +166,8 @@ cc_test( "//absl/base:core_headers", "//absl/container:fixed_array", "//absl/log:check", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -183,8 +183,8 @@ cc_test( deps = [ ":strings", "//absl/base:raw_logging_internal", - "@com_github_google_benchmark//:benchmark_main", - "@com_google_googletest//:gtest", + "@google_benchmark//:benchmark_main", + "@googletest//:gtest", ], ) @@ -197,8 +197,8 @@ cc_test( deps = [ ":strings", "//absl/types:optional", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -221,8 +221,8 @@ cc_test( deps = [ ":has_ostream_operator", "//absl/types:optional", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -235,8 +235,8 @@ cc_test( deps = [ ":strings", "//absl/base:core_headers", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -248,8 +248,8 @@ cc_test( visibility = ["//visibility:private"], deps = [ ":strings", - "@com_github_google_benchmark//:benchmark_main", - "@com_google_googletest//:gtest", + "@google_benchmark//:benchmark_main", + "@googletest//:gtest", ], ) @@ -262,8 +262,8 @@ cc_test( copts = ABSL_TEST_COPTS, deps = [ "//absl/strings", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -279,8 +279,8 @@ cc_test( deps = [ ":strings", "//absl/base:core_headers", - "@com_github_google_benchmark//:benchmark_main", - "@com_google_googletest//:gtest", + "@google_benchmark//:benchmark_main", + "@googletest//:gtest", ], ) @@ -296,8 +296,8 @@ cc_test( deps = [ ":strings", "//absl/base:core_headers", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -312,8 +312,8 @@ cc_test( deps = [ ":internal", "//absl/base:core_headers", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -326,8 +326,8 @@ cc_test( deps = [ ":strings", "//absl/meta:type_traits", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -342,8 +342,8 @@ cc_test( ":strings", "//absl/base:core_headers", "//absl/base:raw_logging_internal", - "@com_github_google_benchmark//:benchmark_main", - "@com_google_googletest//:gtest", + "@google_benchmark//:benchmark_main", + "@googletest//:gtest", ], ) @@ -359,8 +359,8 @@ cc_test( "//absl/base:core_headers", "//absl/base:dynamic_annotations", "//absl/meta:type_traits", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -378,8 +378,8 @@ cc_test( deps = [ ":charset", "//absl/log:check", - "@com_github_google_benchmark//:benchmark_main", - "@com_google_googletest//:gtest", + "@google_benchmark//:benchmark_main", + "@googletest//:gtest", ], ) @@ -405,8 +405,8 @@ cc_test( deps = [ ":charset", ":strings", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -441,15 +441,13 @@ cc_library( "//absl/base:config", "//absl/base:core_headers", "//absl/base:endian", + "//absl/base:nullability", "//absl/base:raw_logging_internal", - "//absl/base:throw_delegate", "//absl/container:compressed_tuple", "//absl/container:container_memory", "//absl/container:inlined_vector", - "//absl/container:layout", "//absl/crc:crc_cord_state", "//absl/functional:function_ref", - "//absl/meta:type_traits", "//absl/types:span", ], ) @@ -465,8 +463,8 @@ cc_test( ":cord_rep_test_util", ":strings", "//absl/base:config", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -484,8 +482,8 @@ cc_test( "//absl/base:config", "//absl/base:raw_logging_internal", "//absl/cleanup", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -501,8 +499,8 @@ cc_test( ":strings", "//absl/base:config", "//absl/base:raw_logging_internal", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -519,8 +517,8 @@ cc_test( ":strings", "//absl/base:config", "//absl/base:raw_logging_internal", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -535,8 +533,8 @@ cc_test( ":cord_rep_test_util", "//absl/base:config", "//absl/crc:crc_cord_state", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -559,8 +557,8 @@ cc_test( "//absl/base:config", "//absl/base:core_headers", "//absl/synchronization", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -580,14 +578,11 @@ cc_library( linkopts = ABSL_DEFAULT_LINKOPTS, deps = [ ":cord_internal", - ":cordz_functions", ":cordz_info", - ":cordz_statistics", ":cordz_update_scope", ":cordz_update_tracker", ":internal", ":strings", - "//absl/base", "//absl/base:config", "//absl/base:core_headers", "//absl/base:endian", @@ -677,8 +672,8 @@ cc_test( ":cordz_update_scope", ":cordz_update_tracker", "//absl/base:config", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -738,8 +733,8 @@ cc_test( ":cordz_functions", ":cordz_test_helpers", "//absl/base:config", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -757,8 +752,8 @@ cc_test( "//absl/synchronization", "//absl/synchronization:thread_pool", "//absl/time", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -779,8 +774,8 @@ cc_test( "//absl/debugging:stacktrace", "//absl/debugging:symbolize", "//absl/types:span", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -801,8 +796,8 @@ cc_test( "//absl/crc:crc_cord_state", "//absl/synchronization", "//absl/synchronization:thread_pool", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -823,8 +818,8 @@ cc_test( "//absl/synchronization", "//absl/synchronization:thread_pool", "//absl/time", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -875,7 +870,7 @@ cc_library( "//absl/base:config", "//absl/base:core_headers", "//absl/base:nullability", - "@com_google_googletest//:gtest", + "@googletest//:gtest", ], ) @@ -892,8 +887,8 @@ cc_test( ":string_view", "//absl/base:config", "//absl/types:span", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -927,8 +922,8 @@ cc_test( "//absl/random", "//absl/types:compare", "//absl/types:optional", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -961,8 +956,8 @@ cc_test( "//absl/base:config", "//absl/base:core_headers", "//absl/base:raw_logging_internal", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -975,8 +970,8 @@ cc_test( deps = [ ":strings", "//absl/base:core_headers", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -989,8 +984,8 @@ cc_test( deps = [ ":strings", "//absl/base:raw_logging_internal", - "@com_github_google_benchmark//:benchmark_main", - "@com_google_googletest//:gtest", + "@google_benchmark//:benchmark_main", + "@googletest//:gtest", ], ) @@ -1002,8 +997,8 @@ cc_test( visibility = ["//visibility:private"], deps = [ ":strings", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -1019,8 +1014,8 @@ cc_test( "//absl/container:btree", "//absl/container:flat_hash_map", "//absl/container:node_hash_map", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -1033,8 +1028,8 @@ cc_test( deps = [ ":strings", "//absl/base:raw_logging_internal", - "@com_github_google_benchmark//:benchmark_main", - "@com_google_googletest//:gtest", + "@google_benchmark//:benchmark_main", + "@googletest//:gtest", ], ) @@ -1046,8 +1041,8 @@ cc_test( visibility = ["//visibility:private"], deps = [ ":internal", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -1059,8 +1054,8 @@ cc_test( visibility = ["//visibility:private"], deps = [ ":internal", - "@com_github_google_benchmark//:benchmark_main", - "@com_google_googletest//:gtest", + "@google_benchmark//:benchmark_main", + "@googletest//:gtest", ], ) @@ -1076,8 +1071,8 @@ cc_test( deps = [ "//absl/base:core_headers", "//absl/meta:type_traits", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -1091,8 +1086,8 @@ cc_test( ":strings", "//absl/base:core_headers", "//absl/memory", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -1104,8 +1099,8 @@ cc_test( visibility = ["//visibility:private"], deps = [ ":strings", - "@com_github_google_benchmark//:benchmark_main", - "@com_google_googletest//:gtest", + "@google_benchmark//:benchmark_main", + "@googletest//:gtest", ], ) @@ -1119,8 +1114,8 @@ cc_test( ":str_format", ":strings", "//absl/base:config", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -1134,8 +1129,8 @@ cc_test( ":strings", "//absl/random", "//absl/random:distributions", - "@com_github_google_benchmark//:benchmark_main", - "@com_google_googletest//:gtest", + "@google_benchmark//:benchmark_main", + "@googletest//:gtest", ], ) @@ -1157,8 +1152,8 @@ cc_test( "//absl/numeric:int128", "//absl/random", "//absl/random:distributions", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -1173,8 +1168,8 @@ cc_test( "//absl/base:raw_logging_internal", "//absl/random", "//absl/random:distributions", - "@com_github_google_benchmark//:benchmark_main", - "@com_google_googletest//:gtest", + "@google_benchmark//:benchmark_main", + "@googletest//:gtest", ], ) @@ -1186,8 +1181,8 @@ cc_test( visibility = ["//visibility:private"], deps = [ ":strings", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -1199,8 +1194,8 @@ cc_test( ":pow10_helper", ":str_format", ":strings", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -1215,8 +1210,8 @@ cc_test( ":strings", "//absl/base:config", "//absl/log:check", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -1231,8 +1226,8 @@ cc_test( deps = [ ":strings", "//absl/base:config", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -1246,8 +1241,8 @@ cc_test( ], deps = [ ":strings", - "@com_github_google_benchmark//:benchmark_main", - "@com_google_googletest//:gtest", + "@google_benchmark//:benchmark_main", + "@googletest//:gtest", ], ) @@ -1320,8 +1315,8 @@ cc_test( "//absl/base:config", "//absl/base:core_headers", "//absl/types:span", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -1336,8 +1331,8 @@ cc_test( ":str_format", ":str_format_internal", ":strings", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -1350,8 +1345,8 @@ cc_test( ":str_format", ":str_format_internal", "//absl/base:config", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -1362,8 +1357,8 @@ cc_test( visibility = ["//visibility:private"], deps = [ ":str_format_internal", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -1374,8 +1369,8 @@ cc_test( visibility = ["//visibility:private"], deps = [ ":str_format", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -1397,8 +1392,8 @@ cc_test( "//absl/numeric:int128", "//absl/types:optional", "//absl/types:span", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -1410,8 +1405,8 @@ cc_test( deps = [ ":cord", ":str_format_internal", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -1425,8 +1420,8 @@ cc_test( ":string_view", "//absl/base:config", "//absl/base:core_headers", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -1448,8 +1443,8 @@ cc_test( deps = [ ":pow10_helper", ":str_format", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -1476,7 +1471,7 @@ cc_test( deps = [ ":str_format", ":strings", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/strings/BUILD.gn b/naiveproxy/src/third_party/abseil-cpp/absl/strings/BUILD.gn index 4960c81d2f..0486e3c16e 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/strings/BUILD.gn +++ b/naiveproxy/src/third_party/abseil-cpp/absl/strings/BUILD.gn @@ -276,15 +276,13 @@ absl_source_set("cord_internal") { "//third_party/abseil-cpp/absl/base:config", "//third_party/abseil-cpp/absl/base:core_headers", "//third_party/abseil-cpp/absl/base:endian", + "//third_party/abseil-cpp/absl/base:nullability", "//third_party/abseil-cpp/absl/base:raw_logging_internal", - "//third_party/abseil-cpp/absl/base:throw_delegate", "//third_party/abseil-cpp/absl/container:compressed_tuple", "//third_party/abseil-cpp/absl/container:container_memory", "//third_party/abseil-cpp/absl/container:inlined_vector", - "//third_party/abseil-cpp/absl/container:layout", "//third_party/abseil-cpp/absl/crc:crc_cord_state", "//third_party/abseil-cpp/absl/functional:function_ref", - "//third_party/abseil-cpp/absl/meta:type_traits", "//third_party/abseil-cpp/absl/types:span", ] } @@ -363,15 +361,12 @@ absl_source_set("cord") { ] deps = [ ":cord_internal", - ":cordz_functions", ":cordz_info", - ":cordz_statistics", ":cordz_update_scope", ":cordz_update_tracker", ":internal", ":string_view", ":strings", - "//third_party/abseil-cpp/absl/base", "//third_party/abseil-cpp/absl/base:config", "//third_party/abseil-cpp/absl/base:core_headers", "//third_party/abseil-cpp/absl/base:endian", diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/strings/ascii.cc b/naiveproxy/src/third_party/abseil-cpp/absl/strings/ascii.cc index a38a612a33..d15e4249ec 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/strings/ascii.cc +++ b/naiveproxy/src/third_party/abseil-cpp/absl/strings/ascii.cc @@ -19,10 +19,8 @@ #include #include -#include "absl/base/attributes.h" #include "absl/base/config.h" #include "absl/base/nullability.h" -#include "absl/base/optimization.h" namespace absl { ABSL_NAMESPACE_BEGIN @@ -177,11 +175,17 @@ constexpr bool AsciiInAZRange(unsigned char c) { return static_cast(u) < threshold; } -// Force-inline so the compiler won't merge the short and long implementations. -// `src` may be null iff `size` is zero. template -ABSL_ATTRIBUTE_ALWAYS_INLINE inline constexpr void AsciiStrCaseFoldImpl( - absl::Nonnull dst, absl::Nullable src, size_t size) { +constexpr bool AsciiInAZRangeNaive(unsigned char c) { + constexpr unsigned char a = (ToUpper ? 'a' : 'A'); + constexpr unsigned char z = (ToUpper ? 'z' : 'Z'); + return a <= c && c <= z; +} + +template +constexpr void AsciiStrCaseFoldImpl(absl::Nonnull dst, + absl::Nullable src, + size_t size) { // The upper- and lowercase versions of ASCII characters differ by only 1 bit. // When we need to flip the case, we can xor with this bit to achieve the // desired result. Note that the choice of 'a' and 'A' here is arbitrary. We @@ -191,31 +195,26 @@ ABSL_ATTRIBUTE_ALWAYS_INLINE inline constexpr void AsciiStrCaseFoldImpl( for (size_t i = 0; i < size; ++i) { unsigned char v = static_cast(src[i]); - v ^= AsciiInAZRange(v) ? kAsciiCaseBitFlip : 0; + if ABSL_INTERNAL_CONSTEXPR_SINCE_CXX17 (Naive) { + v ^= AsciiInAZRangeNaive(v) ? kAsciiCaseBitFlip : 0; + } else { + v ^= AsciiInAZRange(v) ? kAsciiCaseBitFlip : 0; + } dst[i] = static_cast(v); } } -// The string size threshold for starting using the long string version. -constexpr size_t kCaseFoldThreshold = 16; - -// No-inline so the compiler won't merge the short and long implementations. -// `src` may be null iff `size` is zero. -template -ABSL_ATTRIBUTE_NOINLINE constexpr void AsciiStrCaseFoldLong( - absl::Nonnull dst, absl::Nullable src, size_t size) { - ABSL_ASSUME(size >= kCaseFoldThreshold); - AsciiStrCaseFoldImpl(dst, src, size); -} - // Splitting to short and long strings to allow vectorization decisions // to be made separately in the long and short cases. +// Using slightly different implementations so the compiler won't optimize them +// into the same code (the non-naive version is needed for SIMD, so for short +// strings it's not important). // `src` may be null iff `size` is zero. template constexpr void AsciiStrCaseFold(absl::Nonnull dst, absl::Nullable src, size_t size) { - size < kCaseFoldThreshold ? AsciiStrCaseFoldImpl(dst, src, size) - : AsciiStrCaseFoldLong(dst, src, size); + size < 16 ? AsciiStrCaseFoldImpl(dst, src, size) + : AsciiStrCaseFoldImpl(dst, src, size); } void AsciiStrToLower(absl::Nonnull dst, absl::Nullable src, diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/strings/ascii_benchmark.cc b/naiveproxy/src/third_party/abseil-cpp/absl/strings/ascii_benchmark.cc index 0eff801aec..e4d0196269 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/strings/ascii_benchmark.cc +++ b/naiveproxy/src/third_party/abseil-cpp/absl/strings/ascii_benchmark.cc @@ -102,7 +102,7 @@ BENCHMARK_TEMPLATE(BM_Ascii, std::toupper); BENCHMARK_TEMPLATE(BM_Ascii, absl::ascii_toupper); static void BM_StrToLower(benchmark::State& state) { - const int size = state.range(0); + const size_t size = static_cast(state.range(0)); std::string s(size, 'X'); for (auto _ : state) { benchmark::DoNotOptimize(s); @@ -116,7 +116,7 @@ BENCHMARK(BM_StrToLower) ->Range(64, 1 << 26); static void BM_StrToUpper(benchmark::State& state) { - const int size = state.range(0); + const size_t size = static_cast(state.range(0)); std::string s(size, 'x'); for (auto _ : state) { benchmark::DoNotOptimize(s); diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/strings/charconv.cc b/naiveproxy/src/third_party/abseil-cpp/absl/strings/charconv.cc index 0c9227f849..66c12cc73d 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/strings/charconv.cc +++ b/naiveproxy/src/third_party/abseil-cpp/absl/strings/charconv.cc @@ -359,16 +359,13 @@ template bool HandleEdgeCase(const strings_internal::ParsedFloat& input, bool negative, absl::Nonnull value) { if (input.type == strings_internal::FloatType::kNan) { - // A bug in both clang < 7 and gcc would cause the compiler to optimize - // away the buffer we are building below. Declaring the buffer volatile - // avoids the issue, and has no measurable performance impact in - // microbenchmarks. + // A bug in gcc would cause the compiler to optimize away the buffer we are + // building below. Declaring the buffer volatile avoids the issue, and has + // no measurable performance impact in microbenchmarks. // - // https://bugs.llvm.org/show_bug.cgi?id=37778 // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86113 constexpr ptrdiff_t kNanBufferSize = 128; -#if (defined(__GNUC__) && !defined(__clang__)) || \ - (defined(__clang__) && __clang_major__ < 7) +#if (defined(__GNUC__) && !defined(__clang__)) volatile char n_char_sequence[kNanBufferSize]; #else char n_char_sequence[kNanBufferSize]; diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/strings/cord.h b/naiveproxy/src/third_party/abseil-cpp/absl/strings/cord.h index 1d8fcd3738..1f8aafb587 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/strings/cord.h +++ b/naiveproxy/src/third_party/abseil-cpp/absl/strings/cord.h @@ -61,6 +61,7 @@ #define ABSL_STRINGS_CORD_H_ #include +#include #include #include #include @@ -68,16 +69,14 @@ #include #include #include +#include #include "absl/base/attributes.h" #include "absl/base/config.h" #include "absl/base/internal/endian.h" -#include "absl/base/internal/per_thread_tls.h" #include "absl/base/macros.h" #include "absl/base/nullability.h" #include "absl/base/optimization.h" -#include "absl/base/port.h" -#include "absl/container/inlined_vector.h" #include "absl/crc/internal/crc_cord_state.h" #include "absl/functional/function_ref.h" #include "absl/meta/type_traits.h" @@ -88,12 +87,10 @@ #include "absl/strings/internal/cord_rep_btree.h" #include "absl/strings/internal/cord_rep_btree_reader.h" #include "absl/strings/internal/cord_rep_crc.h" -#include "absl/strings/internal/cordz_functions.h" +#include "absl/strings/internal/cord_rep_flat.h" #include "absl/strings/internal/cordz_info.h" -#include "absl/strings/internal/cordz_statistics.h" #include "absl/strings/internal/cordz_update_scope.h" #include "absl/strings/internal/cordz_update_tracker.h" -#include "absl/strings/internal/resize_uninitialized.h" #include "absl/strings/internal/string_constant.h" #include "absl/strings/string_view.h" #include "absl/types/compare.h" @@ -978,15 +975,9 @@ class Cord { bool IsSame(const InlineRep& other) const { return data_ == other.data_; } + // Copies the inline contents into `dst`. Assumes the cord is not empty. void CopyTo(absl::Nonnull dst) const { - // memcpy is much faster when operating on a known size. On most supported - // platforms, the small string optimization is large enough that resizing - // to 15 bytes does not cause a memory allocation. - absl::strings_internal::STLStringResizeUninitialized(dst, kMaxInline); - data_.copy_max_inline_to(&(*dst)[0]); - // erase is faster than resize because the logic for memory allocation is - // not needed. - dst->erase(inline_size()); + data_.CopyInlineToString(dst); } // Copies the inline contents into `dst`. Assumes the cord is not empty. diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h b/naiveproxy/src/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h index cb29767663..2c7a336646 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +++ b/naiveproxy/src/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h @@ -17,7 +17,7 @@ #include #include -#include +#include #include #include "absl/base/config.h" diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/strings/internal/cord_internal.h b/naiveproxy/src/third_party/abseil-cpp/absl/strings/internal/cord_internal.h index d33b09e6ef..b68ec2bbc5 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +++ b/naiveproxy/src/third_party/abseil-cpp/absl/strings/internal/cord_internal.h @@ -19,16 +19,18 @@ #include #include #include -#include +#include +#include #include "absl/base/attributes.h" #include "absl/base/config.h" #include "absl/base/internal/endian.h" #include "absl/base/internal/invoke.h" +#include "absl/base/macros.h" +#include "absl/base/nullability.h" #include "absl/base/optimization.h" #include "absl/container/internal/compressed_tuple.h" #include "absl/container/internal/container_memory.h" -#include "absl/meta/type_traits.h" #include "absl/strings/string_view.h" // We can only add poisoning if we can detect consteval executions. @@ -635,6 +637,19 @@ class InlineData { poison(); } + void CopyInlineToString(absl::Nonnull dst) const { + assert(!is_tree()); + // As Cord can store only 15 bytes it is smaller than std::string's + // small string optimization buffer size. Therefore we will always trigger + // the fast assign short path. + // + // Copying with a size equal to the maximum allows more efficient, wider + // stores to be used and no branching. + dst->assign(rep_.SanitizerSafeCopy().as_chars(), kMaxInline); + // After the copy we then change the size and put in a 0 byte. + dst->erase(inline_size()); + } + void copy_max_inline_to(char* dst) const { assert(!is_tree()); memcpy(dst, rep_.SanitizerSafeCopy().as_chars(), kMaxInline); diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/strings/string_view.h b/naiveproxy/src/third_party/abseil-cpp/absl/strings/string_view.h index c87602a6a8..b461478f14 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/strings/string_view.h +++ b/naiveproxy/src/third_party/abseil-cpp/absl/strings/string_view.h @@ -292,7 +292,8 @@ class ABSL_ATTRIBUTE_VIEW string_view { // Returns the ith element of the `string_view` using the array operator. // Note that this operator does not perform any bounds checking. constexpr const_reference operator[](size_type i) const { - return ABSL_HARDENING_ASSERT(i < size()), ptr_[i]; + ABSL_HARDENING_ASSERT(i < size()); + return ptr_[i]; } // string_view::at() @@ -311,14 +312,16 @@ class ABSL_ATTRIBUTE_VIEW string_view { // // Returns the first element of a `string_view`. constexpr const_reference front() const { - return ABSL_HARDENING_ASSERT(!empty()), ptr_[0]; + ABSL_HARDENING_ASSERT(!empty()); + return ptr_[0]; } // string_view::back() // // Returns the last element of a `string_view`. constexpr const_reference back() const { - return ABSL_HARDENING_ASSERT(!empty()), ptr_[size() - 1]; + ABSL_HARDENING_ASSERT(!empty()); + return ptr_[size() - 1]; } // string_view::data() @@ -664,7 +667,8 @@ class ABSL_ATTRIBUTE_VIEW string_view { (std::numeric_limits::max)(); static constexpr size_type CheckLengthInternal(size_type len) { - return ABSL_HARDENING_ASSERT(len <= kMaxSize), len; + ABSL_HARDENING_ASSERT(len <= kMaxSize); + return len; } static constexpr size_type StrlenInternal(absl::Nonnull str) { diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/strings/strip.h b/naiveproxy/src/third_party/abseil-cpp/absl/strings/strip.h index 4a8c5e7751..8a55375169 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/strings/strip.h +++ b/naiveproxy/src/third_party/abseil-cpp/absl/strings/strip.h @@ -24,6 +24,7 @@ #include #include +#include "absl/base/attributes.h" #include "absl/base/macros.h" #include "absl/base/nullability.h" #include "absl/strings/ascii.h" @@ -74,7 +75,8 @@ inline constexpr bool ConsumeSuffix(absl::Nonnull str, // but leaving the original string intact. If the prefix does not match at the // start of the string, returns the original string instead. ABSL_MUST_USE_RESULT inline constexpr absl::string_view StripPrefix( - absl::string_view str, absl::string_view prefix) { + absl::string_view str ABSL_ATTRIBUTE_LIFETIME_BOUND, + absl::string_view prefix) { if (absl::StartsWith(str, prefix)) str.remove_prefix(prefix.size()); return str; } @@ -85,7 +87,8 @@ ABSL_MUST_USE_RESULT inline constexpr absl::string_view StripPrefix( // but leaving the original string intact. If the suffix does not match at the // end of the string, returns the original string instead. ABSL_MUST_USE_RESULT inline constexpr absl::string_view StripSuffix( - absl::string_view str, absl::string_view suffix) { + absl::string_view str ABSL_ATTRIBUTE_LIFETIME_BOUND, + absl::string_view suffix) { if (absl::EndsWith(str, suffix)) str.remove_suffix(suffix.size()); return str; } diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/synchronization/BUILD.bazel b/naiveproxy/src/third_party/abseil-cpp/absl/synchronization/BUILD.bazel index 46a23f3bb2..867e9866e2 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/synchronization/BUILD.bazel +++ b/naiveproxy/src/third_party/abseil-cpp/absl/synchronization/BUILD.bazel @@ -85,8 +85,8 @@ cc_test( "//absl/base:config", "//absl/random", "//absl/time", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -124,9 +124,9 @@ cc_library( ], copts = ABSL_DEFAULT_COPTS, linkopts = select({ - "//absl:msvc_compiler": [], - "//absl:clang-cl_compiler": [], - "//absl:wasm": [], + "@rules_cc//cc/compiler:msvc-cl": [], + "@rules_cc//cc/compiler:clang-cl": [], + "@rules_cc//cc/compiler:emscripten": [], "//conditions:default": ["-pthread"], }) + ABSL_DEFAULT_LINKOPTS, visibility = ["//visibility:public"], @@ -162,8 +162,8 @@ cc_test( deps = [ ":synchronization", "//absl/time", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -182,8 +182,8 @@ cc_test( "//absl/base:core_headers", "//absl/base:tracing_internal", "//absl/time", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -198,7 +198,7 @@ cc_binary( ":synchronization", ":thread_pool", "//absl/base:no_destructor", - "@com_github_google_benchmark//:benchmark_main", + "@google_benchmark//:benchmark_main", ], ) @@ -213,8 +213,8 @@ cc_test( "//absl/base:core_headers", "//absl/log", "//absl/log:check", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -229,8 +229,8 @@ cc_test( deps = [ ":graphcycles_internal", "//absl/base:raw_logging_internal", - "@com_github_google_benchmark//:benchmark_main", - "@com_google_googletest//:gtest", + "@google_benchmark//:benchmark_main", + "@googletest//:gtest", ], ) @@ -267,8 +267,8 @@ cc_test( "//absl/log:check", "//absl/memory", "//absl/time", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -280,8 +280,8 @@ cc_test( deps = [ ":synchronization", "//absl/base:config", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -299,7 +299,7 @@ cc_library( "//absl/base", "//absl/base:config", "//absl/base:no_destructor", - "@com_github_google_benchmark//:benchmark_main", + "@google_benchmark//:benchmark_main", ], alwayslink = 1, ) @@ -328,8 +328,8 @@ cc_test( "//absl/base:core_headers", "//absl/base:tracing_internal", "//absl/time", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -347,7 +347,7 @@ cc_library( "//absl/base:config", "//absl/strings", "//absl/time", - "@com_google_googletest//:gtest", + "@googletest//:gtest", ], alwayslink = 1, ) @@ -365,7 +365,7 @@ cc_test( ":synchronization", "//absl/strings", "//absl/time", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest_main", ], ) @@ -382,8 +382,8 @@ cc_test( "//absl/base:config", "//absl/random", "//absl/time", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/time/BUILD.bazel b/naiveproxy/src/third_party/abseil-cpp/absl/time/BUILD.bazel index 05f1f2f2da..474c18f7b8 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/time/BUILD.bazel +++ b/naiveproxy/src/third_party/abseil-cpp/absl/time/BUILD.bazel @@ -90,7 +90,6 @@ cc_test( ], copts = ABSL_TEST_COPTS, data = ["//absl/time/internal/cctz:zoneinfo"], - env = {"TZDIR": "absl/time/internal/cctz/testdata/zoneinfo"}, linkopts = ABSL_DEFAULT_LINKOPTS, deps = [ ":test_util", @@ -100,8 +99,8 @@ cc_test( "//absl/numeric:int128", "//absl/strings:str_format", "//absl/time/internal/cctz:time_zone", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -125,8 +124,8 @@ cc_test( ":time", "//absl/flags:flag", "//absl/flags:reflection", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -141,7 +140,6 @@ cc_test( ], copts = ABSL_TEST_COPTS, data = ["//absl/time/internal/cctz:zoneinfo"], - env = {"TZDIR": "absl/time/internal/cctz/testdata/zoneinfo"}, linkopts = ABSL_DEFAULT_LINKOPTS, tags = [ "benchmark", @@ -153,6 +151,6 @@ cc_test( "//absl/base:core_headers", "//absl/flags:flag", "//absl/hash", - "@com_github_google_benchmark//:benchmark_main", + "@google_benchmark//:benchmark_main", ], ) diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/time/civil_time.cc b/naiveproxy/src/third_party/abseil-cpp/absl/time/civil_time.cc index 65df39d731..1773366be0 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/time/civil_time.cc +++ b/naiveproxy/src/third_party/abseil-cpp/absl/time/civil_time.cc @@ -14,6 +14,7 @@ #include "absl/time/civil_time.h" +#include #include #include #include diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/BUILD.bazel b/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/BUILD.bazel index fce71f385e..da30a0f11b 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/BUILD.bazel +++ b/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/BUILD.bazel @@ -12,6 +12,8 @@ # See the License for the specific language governing permissions and # limitations under the License. +load("//absl:copts/configure_copts.bzl", "ABSL_DEFAULT_COPTS", "ABSL_DEFAULT_LINKOPTS", "ABSL_TEST_COPTS") + package(features = [ "header_modules", "layering_check", @@ -28,6 +30,8 @@ cc_library( hdrs = [ "include/cctz/civil_time.h", ], + copts = ABSL_DEFAULT_COPTS, + linkopts = ABSL_DEFAULT_LINKOPTS, textual_hdrs = ["include/cctz/civil_time_detail.h"], visibility = ["//visibility:public"], deps = ["//absl/base:config"], @@ -57,7 +61,8 @@ cc_library( "include/cctz/time_zone.h", "include/cctz/zone_info_source.h", ], - linkopts = select({ + copts = ABSL_DEFAULT_COPTS, + linkopts = ABSL_DEFAULT_LINKOPTS + select({ "@platforms//os:osx": ["-Wl,-framework,CoreFoundation"], "@platforms//os:ios": ["-Wl,-framework,CoreFoundation"], "//conditions:default": [], @@ -84,11 +89,13 @@ cc_test( name = "civil_time_test", size = "small", srcs = ["src/civil_time_test.cc"], + copts = ABSL_TEST_COPTS, + linkopts = ABSL_DEFAULT_LINKOPTS, deps = [ ":civil_time", "//absl/base:config", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -96,8 +103,9 @@ cc_test( name = "time_zone_format_test", size = "small", srcs = ["src/time_zone_format_test.cc"], + copts = ABSL_TEST_COPTS, data = [":zoneinfo"], - env = {"TZDIR": "absl/time/internal/cctz/testdata/zoneinfo"}, + linkopts = ABSL_DEFAULT_LINKOPTS, tags = [ "no_test_android_arm", "no_test_android_arm64", @@ -108,8 +116,8 @@ cc_test( ":civil_time", ":time_zone", "//absl/base:config", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -118,8 +126,9 @@ cc_test( size = "small", timeout = "moderate", srcs = ["src/time_zone_lookup_test.cc"], + copts = ABSL_TEST_COPTS, data = [":zoneinfo"], - env = {"TZDIR": "absl/time/internal/cctz/testdata/zoneinfo"}, + linkopts = ABSL_DEFAULT_LINKOPTS, tags = [ "no_test_android_arm", "no_test_android_arm64", @@ -130,8 +139,8 @@ cc_test( ":civil_time", ":time_zone", "//absl/base:config", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -146,13 +155,15 @@ cc_test( "src/time_zone_info.h", "src/tzfile.h", ], + copts = ABSL_TEST_COPTS, + linkopts = ABSL_DEFAULT_LINKOPTS, linkstatic = 1, tags = ["benchmark"], deps = [ ":civil_time", ":time_zone", "//absl/base:config", - "@com_github_google_benchmark//:benchmark_main", + "@google_benchmark//:benchmark_main", ], ) diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/cctz_benchmark.cc b/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/cctz_benchmark.cc index 11f9ba6c65..4a5ac1ba95 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/cctz_benchmark.cc +++ b/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/cctz_benchmark.cc @@ -23,7 +23,7 @@ #include "benchmark/benchmark.h" #include "absl/time/internal/cctz/include/cctz/civil_time.h" #include "absl/time/internal/cctz/include/cctz/time_zone.h" -#include "time_zone_impl.h" +#include "absl/time/internal/cctz/src/time_zone_impl.h" namespace { diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc b/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc index e09654eaf3..ed7f9cb97a 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +++ b/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "time_zone_fixed.h" +#include "absl/time/internal/cctz/src/time_zone_fixed.h" #include #include diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc b/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc index e7e30a2fb7..0e5f32f14a 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +++ b/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc @@ -46,7 +46,7 @@ #endif #include "absl/time/internal/cctz/include/cctz/civil_time.h" -#include "time_zone_if.h" +#include "absl/time/internal/cctz/src/time_zone_if.h" namespace absl { ABSL_NAMESPACE_BEGIN diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc b/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc index 0e65cd9e73..09f83e82f7 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +++ b/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "time_zone_if.h" +#include "absl/time/internal/cctz/src/time_zone_if.h" #include "absl/base/config.h" -#include "time_zone_info.h" -#include "time_zone_libc.h" +#include "absl/time/internal/cctz/src/time_zone_info.h" +#include "absl/time/internal/cctz/src/time_zone_libc.h" namespace absl { ABSL_NAMESPACE_BEGIN diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc b/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc index aadbb77da2..5f2f49e424 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +++ b/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "time_zone_impl.h" +#include "absl/time/internal/cctz/src/time_zone_impl.h" #include #include @@ -22,7 +22,7 @@ #include #include "absl/base/config.h" -#include "time_zone_fixed.h" +#include "absl/time/internal/cctz/src/time_zone_fixed.h" namespace absl { ABSL_NAMESPACE_BEGIN diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h b/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h index 8308a3b49e..da3aec525c 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +++ b/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h @@ -21,8 +21,8 @@ #include "absl/base/config.h" #include "absl/time/internal/cctz/include/cctz/civil_time.h" #include "absl/time/internal/cctz/include/cctz/time_zone.h" -#include "time_zone_if.h" -#include "time_zone_info.h" +#include "absl/time/internal/cctz/src/time_zone_if.h" +#include "absl/time/internal/cctz/src/time_zone_info.h" namespace absl { ABSL_NAMESPACE_BEGIN diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc b/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc index b7178a6b67..f8484c9050 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +++ b/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc @@ -30,7 +30,7 @@ // Note that we assume the proleptic Gregorian calendar and 60-second // minutes throughout. -#include "time_zone_info.h" +#include "absl/time/internal/cctz/src/time_zone_info.h" #include #include @@ -49,8 +49,8 @@ #include "absl/base/config.h" #include "absl/time/internal/cctz/include/cctz/civil_time.h" -#include "time_zone_fixed.h" -#include "time_zone_posix.h" +#include "absl/time/internal/cctz/src/time_zone_fixed.h" +#include "absl/time/internal/cctz/src/time_zone_posix.h" namespace absl { ABSL_NAMESPACE_BEGIN diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h b/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h index 689df6f9c0..efe2f9cbfb 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +++ b/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h @@ -26,8 +26,8 @@ #include "absl/time/internal/cctz/include/cctz/civil_time.h" #include "absl/time/internal/cctz/include/cctz/time_zone.h" #include "absl/time/internal/cctz/include/cctz/zone_info_source.h" -#include "time_zone_if.h" -#include "tzfile.h" +#include "absl/time/internal/cctz/src/time_zone_if.h" +#include "absl/time/internal/cctz/src/tzfile.h" namespace absl { ABSL_NAMESPACE_BEGIN diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc b/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc index b509402783..362da1ab58 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +++ b/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc @@ -16,7 +16,7 @@ #define _CRT_SECURE_NO_WARNINGS 1 #endif -#include "time_zone_libc.h" +#include "absl/time/internal/cctz/src/time_zone_libc.h" #include #include diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h b/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h index ae2107376f..f1ed5cd08f 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +++ b/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h @@ -19,7 +19,7 @@ #include #include "absl/base/config.h" -#include "time_zone_if.h" +#include "absl/time/internal/cctz/src/time_zone_if.h" namespace absl { ABSL_NAMESPACE_BEGIN diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc b/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc index 989a564054..80f73199ff 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +++ b/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc @@ -55,8 +55,8 @@ #include #include -#include "time_zone_fixed.h" -#include "time_zone_impl.h" +#include "absl/time/internal/cctz/src/time_zone_fixed.h" +#include "absl/time/internal/cctz/src/time_zone_impl.h" namespace absl { ABSL_NAMESPACE_BEGIN diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc b/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc index 5cdd09e89d..efea080470 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +++ b/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "time_zone_posix.h" +#include "absl/time/internal/cctz/src/time_zone_posix.h" #include #include diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h b/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h index 541d6185ab..628143894a 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +++ b/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h @@ -25,7 +25,7 @@ #define TZDEFRULES "posixrules" #endif /* !defined TZDEFRULES */ -/* See Internet RFC 8536 for more details about the following format. */ +/* See Internet RFC 9636 for more details about the following format. */ /* ** Each file begins with. . . diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/testdata/version b/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/testdata/version index 699e50d4d3..0846b7f265 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/testdata/version +++ b/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/testdata/version @@ -1 +1 @@ -2024b +2025a diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Asuncion b/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Asuncion index 6225036742..f056047f05 100644 Binary files a/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Asuncion and b/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Asuncion differ diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Manila b/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Manila index 3c3584e09a..145bb6fb16 100644 Binary files a/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Manila and b/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Manila differ diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab b/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab index 7726f39a09..5ded0565eb 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +++ b/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab @@ -183,7 +183,7 @@ IR +3540+05126 Asia/Tehran IT,SM,VA +4154+01229 Europe/Rome JM +175805-0764736 America/Jamaica JO +3157+03556 Asia/Amman -JP +353916+1394441 Asia/Tokyo +JP,AU +353916+1394441 Asia/Tokyo Eyre Bird Observatory KE,DJ,ER,ET,KM,MG,SO,TZ,UG,YT -0117+03649 Africa/Nairobi KG +4254+07436 Asia/Bishkek KI,MH,TV,UM,WF +0125+17300 Pacific/Tarawa Gilberts, Marshalls, Wake @@ -246,7 +246,7 @@ PF -0900-13930 Pacific/Marquesas Marquesas Islands PF -2308-13457 Pacific/Gambier Gambier Islands PG,AQ,FM -0930+14710 Pacific/Port_Moresby Papua New Guinea (most areas), Chuuk, Yap, Dumont d'Urville PG -0613+15534 Pacific/Bougainville Bougainville -PH +1435+12100 Asia/Manila +PH +143512+1205804 Asia/Manila PK +2452+06703 Asia/Karachi PL +5215+02100 Europe/Warsaw PM +4703-05620 America/Miquelon @@ -293,7 +293,7 @@ RU +6445+17729 Asia/Anadyr MSK+09 - Bering Sea SA,AQ,KW,YE +2438+04643 Asia/Riyadh Syowa SB,FM -0932+16012 Pacific/Guadalcanal Pohnpei SD +1536+03232 Africa/Khartoum -SG,MY +0117+10351 Asia/Singapore peninsular Malaysia +SG,AQ,MY +0117+10351 Asia/Singapore peninsular Malaysia, Concordia SR +0550-05510 America/Paramaribo SS +0451+03137 Africa/Juba ST +0020+00644 Africa/Sao_Tome diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab b/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab index 01f536b3ba..d2c1e48584 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +++ b/naiveproxy/src/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab @@ -97,9 +97,6 @@ XX +1828-06954 America/Santo_Domingo Atlantic Standard ("AST") - eastern Caribbe # -04/-03 (Chile DST) XX -3327-07040 America/Santiago most of Chile # -# -04/-03 (Paraguay DST) -XX -2516-05740 America/Asuncion Paraguay -# # -04/-03 - AST/ADT (North America DST) XX +4439-06336 America/Halifax Atlantic ("AST/ADT") - Canada; Bermuda # @@ -224,7 +221,7 @@ XX +1345+10031 Asia/Bangkok Russia; Indochina; Christmas Island XX -0610+10648 Asia/Jakarta Indonesia ("WIB") # # +08 -XX +0117+10351 Asia/Singapore Russia; Brunei; Malaysia; Singapore +XX +0117+10351 Asia/Singapore Russia; Brunei; Malaysia; Singapore; Concordia # # +08 - AWST XX -3157+11551 Australia/Perth Western Australia ("AWST") @@ -236,7 +233,7 @@ XX +3114+12128 Asia/Shanghai China ("CST") XX +2217+11409 Asia/Hong_Kong Hong Kong ("HKT") # # +08 - PHT -XX +1435+12100 Asia/Manila Philippines ("PHT") +XX +143512+1205804 Asia/Manila Philippines ("PHT") # # +08 - WITA XX -0507+11924 Asia/Makassar Indonesia ("WITA") @@ -248,7 +245,7 @@ XX -3143+12852 Australia/Eucla Eucla XX +5203+11328 Asia/Chita Russia; Palau; East Timor # # +09 - JST -XX +353916+1394441 Asia/Tokyo Japan ("JST") +XX +353916+1394441 Asia/Tokyo Japan ("JST"); Eyre Bird Observatory # # +09 - KST XX +3733+12658 Asia/Seoul Korea ("KST") diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/types/BUILD.bazel b/naiveproxy/src/third_party/abseil-cpp/absl/types/BUILD.bazel index 0ca42f0c52..532afa65d9 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/types/BUILD.bazel +++ b/naiveproxy/src/third_party/abseil-cpp/absl/types/BUILD.bazel @@ -86,8 +86,8 @@ cc_test( "//absl/base:exception_testing", "//absl/container:test_instance_tracker", "//absl/log", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -100,8 +100,8 @@ cc_test( ":any", "//absl/base:config", "//absl/base:exception_safety_testing", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -141,8 +141,8 @@ cc_test( "//absl/hash:hash_testing", "//absl/meta:type_traits", "//absl/strings", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -202,8 +202,8 @@ cc_test( "//absl/log", "//absl/meta:type_traits", "//absl/strings", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -218,8 +218,8 @@ cc_test( ":optional", "//absl/base:config", "//absl/base:exception_safety_testing", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -252,8 +252,8 @@ cc_test( "//absl/memory", "//absl/meta:type_traits", "//absl/strings", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -268,8 +268,8 @@ cc_test( deps = [ ":variant", "//absl/utility", - "@com_github_google_benchmark//:benchmark_main", - "@com_google_googletest//:gtest", + "@google_benchmark//:benchmark_main", + "@googletest//:gtest", ], ) @@ -286,8 +286,8 @@ cc_test( "//absl/base:config", "//absl/base:exception_safety_testing", "//absl/memory", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -313,7 +313,7 @@ cc_test( deps = [ ":compare", "//absl/base", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/types/optional.h b/naiveproxy/src/third_party/abseil-cpp/absl/types/optional.h index cf7249cbe3..0d8f8704c5 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/types/optional.h +++ b/naiveproxy/src/third_party/abseil-cpp/absl/types/optional.h @@ -429,14 +429,16 @@ class optional : private optional_internal::optional_data, // Accesses the underlying `T` value of an `optional`. If the `optional` is // empty, behavior is undefined. constexpr const T& operator*() const& ABSL_ATTRIBUTE_LIFETIME_BOUND { - return ABSL_HARDENING_ASSERT(this->engaged_), reference(); + ABSL_HARDENING_ASSERT(this->engaged_); + return reference(); } T& operator*() & ABSL_ATTRIBUTE_LIFETIME_BOUND { ABSL_HARDENING_ASSERT(this->engaged_); return reference(); } constexpr const T&& operator*() const&& ABSL_ATTRIBUTE_LIFETIME_BOUND { - return ABSL_HARDENING_ASSERT(this->engaged_), std::move(reference()); + ABSL_HARDENING_ASSERT(this->engaged_); + return std::move(reference()); } T&& operator*() && ABSL_ATTRIBUTE_LIFETIME_BOUND { ABSL_HARDENING_ASSERT(this->engaged_); diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/types/span.h b/naiveproxy/src/third_party/abseil-cpp/absl/types/span.h index 7d52588c69..33904a904b 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/types/span.h +++ b/naiveproxy/src/third_party/abseil-cpp/absl/types/span.h @@ -330,7 +330,8 @@ class ABSL_ATTRIBUTE_VIEW Span { // // Returns a reference to the i'th element of this span. constexpr reference operator[](size_type i) const noexcept { - return ABSL_HARDENING_ASSERT(i < size()), ptr_[i]; + ABSL_HARDENING_ASSERT(i < size()); + return ptr_[i]; } // Span::at() @@ -349,7 +350,8 @@ class ABSL_ATTRIBUTE_VIEW Span { // Returns a reference to the first element of this span. The span must not // be empty. constexpr reference front() const noexcept { - return ABSL_HARDENING_ASSERT(size() > 0), *data(); + ABSL_HARDENING_ASSERT(size() > 0); + return *data(); } // Span::back() @@ -357,7 +359,8 @@ class ABSL_ATTRIBUTE_VIEW Span { // Returns a reference to the last element of this span. The span must not // be empty. constexpr reference back() const noexcept { - return ABSL_HARDENING_ASSERT(size() > 0), *(data() + size() - 1); + ABSL_HARDENING_ASSERT(size() > 0); + return *(data() + size() - 1); } // Span::begin() @@ -727,8 +730,8 @@ constexpr Span MakeSpan(absl::Nullable ptr, size_t size) noexcept { template Span MakeSpan(absl::Nullable begin, absl::Nullable end) noexcept { - return ABSL_HARDENING_ASSERT(begin <= end), - Span(begin, static_cast(end - begin)); + ABSL_HARDENING_ASSERT(begin <= end); + return Span(begin, static_cast(end - begin)); } template @@ -775,7 +778,8 @@ constexpr Span MakeConstSpan(absl::Nullable ptr, template Span MakeConstSpan(absl::Nullable begin, absl::Nullable end) noexcept { - return ABSL_HARDENING_ASSERT(begin <= end), Span(begin, end - begin); + ABSL_HARDENING_ASSERT(begin <= end); + return Span(begin, end - begin); } template diff --git a/naiveproxy/src/third_party/abseil-cpp/absl/utility/BUILD.bazel b/naiveproxy/src/third_party/abseil-cpp/absl/utility/BUILD.bazel index 1c01fc12b7..0b6ce3b24e 100644 --- a/naiveproxy/src/third_party/abseil-cpp/absl/utility/BUILD.bazel +++ b/naiveproxy/src/third_party/abseil-cpp/absl/utility/BUILD.bazel @@ -56,8 +56,8 @@ cc_test( "//absl/base:core_headers", "//absl/memory", "//absl/strings", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) @@ -80,7 +80,7 @@ cc_test( linkopts = ABSL_DEFAULT_LINKOPTS, deps = [ ":if_constexpr", - "@com_google_googletest//:gtest", - "@com_google_googletest//:gtest_main", + "@googletest//:gtest", + "@googletest//:gtest_main", ], ) diff --git a/naiveproxy/src/third_party/abseil-cpp/ci/linux_docker_containers.sh b/naiveproxy/src/third_party/abseil-cpp/ci/linux_docker_containers.sh index fefef92828..cb4893a2f7 100644 --- a/naiveproxy/src/third_party/abseil-cpp/ci/linux_docker_containers.sh +++ b/naiveproxy/src/third_party/abseil-cpp/ci/linux_docker_containers.sh @@ -16,7 +16,7 @@ # Test scripts should source this file to get the identifiers. readonly LINUX_ALPINE_CONTAINER="gcr.io/google.com/absl-177019/alpine:20230612" -readonly LINUX_CLANG_LATEST_CONTAINER="gcr.io/google.com/absl-177019/linux_hybrid-latest:20240523" +readonly LINUX_CLANG_LATEST_CONTAINER="gcr.io/google.com/absl-177019/linux_hybrid-latest:20241218" readonly LINUX_ARM_CLANG_LATEST_CONTAINER="gcr.io/google.com/absl-177019/linux_arm_hybrid-latest:20231219" -readonly LINUX_GCC_LATEST_CONTAINER="gcr.io/google.com/absl-177019/linux_hybrid-latest:20240523" -readonly LINUX_GCC_FLOOR_CONTAINER="gcr.io/google.com/absl-177019/linux_gcc-floor:20240717" +readonly LINUX_GCC_LATEST_CONTAINER="gcr.io/google.com/absl-177019/linux_hybrid-latest:20241218" +readonly LINUX_GCC_FLOOR_CONTAINER="gcr.io/google.com/absl-177019/linux_gcc-floor:20241218" diff --git a/naiveproxy/src/third_party/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh b/naiveproxy/src/third_party/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh index b2d8c1dad6..ef1bb54d7f 100755 --- a/naiveproxy/src/third_party/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +++ b/naiveproxy/src/third_party/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh @@ -78,7 +78,6 @@ for std in ${STD}; do --copt="-DGTEST_REMOVE_LEGACY_TEST_CASEAPI_=1" \ --copt=-Werror \ --define="absl=1" \ - --distdir="/bazel-distdir" \ --enable_bzlmod=false \ --features=external_include_paths \ --keep_going \ diff --git a/naiveproxy/src/third_party/abseil-cpp/ci/macos_xcode_bazel.sh b/naiveproxy/src/third_party/abseil-cpp/ci/macos_xcode_bazel.sh index 32a8829e4c..fe4e2eb7e7 100755 --- a/naiveproxy/src/third_party/abseil-cpp/ci/macos_xcode_bazel.sh +++ b/naiveproxy/src/third_party/abseil-cpp/ci/macos_xcode_bazel.sh @@ -24,7 +24,7 @@ if [[ -z ${ABSEIL_ROOT:-} ]]; then fi # If we are running on Kokoro, check for a versioned Bazel binary. -KOKORO_GFILE_BAZEL_BIN="bazel-7.0.0-darwin-x86_64" +KOKORO_GFILE_BAZEL_BIN="bazel-8.0.0-darwin-x86_64" if [[ ${KOKORO_GFILE_DIR:-} ]] && [[ -f ${KOKORO_GFILE_DIR}/${KOKORO_GFILE_BAZEL_BIN} ]]; then BAZEL_BIN="${KOKORO_GFILE_DIR}/${KOKORO_GFILE_BAZEL_BIN}" chmod +x ${BAZEL_BIN} diff --git a/naiveproxy/src/third_party/abseil-cpp/ci/windows_clangcl_bazel.bat b/naiveproxy/src/third_party/abseil-cpp/ci/windows_clangcl_bazel.bat index b031c30da8..93ac028048 100755 --- a/naiveproxy/src/third_party/abseil-cpp/ci/windows_clangcl_bazel.bat +++ b/naiveproxy/src/third_party/abseil-cpp/ci/windows_clangcl_bazel.bat @@ -39,7 +39,7 @@ IF NOT "%ALTERNATE_OPTIONS%"=="" copy %ALTERNATE_OPTIONS% absl\base\options.h :: /google/data/rw/teams/absl/kokoro/windows. :: :: TODO(absl-team): Remove -Wno-microsoft-cast -%KOKORO_GFILE_DIR%\bazel-7.0.0-windows-x86_64.exe ^ +%KOKORO_GFILE_DIR%\bazel-8.0.0-windows-x86_64.exe ^ test ... ^ --compilation_mode=%COMPILATION_MODE% ^ --compiler=clang-cl ^ diff --git a/naiveproxy/src/third_party/abseil-cpp/ci/windows_msvc_bazel.bat b/naiveproxy/src/third_party/abseil-cpp/ci/windows_msvc_bazel.bat index e2acf5fdf2..78ce28fcf5 100755 --- a/naiveproxy/src/third_party/abseil-cpp/ci/windows_msvc_bazel.bat +++ b/naiveproxy/src/third_party/abseil-cpp/ci/windows_msvc_bazel.bat @@ -34,7 +34,7 @@ IF NOT "%ALTERNATE_OPTIONS%"=="" copy %ALTERNATE_OPTIONS% absl\base\options.h :: To upgrade Bazel, first download a new binary from :: https://github.com/bazelbuild/bazel/releases and copy it to :: /google/data/rw/teams/absl/kokoro/windows. -%KOKORO_GFILE_DIR%\bazel-7.0.0-windows-x86_64.exe ^ +%KOKORO_GFILE_DIR%\bazel-8.0.0-windows-x86_64.exe ^ test ... ^ --compilation_mode=%COMPILATION_MODE% ^ --copt=/WX ^ diff --git a/naiveproxy/src/third_party/abseil-cpp/symbols_arm64_dbg.def b/naiveproxy/src/third_party/abseil-cpp/symbols_arm64_dbg.def index 42c3448114..f2905e48c9 100644 --- a/naiveproxy/src/third_party/abseil-cpp/symbols_arm64_dbg.def +++ b/naiveproxy/src/third_party/abseil-cpp/symbols_arm64_dbg.def @@ -31,6 +31,10 @@ EXPORTS ??$?0$$V@PlacementImpl@?$NoDestructor@VFlagRegistry@flags_internal@absl@@@absl@@QEAA@XZ ??$?0$$V@PlacementImpl@?$NoDestructor@VMutex@absl@@@absl@@QEAA@XZ ??$?0$$Y_And@__Cr@std@@$0A@@?$tuple@AEAPEAVCommandLineFlag@absl@@AEA_N@__Cr@std@@QEAA@AEAPEAVCommandLineFlag@absl@@AEA_N@Z + ??$?0$$Y_And@__Cr@std@@$0A@@?$tuple@AEAV?$variant@IHM@absl@@@__Cr@std@@QEAA@AEAV?$variant@IHM@absl@@@Z + ??$?0$$Y_And@__Cr@std@@$0A@@?$tuple@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@__Cr@std@@QEAA@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@Z + ??$?0$$Y_And@__Cr@std@@$0A@@?$tuple@AEAV?$variant@_K_JIH_N@absl@@@__Cr@std@@QEAA@AEAV?$variant@_K_JIH_N@absl@@@Z + ??$?0$$Y_And@__Cr@std@@$0A@@?$tuple@AEAV?$variant@_K_JN@absl@@@__Cr@std@@QEAA@AEAV?$variant@_K_JN@absl@@@Z ??$?0$$Y_And@__Cr@std@@$0A@@?$tuple@AEBQEAVCommandLineFlag@absl@@@__Cr@std@@QEAA@AEBQEAVCommandLineFlag@absl@@@Z ??$?0$00X@?$unique_ptr@$$BY0A@PEAU?$__hash_node_base@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@V?$__bucket_list_deallocator@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QEAA@XZ ??$?0$00X@?$unique_ptr@$$BY0A@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@V?$__bucket_list_deallocator@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QEAA@XZ @@ -56,6 +60,10 @@ EXPORTS ??$?0$00X@?$unique_ptr@XUDynValueDeleter@flags_internal@absl@@@__Cr@std@@QEAA@$$T@Z ??$?0$00X@?$unique_ptr@XUDynValueDeleter@flags_internal@absl@@@__Cr@std@@QEAA@PEAX$$QEAUDynValueDeleter@flags_internal@absl@@@Z ??$?0$0A@$$Z$$QEAPEAVCommandLineFlag@absl@@$$Z$S$$Z$$V$$ZPEAV01@@?$__tuple_impl@U?$__tuple_indices@$0A@@__Cr@std@@$$QEAPEAVCommandLineFlag@absl@@@__Cr@std@@QEAA@U?$__tuple_indices@$0A@@12@U?$__tuple_types@$$QEAPEAVCommandLineFlag@absl@@@12@U?$__tuple_indices@$S@12@U?$__tuple_types@$$V@12@$$QEAPEAVCommandLineFlag@absl@@@Z + ??$?0$0A@$$ZAEAV?$variant@IHM@absl@@$$Z$S$$Z$$V$$ZAEAV01@@?$__tuple_impl@U?$__tuple_indices@$0A@@__Cr@std@@AEAV?$variant@IHM@absl@@@__Cr@std@@QEAA@U?$__tuple_indices@$0A@@12@U?$__tuple_types@AEAV?$variant@IHM@absl@@@12@U?$__tuple_indices@$S@12@U?$__tuple_types@$$V@12@AEAV?$variant@IHM@absl@@@Z + ??$?0$0A@$$ZAEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@$$Z$S$$Z$$V$$ZAEAV01@@?$__tuple_impl@U?$__tuple_indices@$0A@@__Cr@std@@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@__Cr@std@@QEAA@U?$__tuple_indices@$0A@@12@U?$__tuple_types@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@12@U?$__tuple_indices@$S@12@U?$__tuple_types@$$V@12@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@Z + ??$?0$0A@$$ZAEAV?$variant@_K_JIH_N@absl@@$$Z$S$$Z$$V$$ZAEAV01@@?$__tuple_impl@U?$__tuple_indices@$0A@@__Cr@std@@AEAV?$variant@_K_JIH_N@absl@@@__Cr@std@@QEAA@U?$__tuple_indices@$0A@@12@U?$__tuple_types@AEAV?$variant@_K_JIH_N@absl@@@12@U?$__tuple_indices@$S@12@U?$__tuple_types@$$V@12@AEAV?$variant@_K_JIH_N@absl@@@Z + ??$?0$0A@$$ZAEAV?$variant@_K_JN@absl@@$$Z$S$$Z$$V$$ZAEAV01@@?$__tuple_impl@U?$__tuple_indices@$0A@@__Cr@std@@AEAV?$variant@_K_JN@absl@@@__Cr@std@@QEAA@U?$__tuple_indices@$0A@@12@U?$__tuple_types@AEAV?$variant@_K_JN@absl@@@12@U?$__tuple_indices@$S@12@U?$__tuple_types@$$V@12@AEAV?$variant@_K_JN@absl@@@Z ??$?0$0A@$$ZAEBQEAVCommandLineFlag@absl@@$$Z$S$$Z$$V$$ZAEBQEAV01@@?$__tuple_impl@U?$__tuple_indices@$0A@@__Cr@std@@AEBQEAVCommandLineFlag@absl@@@__Cr@std@@QEAA@U?$__tuple_indices@$0A@@12@U?$__tuple_types@AEBQEAVCommandLineFlag@absl@@@12@U?$__tuple_indices@$S@12@U?$__tuple_types@$$V@12@AEBQEAVCommandLineFlag@absl@@@Z ??$?0$0A@$00$$ZAEAPEAVCommandLineFlag@absl@@AEA_N$$Z$S$$Z$$V$$ZAEAPEAV01@AEA_N@?$__tuple_impl@U?$__tuple_indices@$0A@$00@__Cr@std@@AEAPEAVCommandLineFlag@absl@@AEA_N@__Cr@std@@QEAA@U?$__tuple_indices@$0A@$00@12@U?$__tuple_types@AEAPEAVCommandLineFlag@absl@@AEA_N@12@U?$__tuple_indices@$S@12@U?$__tuple_types@$$V@12@AEAPEAVCommandLineFlag@absl@@AEA_N@Z ??$?0$0A@$00$$ZPEAVCommandLineFlag@absl@@_N$$Z$S$$Z$$V$$ZAEAPEAV01@AEA_N@?$__tuple_impl@U?$__tuple_indices@$0A@$00@__Cr@std@@PEAVCommandLineFlag@absl@@_N@__Cr@std@@QEAA@U?$__tuple_indices@$0A@$00@12@U?$__tuple_types@PEAVCommandLineFlag@absl@@_N@12@U?$__tuple_indices@$S@12@U?$__tuple_types@$$V@12@AEAPEAVCommandLineFlag@absl@@AEA_N@Z @@ -84,6 +92,10 @@ EXPORTS ??$?0AEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$$T$00@?$CompressedTuple@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@PEAUPayload@status_internal@absl@@@container_internal@absl@@QEAA@AEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$$QEA$$T@Z ??$?0AEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$$T@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@PEAUPayload@status_internal@absl@@@container_internal@absl@@U?$integer_sequence@_K$0A@$00@__Cr@std@@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@AEAV?$allocator@UPayload@status_internal@absl@@@56@$$QEA$$T@Z ??$?0AEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@?$Storage@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@AEAV?$allocator@UPayload@status_internal@absl@@@56@@Z + ??$?0AEAV?$variant@IHM@absl@@$0A@@?$__tuple_leaf@$0A@AEAV?$variant@IHM@absl@@$0A@@__Cr@std@@QEAA@AEAV?$variant@IHM@absl@@@Z + ??$?0AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@$0A@@?$__tuple_leaf@$0A@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@$0A@@__Cr@std@@QEAA@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@Z + ??$?0AEAV?$variant@_K_JIH_N@absl@@$0A@@?$__tuple_leaf@$0A@AEAV?$variant@_K_JIH_N@absl@@$0A@@__Cr@std@@QEAA@AEAV?$variant@_K_JIH_N@absl@@@Z + ??$?0AEAV?$variant@_K_JN@absl@@$0A@@?$__tuple_leaf@$0A@AEAV?$variant@_K_JN@absl@@$0A@@__Cr@std@@QEAA@AEAV?$variant@_K_JN@absl@@@Z ??$?0AEAVCord@absl@@$0A@@?$optional@VCord@absl@@@__Cr@std@@QEAA@AEAVCord@absl@@@Z ??$?0AEAVCord@absl@@@?$__optional_destruct_base@VCord@absl@@$0A@@__Cr@std@@QEAA@Uin_place_t@12@AEAVCord@absl@@@Z ??$?0AEAY0BM@$$CBD$0A@@?$NoDestructor@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@absl@@QEAA@AEAY0BM@$$CBD@Z @@ -285,6 +297,11 @@ EXPORTS ??$?OUsecond_tag@detail@cctz@time_internal@absl@@U01234@@detail@cctz@time_internal@absl@@YA_NAEBV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@0123@0@Z ??$?PUsecond_tag@detail@cctz@time_internal@absl@@U01234@@detail@cctz@time_internal@absl@@YA_NAEBV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@0123@0@Z ??$?R$$CBUPrefixCrc@CrcCordState@crc_internal@absl@@U0123@$0A@@__copy_impl@__Cr@std@@QEBA?AU?$pair@PEBUPrefixCrc@CrcCordState@crc_internal@absl@@PEAU1234@@12@PEBUPrefixCrc@CrcCordState@crc_internal@absl@@0PEAU4567@@Z + ??$?R$00@?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@QEBA_KU?$integral_constant@_K$00@__Cr@std@@@Z + ??$?R$01@?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@QEBA_KU?$integral_constant@_K$01@__Cr@std@@@Z + ??$?R$02@?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@QEBA_KU?$integral_constant@_K$02@__Cr@std@@@Z + ??$?R$0?0@?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@QEBA_KU?$integral_constant@_K$0?0@__Cr@std@@@Z + ??$?R$0A@@?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@QEBA_KU?$integral_constant@_K$0A@@__Cr@std@@@Z ??$?RAEAPEAVLogSink@absl@@@__identity@__Cr@std@@QEBAAEAPEAVLogSink@absl@@AEAPEAV34@@Z ??$?RAEAPEBDAEAHAEAY0LLI@DAEBQEBDPEAD@?$AtomicHook@P6AXPEBDH000@Z@base_internal@absl@@QEBAXAEAPEBDAEAHAEAY0LLI@DAEBQEBD$$QEAPEAD@Z ??$?RAEAPEBVCommandLineFlag@absl@@@__identity@__Cr@std@@QEBAAEAPEBVCommandLineFlag@absl@@AEAPEBV34@@Z @@ -322,6 +339,7 @@ EXPORTS ??$?RV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBUpiecewise_construct_t@12@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@12@V?$tuple@AEBQEAVCommandLineFlag@absl@@@12@@FindElement@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@QEBA?AVconst_iterator@123@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBUpiecewise_construct_t@67@$$QEAV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@67@$$QEAV?$tuple@AEBQEAVCommandLineFlag@absl@@@67@@Z ??$?RV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBUpiecewise_construct_t@12@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@12@V?$tuple@AEBQEAVCommandLineFlag@absl@@@12@@HashElement@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@QEBA_KAEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBUpiecewise_construct_t@56@$$QEAV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@56@$$QEAV?$tuple@AEBQEAVCommandLineFlag@absl@@@56@@Z ??$?RVDuration@absl@@V01@@?$__less@XX@__Cr@std@@QEBA_NAEBVDuration@absl@@0@Z + ??$?RVMixingHashState@hash_internal@absl@@@CombineRaw@hash_internal@absl@@QEBA?AVMixingHashState@12@V312@_K@Z ??$?RW4LogSeverity@absl@@AEBQEBDHAEAPEBD@?$AtomicHook@P6AXW4LogSeverity@absl@@PEBDHAEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z@base_internal@absl@@QEBAX$$QEAW4LogSeverity@2@AEBQEBD$$QEAHAEAPEBD@Z ??$?RW4LogSeverity@absl@@AEBQEBDHAEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@?$AtomicHook@P6AXW4LogSeverity@absl@@PEBDHAEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z@base_internal@absl@@QEBAX$$QEAW4LogSeverity@2@AEBQEBD$$QEAHAEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ??$?RW4LogSeverity@absl@@AEBQEBDHAEAY0CC@$$CBD@?$AtomicHook@P6AXW4LogSeverity@absl@@PEBDHAEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z@base_internal@absl@@QEBAX$$QEAW4LogSeverity@2@AEBQEBD$$QEAHAEAY0CC@$$CBD@Z @@ -336,6 +354,36 @@ EXPORTS ??$AbslHashValue@VMixingHashState@hash_internal@absl@@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z ??$AbslHashValue@VMixingHashState@hash_internal@absl@@AEB_K@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBV?$tuple@AEB_K@__Cr@std@@@Z ??$AbslStringify@VStringifySink@strings_internal@absl@@@absl@@YAXAEAVStringifySink@strings_internal@0@UHex@0@@Z + ??$Access@$00AEAV?$variant@IHM@absl@@@VariantCoreAccess@variant_internal@absl@@SAAEAHAEAV?$variant@IHM@2@@Z + ??$Access@$00AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@VariantCoreAccess@variant_internal@absl@@SAAEAV?$variant@_K_JN@2@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@2@@Z + ??$Access@$00AEAV?$variant@_K_JIH_N@absl@@@VariantCoreAccess@variant_internal@absl@@SAAEA_JAEAV?$variant@_K_JIH_N@2@@Z + ??$Access@$00AEAV?$variant@_K_JN@absl@@@VariantCoreAccess@variant_internal@absl@@SAAEA_JAEAV?$variant@_K_JN@2@@Z + ??$Access@$01AEAV?$variant@IHM@absl@@@VariantCoreAccess@variant_internal@absl@@SAAEAMAEAV?$variant@IHM@2@@Z + ??$Access@$01AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@VariantCoreAccess@variant_internal@absl@@SAAEAV?$Span@$$CBD@2@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@2@@Z + ??$Access@$01AEAV?$variant@_K_JIH_N@absl@@@VariantCoreAccess@variant_internal@absl@@SAAEAIAEAV?$variant@_K_JIH_N@2@@Z + ??$Access@$01AEAV?$variant@_K_JN@absl@@@VariantCoreAccess@variant_internal@absl@@SAAEANAEAV?$variant@_K_JN@2@@Z + ??$Access@$02AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@VariantCoreAccess@variant_internal@absl@@SAAEAV?$variant@IHM@2@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@2@@Z + ??$Access@$02AEAV?$variant@_K_JIH_N@absl@@@VariantCoreAccess@variant_internal@absl@@SAAEAHAEAV?$variant@_K_JIH_N@2@@Z + ??$Access@$03AEAV?$variant@_K_JIH_N@absl@@@VariantCoreAccess@variant_internal@absl@@SAAEA_NAEAV?$variant@_K_JIH_N@2@@Z + ??$Access@$0A@AEAV?$variant@IHM@absl@@@VariantCoreAccess@variant_internal@absl@@SAAEAIAEAV?$variant@IHM@2@@Z + ??$Access@$0A@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@VariantCoreAccess@variant_internal@absl@@SAAEAV?$variant@_K_JIH_N@2@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@2@@Z + ??$Access@$0A@AEAV?$variant@_K_JIH_N@absl@@@VariantCoreAccess@variant_internal@absl@@SAAEA_KAEAV?$variant@_K_JIH_N@2@@Z + ??$Access@$0A@AEAV?$variant@_K_JN@absl@@@VariantCoreAccess@variant_internal@absl@@SAAEA_KAEAV?$variant@_K_JN@2@@Z + ??$AccessUnion@AEAT?$Union@IHM@variant_internal@absl@@$00@variant_internal@absl@@YAAEAHAEAT?$Union@IHM@01@U?$integral_constant@_K$00@__Cr@std@@@Z + ??$AccessUnion@AEAT?$Union@IHM@variant_internal@absl@@$01@variant_internal@absl@@YAAEAMAEAT?$Union@IHM@01@U?$integral_constant@_K$01@__Cr@std@@@Z + ??$AccessUnion@AEAT?$Union@IHM@variant_internal@absl@@$0A@@variant_internal@absl@@YAAEAIAEAT?$Union@IHM@01@U?$integral_constant@_K$0A@@__Cr@std@@@Z + ??$AccessUnion@AEAT?$Union@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@variant_internal@absl@@$00@variant_internal@absl@@YAAEAV?$variant@_K_JN@1@AEAT?$Union@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@01@U?$integral_constant@_K$00@__Cr@std@@@Z + ??$AccessUnion@AEAT?$Union@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@variant_internal@absl@@$01@variant_internal@absl@@YAAEAV?$Span@$$CBD@1@AEAT?$Union@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@01@U?$integral_constant@_K$01@__Cr@std@@@Z + ??$AccessUnion@AEAT?$Union@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@variant_internal@absl@@$02@variant_internal@absl@@YAAEAV?$variant@IHM@1@AEAT?$Union@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@01@U?$integral_constant@_K$02@__Cr@std@@@Z + ??$AccessUnion@AEAT?$Union@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@variant_internal@absl@@$0A@@variant_internal@absl@@YAAEAV?$variant@_K_JIH_N@1@AEAT?$Union@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@01@U?$integral_constant@_K$0A@@__Cr@std@@@Z + ??$AccessUnion@AEAT?$Union@_K_JIH_N@variant_internal@absl@@$00@variant_internal@absl@@YAAEA_JAEAT?$Union@_K_JIH_N@01@U?$integral_constant@_K$00@__Cr@std@@@Z + ??$AccessUnion@AEAT?$Union@_K_JIH_N@variant_internal@absl@@$01@variant_internal@absl@@YAAEAIAEAT?$Union@_K_JIH_N@01@U?$integral_constant@_K$01@__Cr@std@@@Z + ??$AccessUnion@AEAT?$Union@_K_JIH_N@variant_internal@absl@@$02@variant_internal@absl@@YAAEAHAEAT?$Union@_K_JIH_N@01@U?$integral_constant@_K$02@__Cr@std@@@Z + ??$AccessUnion@AEAT?$Union@_K_JIH_N@variant_internal@absl@@$03@variant_internal@absl@@YAAEA_NAEAT?$Union@_K_JIH_N@01@U?$integral_constant@_K$03@__Cr@std@@@Z + ??$AccessUnion@AEAT?$Union@_K_JIH_N@variant_internal@absl@@$0A@@variant_internal@absl@@YAAEA_KAEAT?$Union@_K_JIH_N@01@U?$integral_constant@_K$0A@@__Cr@std@@@Z + ??$AccessUnion@AEAT?$Union@_K_JN@variant_internal@absl@@$00@variant_internal@absl@@YAAEA_JAEAT?$Union@_K_JN@01@U?$integral_constant@_K$00@__Cr@std@@@Z + ??$AccessUnion@AEAT?$Union@_K_JN@variant_internal@absl@@$01@variant_internal@absl@@YAAEANAEAT?$Union@_K_JN@01@U?$integral_constant@_K$01@__Cr@std@@@Z + ??$AccessUnion@AEAT?$Union@_K_JN@variant_internal@absl@@$0A@@variant_internal@absl@@YAAEA_KAEAT?$Union@_K_JN@01@U?$integral_constant@_K$0A@@__Cr@std@@@Z ??$Add@$00@CordRepBtree@cord_internal@absl@@AEAAXPEAUCordRep@12@@Z ??$Add@$00@CordRepBtree@cord_internal@absl@@AEAAXV?$Span@QEAUCordRep@cord_internal@absl@@@2@@Z ??$Add@$0A@@CordRepBtree@cord_internal@absl@@AEAAXPEAUCordRep@12@@Z @@ -378,10 +426,14 @@ EXPORTS ??$ArgumentToConv@_N@str_format_internal@absl@@YA?AW4FormatConversionCharSet@1@XZ ??$AsciiInAZRange@$00@ascii_internal@absl@@YA_NE@Z ??$AsciiInAZRange@$0A@@ascii_internal@absl@@YA_NE@Z + ??$AsciiInAZRangeNaive@$00@ascii_internal@absl@@YA_NE@Z + ??$AsciiInAZRangeNaive@$0A@@ascii_internal@absl@@YA_NE@Z ??$AsciiStrCaseFold@$00@ascii_internal@absl@@YAXPEADPEBD_K@Z ??$AsciiStrCaseFold@$0A@@ascii_internal@absl@@YAXPEADPEBD_K@Z - ??$AsciiStrCaseFoldLong@$00@ascii_internal@absl@@YAXPEADPEBD_K@Z - ??$AsciiStrCaseFoldLong@$0A@@ascii_internal@absl@@YAXPEADPEBD_K@Z + ??$AsciiStrCaseFoldImpl@$00$00@ascii_internal@absl@@YAXPEADPEBD_K@Z + ??$AsciiStrCaseFoldImpl@$00$0A@@ascii_internal@absl@@YAXPEADPEBD_K@Z + ??$AsciiStrCaseFoldImpl@$0A@$00@ascii_internal@absl@@YAXPEADPEBD_K@Z + ??$AsciiStrCaseFoldImpl@$0A@$0A@@ascii_internal@absl@@YAXPEADPEBD_K@Z ??$AssertHashEqConsistent@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@IEAAXAEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$AssertOnFind@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@IEAAXAEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$AssignElements@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@V?$IteratorValueAdapter@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@V?$move_iterator@PEAUPayload@status_internal@absl@@@23@@inlined_vector_internal@absl@@@inlined_vector_internal@absl@@YAXPEAUPayload@status_internal@1@AEAV?$IteratorValueAdapter@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@V?$move_iterator@PEAUPayload@status_internal@absl@@@23@@01@_K@Z @@ -417,6 +469,8 @@ EXPORTS ??$CopyToEncodedBuffer@$00@LogMessage@log_internal@absl@@AEAAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$CopyToEncodedBuffer@$0A@@LogMessage@log_internal@absl@@AEAAXD_K@Z ??$CopyToEncodedBuffer@$0A@@LogMessage@log_internal@absl@@AEAAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ??$CopyToEncodedBufferWithStructuredProtoField@$00@LogMessage@log_internal@absl@@AEAAXUStructuredProtoField@12@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ??$CopyToEncodedBufferWithStructuredProtoField@$0A@@LogMessage@log_internal@absl@@AEAAXUStructuredProtoField@12@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$CreateDefault@$0A@@CommonFields@container_internal@absl@@SA?AV012@XZ ??$CreateWithCustomLimitImpl@$$V@CordBuffer@absl@@CA?AV01@_K0@Z ??$Deallocate@$07V?$allocator@D@__Cr@std@@@container_internal@absl@@YAXPEAV?$allocator@D@__Cr@std@@PEAX_K@Z @@ -677,6 +731,13 @@ EXPORTS ??$Register@AEB_JAEA_KAEA_KAEA_KAEAG@?$SampleRecorder@UHashtablezInfo@container_internal@absl@@@profiling_internal@absl@@QEAAPEAUHashtablezInfo@container_internal@2@AEB_JAEA_K11AEAG@Z ??$RotateRight@I@crc_internal@absl@@YAIIHH@Z ??$RoundUp@$03@crc_internal@absl@@YAPEBEPEBE@Z + ??$Run@$0A@$$Z$00@?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@QEBA_KU?$integral_constant@_N$0A@@__Cr@std@@U?$integer_sequence@_K$0A@@45@U?$integral_constant@_K$00@45@@Z + ??$Run@$0A@$$Z$01@?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@QEBA_KU?$integral_constant@_N$0A@@__Cr@std@@U?$integer_sequence@_K$0A@@45@U?$integral_constant@_K$01@45@@Z + ??$Run@$0A@$$Z$02@?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@QEBA_KU?$integral_constant@_N$0A@@__Cr@std@@U?$integer_sequence@_K$0A@@45@U?$integral_constant@_K$02@45@@Z + ??$Run@$0A@$$Z$0?0@?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@QEBA_KU?$integral_constant@_N$00@__Cr@std@@U?$integer_sequence@_K$0A@@45@U?$integral_constant@_K$0?0@45@@Z + ??$Run@$0A@$$Z$0A@@?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@QEBA_KU?$integral_constant@_N$0A@@__Cr@std@@U?$integer_sequence@_K$0A@@45@U?$integral_constant@_K$0A@@45@@Z + ??$Run@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@@?$VisitIndicesSwitch@$03@variant_internal@absl@@SA_K$$QEAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@12@_K@Z + ??$Run@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@@UnreachableSwitchCase@variant_internal@absl@@SA_K$$QEAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@12@@Z ??$RunWithReentrancyGuard@V@?0???$construct@AEBUpiecewise_construct_t@__Cr@std@@V?$tuple@$$QEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@V?$tuple@$$QEAPEAVCommandLineFlag@absl@@@23@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@34@AEBUpiecewise_construct_t@__Cr@std@@$$QEAV?$tuple@$$QEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@78@$$QEAV?$tuple@$$QEAPEAVCommandLineFlag@absl@@@78@@Z@@CommonFields@container_internal@absl@@QEAAXV@?0???$construct@AEBUpiecewise_construct_t@__Cr@std@@V?$tuple@$$QEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@V?$tuple@$$QEAPEAVCommandLineFlag@absl@@@23@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@12@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@12@AEBUpiecewise_construct_t@__Cr@std@@$$QEAV?$tuple@$$QEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@78@$$QEAV?$tuple@$$QEAPEAVCommandLineFlag@absl@@@78@@Z@@Z ??$RunWithReentrancyGuard@V@?0???$construct@AEBUpiecewise_construct_t@__Cr@std@@V?$tuple@$$QEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@V?$tuple@$$QEAPEAVCommandLineFlag@absl@@@23@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@34@AEBUpiecewise_construct_t@__Cr@std@@$$QEAV?$tuple@$$QEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@78@$$QEAV?$tuple@$$QEAPEAVCommandLineFlag@absl@@@78@@Z@@CommonFields@container_internal@absl@@QEAAXV@?0???$construct@AEBUpiecewise_construct_t@__Cr@std@@V?$tuple@$$QEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@V?$tuple@$$QEAPEAVCommandLineFlag@absl@@@23@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@12@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@12@AEBUpiecewise_construct_t@__Cr@std@@$$QEAV?$tuple@$$QEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@78@$$QEAV?$tuple@$$QEAPEAVCommandLineFlag@absl@@@78@@Z@@Z ??$RunWithReentrancyGuard@V@?0??destroy@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@45@@Z@@CommonFields@container_internal@absl@@QEAAXV@?0??destroy@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@12@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@12@@Z@@Z @@ -996,6 +1057,15 @@ EXPORTS ??$__invoke@AEAU__identity@__Cr@std@@AEBUTransition@cctz@time_internal@absl@@@__Cr@std@@YAAEBUTransition@cctz@time_internal@absl@@AEAU__identity@01@AEBU2345@@Z ??$__invoke@AEAV@?0??SaveFromRegistry@FlagSaverImpl@flags_internal@absl@@QEAAXXZ@AEAVCommandLineFlag@5@@__Cr@std@@YAXAEAV@?0??SaveFromRegistry@FlagSaverImpl@flags_internal@absl@@QEAAXXZ@AEAVCommandLineFlag@6@@Z ??$__invoke@P8FlagImpl@flags_internal@absl@@EAAXXZPEAV123@$$VX@__Cr@std@@YAX$$QEAP8FlagImpl@flags_internal@absl@@EAAXXZ$$QEAPEAV234@@Z + ??$__invoke@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@U?$integral_constant@_K$00@__Cr@std@@@__Cr@std@@YA_K$$QEAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@$$QEAU?$integral_constant@_K$00@01@@Z + ??$__invoke@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@U?$integral_constant@_K$01@__Cr@std@@@__Cr@std@@YA_K$$QEAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@$$QEAU?$integral_constant@_K$01@01@@Z + ??$__invoke@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@U?$integral_constant@_K$02@__Cr@std@@@__Cr@std@@YA_K$$QEAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@$$QEAU?$integral_constant@_K$02@01@@Z + ??$__invoke@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@U?$integral_constant@_K$0?0@__Cr@std@@@__Cr@std@@YA_K$$QEAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@$$QEAU?$integral_constant@_K$0?0@01@@Z + ??$__invoke@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@U?$integral_constant@_K$0A@@__Cr@std@@@__Cr@std@@YA_K$$QEAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@$$QEAU?$integral_constant@_K$0A@@01@@Z + ??$__invoke@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$Span@$$CBD@4@@__Cr@std@@YA_K$$QEAUBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@45@@Z@AEAV?$Span@$$CBD@5@@Z + ??$__invoke@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@IHM@4@@__Cr@std@@YA_K$$QEAUBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@45@@Z@AEAV?$variant@IHM@5@@Z + ??$__invoke@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@_K_JIH_N@4@@__Cr@std@@YA_K$$QEAUBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@45@@Z@AEAV?$variant@_K_JIH_N@5@@Z + ??$__invoke@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@_K_JN@4@@__Cr@std@@YA_K$$QEAUBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@45@@Z@AEAV?$variant@_K_JN@5@@Z ??$__iter_move@AEAPEAPEAVCommandLineFlag@absl@@$0A@@?$_IterOps@U_ClassicAlgPolicy@__Cr@std@@@__Cr@std@@SA$$QEAPEAVCommandLineFlag@absl@@AEAPEAPEAV34@@Z ??$__iter_move@AEAPEAPEBVCommandLineFlag@absl@@$0A@@?$_IterOps@U_ClassicAlgPolicy@__Cr@std@@@__Cr@std@@SA$$QEAPEBVCommandLineFlag@absl@@AEAPEAPEBV34@@Z ??$__launder@$$CBU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@YAPEBU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@01@PEBU201@@Z @@ -1314,6 +1384,10 @@ EXPORTS ??$find_or_prepare_insert_non_soo@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEAA?AU?$pair@Viterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@_N@__Cr@std@@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@45@@Z ??$find_or_prepare_insert_soo@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEAA?AU?$pair@Viterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@_N@__Cr@std@@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@45@@Z ??$find_soo@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEAA?AViterator@012@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ??$forward_as_tuple@AEAV?$variant@IHM@absl@@@__Cr@std@@YA?AV?$tuple@AEAV?$variant@IHM@absl@@@01@AEAV?$variant@IHM@absl@@@Z + ??$forward_as_tuple@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@__Cr@std@@YA?AV?$tuple@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@01@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@Z + ??$forward_as_tuple@AEAV?$variant@_K_JIH_N@absl@@@__Cr@std@@YA?AV?$tuple@AEAV?$variant@_K_JIH_N@absl@@@01@AEAV?$variant@_K_JIH_N@absl@@@Z + ??$forward_as_tuple@AEAV?$variant@_K_JN@absl@@@__Cr@std@@YA?AV?$tuple@AEAV?$variant@_K_JN@absl@@@01@AEAV?$variant@_K_JN@absl@@@Z ??$forward_as_tuple@AEBQEAVCommandLineFlag@absl@@@__Cr@std@@YA?AV?$tuple@AEBQEAVCommandLineFlag@absl@@@01@AEBQEAVCommandLineFlag@absl@@@Z ??$forward_as_tuple@PEAVCommandLineFlag@absl@@@__Cr@std@@YA?AV?$tuple@$$QEAPEAVCommandLineFlag@absl@@@01@$$QEAPEAVCommandLineFlag@absl@@@Z ??$get@$00@?$CompressedTuple@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@PEAPEAUCordRep@cord_internal@absl@@@container_internal@absl@@QEGAAAEAPEAPEAUCordRep@cord_internal@2@XZ @@ -1347,20 +1421,33 @@ EXPORTS ??$get@$0A@@?$CompressedTuple@VCommonFields@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@QEGBAAEBVCommonFields@12@XZ ??$get@$0A@@?$CompressedTuple@_KV?$allocator@D@__Cr@std@@@container_internal@absl@@QEGBAAEB_KXZ ??$get@$0A@AEAPEAVCommandLineFlag@absl@@AEA_N@__Cr@std@@YAAEAPEAVCommandLineFlag@absl@@AEAV?$tuple@AEAPEAVCommandLineFlag@absl@@AEA_N@01@@Z + ??$get@$0A@AEAV?$variant@IHM@absl@@@__Cr@std@@YAAEAV?$variant@IHM@absl@@AEBV?$tuple@AEAV?$variant@IHM@absl@@@01@@Z + ??$get@$0A@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@__Cr@std@@YAAEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@AEBV?$tuple@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@01@@Z + ??$get@$0A@AEAV?$variant@_K_JIH_N@absl@@@__Cr@std@@YAAEAV?$variant@_K_JIH_N@absl@@AEBV?$tuple@AEAV?$variant@_K_JIH_N@absl@@@01@@Z + ??$get@$0A@AEAV?$variant@_K_JN@absl@@@__Cr@std@@YAAEAV?$variant@_K_JN@absl@@AEBV?$tuple@AEAV?$variant@_K_JN@absl@@@01@@Z ??$get@$0A@AEBQEAVCommandLineFlag@absl@@@__Cr@std@@YAAEBQEAVCommandLineFlag@absl@@AEAV?$tuple@AEBQEAVCommandLineFlag@absl@@@01@@Z ??$get@$0A@PEAVCommandLineFlag@absl@@_N@__Cr@std@@YA$$QEAPEAVCommandLineFlag@absl@@$$QEAV?$tuple@PEAVCommandLineFlag@absl@@_N@01@@Z ??$get@$0A@PEAVCommandLineFlag@absl@@_N@__Cr@std@@YAAEAPEAVCommandLineFlag@absl@@AEAV?$tuple@PEAVCommandLineFlag@absl@@_N@01@@Z ??$hash@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SA_KAEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$hash@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SA_KAEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z ??$hash@V?$tuple@AEB_K@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SA_KAEBV?$tuple@AEB_K@__Cr@std@@@Z - ??$hash_bytes@VMixingHashState@hash_internal@absl@@H@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBH@Z - ??$hash_bytes@VMixingHashState@hash_internal@absl@@_K@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEB_K@Z + ??$hash_bytes@VMixingHashState@hash_internal@absl@@H$0A@@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBH@Z + ??$hash_bytes@VMixingHashState@hash_internal@absl@@_K$0A@@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEB_K@Z ??$hash_range_or_bytes@VMixingHashState@hash_internal@absl@@D@hash_internal@absl@@YA?AVMixingHashState@01@V201@PEBD_K@Z ??$hash_tuple@VMixingHashState@hash_internal@absl@@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@$0A@$00@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@U?$integer_sequence@_K$0A@$00@45@@Z ??$hash_tuple@VMixingHashState@hash_internal@absl@@V?$tuple@AEB_K@__Cr@std@@$0A@@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBV?$tuple@AEB_K@__Cr@std@@U?$integer_sequence@_K$0A@@45@@Z - ??$insert@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@$0A@U123@$0A@$0A@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@QEAA?AU?$pair@Viterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@_N@__Cr@std@@$$QEAU?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@45@@Z + ??$insert@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@$0A@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@QEAA?AU?$pair@Viterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@_N@__Cr@std@@$$QEAU?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@45@@Z ??$insert@V?$__wrap_iter@PEAUraw_view@?1???R?$ConvertToContainer@V?$vector@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V?$allocator@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@23@$0A@@?$Splitter@VByChar@absl@@UAllowEmpty@2@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@strings_internal@absl@@QEBA?AV?$vector@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V?$allocator@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@AEBV345@@Z@@__Cr@std@@$0A@@?$vector@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V?$allocator@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QEAA?AV?$__wrap_iter@PEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@12@V?$__wrap_iter@PEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@12@V?$__wrap_iter@PEAUraw_view@?1???R?$ConvertToContainer@V?$vector@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V?$allocator@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@23@$0A@@?$Splitter@VByChar@absl@@UAllowEmpty@2@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@strings_internal@absl@@QEBA?AV?$vector@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V?$allocator@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@AEBV345@@Z@@12@1@Z ??$invoke@P8FlagImpl@flags_internal@absl@@EAAXXZPEAV123@@__Cr@std@@YAX$$QEAP8FlagImpl@flags_internal@absl@@EAAXXZ$$QEAPEAV234@@Z + ??$invoke@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@U?$integral_constant@_K$00@__Cr@std@@@__Cr@std@@YA_K$$QEAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@$$QEAU?$integral_constant@_K$00@01@@Z + ??$invoke@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@U?$integral_constant@_K$01@__Cr@std@@@__Cr@std@@YA_K$$QEAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@$$QEAU?$integral_constant@_K$01@01@@Z + ??$invoke@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@U?$integral_constant@_K$02@__Cr@std@@@__Cr@std@@YA_K$$QEAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@$$QEAU?$integral_constant@_K$02@01@@Z + ??$invoke@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@U?$integral_constant@_K$0?0@__Cr@std@@@__Cr@std@@YA_K$$QEAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@$$QEAU?$integral_constant@_K$0?0@01@@Z + ??$invoke@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@U?$integral_constant@_K$0A@@__Cr@std@@@__Cr@std@@YA_K$$QEAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@$$QEAU?$integral_constant@_K$0A@@01@@Z + ??$invoke@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$Span@$$CBD@4@@__Cr@std@@YA_K$$QEAUBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@45@@Z@AEAV?$Span@$$CBD@5@@Z + ??$invoke@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@IHM@4@@__Cr@std@@YA_K$$QEAUBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@45@@Z@AEAV?$variant@IHM@5@@Z + ??$invoke@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@_K_JIH_N@4@@__Cr@std@@YA_K$$QEAUBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@45@@Z@AEAV?$variant@_K_JIH_N@5@@Z + ??$invoke@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@_K_JN@4@@__Cr@std@@YA_K$$QEAUBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@45@@Z@AEAV?$variant@_K_JN@5@@Z ??$iter_swap@AEAPEAPEAVCommandLineFlag@absl@@AEAPEAPEAV12@@?$_IterOps@U_ClassicAlgPolicy@__Cr@std@@@__Cr@std@@SAXAEAPEAPEAVCommandLineFlag@absl@@0@Z ??$iter_swap@AEAPEAPEAVCommandLineFlag@absl@@PEAPEAV12@@?$_IterOps@U_ClassicAlgPolicy@__Cr@std@@@__Cr@std@@SAXAEAPEAPEAVCommandLineFlag@absl@@$$QEAPEAPEAV34@@Z ??$iter_swap@AEAPEAPEBVCommandLineFlag@absl@@AEAPEAPEBV12@@?$_IterOps@U_ClassicAlgPolicy@__Cr@std@@@__Cr@std@@SAXAEAPEAPEBVCommandLineFlag@absl@@0@Z @@ -1490,6 +1577,7 @@ EXPORTS ??$transfer_impl@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@@?$common_policy_traits@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@X@container_internal@absl@@CA?AU?$integral_constant@_N$00@__Cr@std@@PEAV?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@45@PEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@12@1URank2@012@@Z ??$upper_bound@PEBUTransition@cctz@time_internal@absl@@U1234@UByCivilTime@1234@@__Cr@std@@YAPEBUTransition@cctz@time_internal@absl@@PEBU2345@0AEBU2345@UByCivilTime@2345@@Z ??$upper_bound@PEBUTransition@cctz@time_internal@absl@@U1234@UByUnixTime@1234@@__Cr@std@@YAPEBUTransition@cctz@time_internal@absl@@PEBU2345@0AEBU2345@UByUnixTime@2345@@Z + ??$visit@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@absl@@YA_K$$QEAUBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@0@YA_KUStructuredProtoField@30@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@0@@Z ??0?$AllocationTransaction@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAA@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@@Z ??0?$AllocationTransaction@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAA@AEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@@Z ??0?$AllocationTransaction@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAA@AEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@Z @@ -2439,6 +2527,7 @@ EXPORTS ??Pabsl@@YA_NVint128@0@0@Z ??Pabsl@@YA_NVuint128@0@0@Z ??R@?0???$Initialize@V?$IteratorValueAdapter@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@PEBVFormatArgImpl@str_format_internal@absl@@@inlined_vector_internal@absl@@@?$Storage@VFormatArgImpl@str_format_internal@absl@@$03V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAAXV?$IteratorValueAdapter@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@PEBVFormatArgImpl@str_format_internal@absl@@@23@_K@Z@QEBA?A?@@XZ + ??R@?0???$Run@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@@?$VisitIndicesSwitch@$03@variant_internal@absl@@SA_K$$QEAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@23@_K@Z@QEBA?A?@@XZ ??R@?0???$construct@AEBUpiecewise_construct_t@__Cr@std@@V?$tuple@$$QEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@V?$tuple@$$QEAPEAVCommandLineFlag@absl@@@23@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@23@AEBUpiecewise_construct_t@__Cr@std@@$$QEAV?$tuple@$$QEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@67@$$QEAV?$tuple@$$QEAPEAVCommandLineFlag@absl@@@67@@Z@QEBA?A?@@XZ ??R@?0???$construct@AEBUpiecewise_construct_t@__Cr@std@@V?$tuple@$$QEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@V?$tuple@$$QEAPEAVCommandLineFlag@absl@@@23@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@23@AEBUpiecewise_construct_t@__Cr@std@@$$QEAV?$tuple@$$QEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@67@$$QEAV?$tuple@$$QEAPEAVCommandLineFlag@absl@@@67@@Z@QEBA?A?@@XZ ??R@?0???A?$FixedArray@D$0?0V?$allocator@D@__Cr@std@@@absl@@QEAAAEAD_K@Z@QEBA?A?@@XZ @@ -2527,6 +2616,10 @@ EXPORTS ??R?$function@$$A6A_NAEBVCommandLineFlag@absl@@@Z@__Cr@std@@QEBA_NAEBVCommandLineFlag@absl@@@Z ??R?$hash@PEBUCordRep@cord_internal@absl@@@__Cr@std@@QEBA_KPEBUCordRep@cord_internal@absl@@@Z ??RAllowEmpty@absl@@QEBA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ??RBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@23@@Z@QEAA_KV?$Span@$$CBD@3@@Z + ??RBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@23@@Z@QEAA_KV?$variant@IHM@3@@Z + ??RBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@23@@Z@QEAA_KV?$variant@_K_JIH_N@3@@Z + ??RBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@23@@Z@QEAA_KV?$variant@_K_JN@3@@Z ??RByCivilTime@Transition@cctz@time_internal@absl@@QEBA_NAEBU1234@0@Z ??RByUnixTime@Transition@cctz@time_internal@absl@@QEBA_NAEBU1234@0@Z ??RDynValueDeleter@flags_internal@absl@@QEBAXPEAX@Z @@ -2723,6 +2816,7 @@ EXPORTS ?BreakTime@TimeZoneInfo@cctz@time_internal@absl@@UEBA?AUabsolute_lookup@time_zone@234@AEBV?$time_point@Vsystem_clock@chrono@__Cr@std@@V?$duration@_JV?$ratio@$00$00@__Cr@std@@@234@@chrono@__Cr@std@@@Z ?BreakTime@TimeZoneLibC@cctz@time_internal@absl@@UEBA?AUabsolute_lookup@time_zone@234@AEBV?$time_point@Vsystem_clock@chrono@__Cr@std@@V?$duration@_JV?$ratio@$00$00@__Cr@std@@@234@@chrono@__Cr@std@@@Z ?BufferSizeFor@log_internal@absl@@YA_K_KW4WireType@12@@Z + ?BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@12@@Z ?BytesToHexString@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@34@@Z ?CEscape@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@34@@Z ?CHexEscape@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@34@@Z @@ -2805,6 +2899,7 @@ EXPORTS ?CopyBeginTo@CordRepBtree@cord_internal@absl@@AEBAPEAV123@_K0@Z ?CopyConstruct@flags_internal@absl@@YAXP6APEAXW4FlagOp@12@PEBXPEAX2@Z12@Z ?CopyCordToString@absl@@YAXAEBVCord@1@PEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z + ?CopyInlineToString@InlineData@cord_internal@absl@@QEBAXPEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ?CopyPrefix@CordRepBtree@cord_internal@absl@@AEAA?AUCopyResult@123@_K_N@Z ?CopyRaw@CordRepBtree@cord_internal@absl@@AEBAPEAV123@_K@Z ?CopySuffix@CordRepBtree@cord_internal@absl@@AEAA?AUCopyResult@123@_K@Z @@ -2936,13 +3031,18 @@ EXPORTS ?EnableMutexInvariantDebugging@absl@@YAX_N@Z ?EnableRescheduling@SchedulingGuard@base_internal@absl@@CAX_N@Z ?EnableSymbolizeLogStackTrace@log_internal@absl@@YAX_N@Z + ?Encode32Bit@log_internal@absl@@YA_N_KHPEAV?$Span@D@2@@Z ?Encode32Bit@log_internal@absl@@YA_N_KIPEAV?$Span@D@2@@Z ?Encode64Bit@log_internal@absl@@YA_N_K0PEAV?$Span@D@2@@Z + ?Encode64Bit@log_internal@absl@@YA_N_K_JPEAV?$Span@D@2@@Z ?EncodeBytes@log_internal@absl@@YA_N_KV?$Span@$$CBD@2@PEAV?$Span@D@2@@Z ?EncodeBytesTruncate@log_internal@absl@@YA_N_KV?$Span@$$CBD@2@PEAV?$Span@D@2@@Z + ?EncodeDouble@log_internal@absl@@YA_N_KNPEAV?$Span@D@2@@Z + ?EncodeFloat@log_internal@absl@@YA_N_KMPEAV?$Span@D@2@@Z ?EncodeMessageLength@log_internal@absl@@YAXV?$Span@D@2@PEBV32@@Z ?EncodeMessageStart@log_internal@absl@@YA?AV?$Span@D@2@_K0PEAV32@@Z ?EncodeStringTruncate@log_internal@absl@@YA_N_KV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAV?$Span@D@2@@Z + ?EncodeStructuredProtoField@log_internal@absl@@YA_NUStructuredProtoField@12@AEAV?$Span@D@2@@Z ?EncodeUTF8Char@strings_internal@absl@@YA_KPEAD_U@Z ?EncodeVarint@log_internal@absl@@YA_N_K0PEAV?$Span@D@2@@Z ?EncodeVarint@log_internal@absl@@YA_N_KHPEAV?$Span@D@2@@Z @@ -3263,6 +3363,7 @@ EXPORTS ?HasNoGrowthLeftAndNoDeleted@GrowthInfo@container_internal@absl@@QEBA_NXZ ?HasNode@GraphCycles@synchronization_internal@absl@@QEAA_NUGraphId@23@@Z ?HasRandenHwAesImplementation@random_internal@absl@@YA_NXZ + ?HashTableSizeOverflow@container_internal@absl@@YAXXZ ?HaveLeakSanitizer@absl@@YA_NXZ ?Head@CordzInfo@cord_internal@absl@@SAPEAV123@AEBVCordzSnapshot@23@@Z ?Help@FlagImpl@flags_internal@absl@@EEBA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ @@ -3611,6 +3712,7 @@ EXPORTS ?RawSetStderrThreshold@log_internal@absl@@YAXW4LogSeverityAtLeast@2@@Z ?Read1To3@MixingHashState@hash_internal@absl@@CAIPEBE_K@Z ?Read4To8@MixingHashState@hash_internal@absl@@CA_KPEBE_K@Z + ?Read8@MixingHashState@hash_internal@absl@@CA_KPEBE@Z ?Read9To16@MixingHashState@hash_internal@absl@@CA?AU?$pair@_K_K@__Cr@std@@PEBE_K@Z ?Read@CordRepBtreeNavigator@cord_internal@absl@@QEAA?AUReadResult@123@_K0@Z ?Read@CordRepBtreeReader@cord_internal@absl@@QEAA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@_K0AEAPEAUCordRep@23@@Z @@ -3698,6 +3800,10 @@ EXPORTS ?ReverseConsume@cord_internal@absl@@YAXPEAUCordRep@12@V?$FunctionRef@$$A6AXPEAUCordRep@cord_internal@absl@@_K1@Z@2@@Z ?RoundUp@cord_internal@absl@@YA_K_K0@Z ?RoundUpForTag@cord_internal@absl@@YA_K_K@Z + ?Run@?$ReachableSwitchCase@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@$00@variant_internal@absl@@SA_K$$QEAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@23@@Z + ?Run@?$ReachableSwitchCase@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@$01@variant_internal@absl@@SA_K$$QEAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@23@@Z + ?Run@?$ReachableSwitchCase@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@$02@variant_internal@absl@@SA_K$$QEAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@23@@Z + ?Run@?$ReachableSwitchCase@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@$0A@@variant_internal@absl@@SA_K$$QEAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@23@@Z ?RuntimeTypeId@flags_internal@absl@@YAPEBVtype_info@@P6APEAXW4FlagOp@12@PEBXPEAX2@Z@Z ?SafeToDelete@CordzHandle@cord_internal@absl@@QEBA_NXZ ?Sample@container_internal@absl@@YA?AVHashtablezInfoHandle@12@_K00G@Z @@ -4001,6 +4107,9 @@ EXPORTS ?TryRemove@Mutex@absl@@AEAAXPEAUPerThreadSynch@base_internal@2@@Z ?TypeId@FlagImpl@flags_internal@absl@@EEBAPEBXXZ ?TypeId@PrivateHandleAccessor@flags_internal@absl@@SAPEBXAEBVCommandLineFlag@3@@Z + ?TypeName@CommandLineFlag@absl@@EEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@XZ + ?TypeName@FlagImpl@flags_internal@absl@@EEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@XZ + ?TypeName@PrivateHandleAccessor@flags_internal@absl@@SA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCommandLineFlag@3@@Z ?UTC@Impl@time_zone@cctz@time_internal@absl@@SA?AV2345@XZ ?UTC@TimeZoneIf@cctz@time_internal@absl@@SA?AV?$unique_ptr@VTimeZoneIf@cctz@time_internal@absl@@U?$default_delete@VTimeZoneIf@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@XZ ?UTC@TimeZoneInfo@cctz@time_internal@absl@@SA?AV?$unique_ptr@VTimeZoneInfo@cctz@time_internal@absl@@U?$default_delete@VTimeZoneInfo@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@XZ @@ -4600,6 +4709,7 @@ EXPORTS ?code@StatusRep@status_internal@absl@@QEBA?AW4StatusCode@3@XZ ?combine@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@23@V423@@Z ?combine_contiguous@MixingHashState@hash_internal@absl@@SA?AV123@V123@PEBE_K@Z + ?combine_raw@MixingHashState@hash_internal@absl@@CA?AV123@V123@_K@Z ?common@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEAAAEAVCommonFields@23@XZ ?common@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEBAAEBVCommonFields@23@XZ ?compare_exchange_strong@?$__atomic_base@PEAVTimeZone@absl@@$0A@@__Cr@std@@QEAA_NAEAPEAVTimeZone@absl@@PEAV45@W4memory_order@23@2@Z @@ -4834,6 +4944,10 @@ EXPORTS ?get@?$__temp_value@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAAEAUTransitionType@cctz@time_internal@absl@@XZ ?get@?$__tuple_leaf@$0A@$$QEAPEAVCommandLineFlag@absl@@$0A@@__Cr@std@@QEAAAEAPEAVCommandLineFlag@absl@@XZ ?get@?$__tuple_leaf@$0A@AEAPEAVCommandLineFlag@absl@@$0A@@__Cr@std@@QEAAAEAPEAVCommandLineFlag@absl@@XZ + ?get@?$__tuple_leaf@$0A@AEAV?$variant@IHM@absl@@$0A@@__Cr@std@@QEBAAEAV?$variant@IHM@absl@@XZ + ?get@?$__tuple_leaf@$0A@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@$0A@@__Cr@std@@QEBAAEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@XZ + ?get@?$__tuple_leaf@$0A@AEAV?$variant@_K_JIH_N@absl@@$0A@@__Cr@std@@QEBAAEAV?$variant@_K_JIH_N@absl@@XZ + ?get@?$__tuple_leaf@$0A@AEAV?$variant@_K_JN@absl@@$0A@@__Cr@std@@QEBAAEAV?$variant@_K_JN@absl@@XZ ?get@?$__tuple_leaf@$0A@AEBQEAVCommandLineFlag@absl@@$0A@@__Cr@std@@QEAAAEBQEAVCommandLineFlag@absl@@XZ ?get@?$__tuple_leaf@$0A@PEAVCommandLineFlag@absl@@$0A@@__Cr@std@@QEAAAEAPEAVCommandLineFlag@absl@@XZ ?get@?$unique_ptr@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@V?$__allocator_destructor@V?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@@__Cr@std@@QEBAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@XZ @@ -4894,6 +5008,10 @@ EXPORTS ?hour@?$civil_time@Usecond_tag@time_internal@absl@@@detail@cctz@time_internal@absl@@QEBAHXZ ?increment_size@CommonFields@container_internal@absl@@QEAAXXZ ?index@?$probe_seq@$07@container_internal@absl@@QEBA_KXZ + ?index@?$variant@IHM@absl@@QEBA_KXZ + ?index@?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@QEBA_KXZ + ?index@?$variant@_K_JIH_N@absl@@QEBA_KXZ + ?index@?$variant@_K_JN@absl@@QEBA_KXZ ?index@CordRepBtree@cord_internal@absl@@QEBA_KW4EdgeType@123@@Z ?infoz@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEAA?AVHashtablezInfoHandle@23@XZ ?infoz@CommonFields@container_internal@absl@@QEAA?AVHashtablezInfoHandle@23@XZ diff --git a/naiveproxy/src/third_party/abseil-cpp/symbols_arm64_rel.def b/naiveproxy/src/third_party/abseil-cpp/symbols_arm64_rel.def index 3b7d6ac219..099139ffba 100644 --- a/naiveproxy/src/third_party/abseil-cpp/symbols_arm64_rel.def +++ b/naiveproxy/src/third_party/abseil-cpp/symbols_arm64_rel.def @@ -34,8 +34,6 @@ EXPORTS ??$Append@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$0A@@Cord@absl@@QEAAX$$QEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ??$AppendImpl@AEBVCord@absl@@@Cord@absl@@AEAAXAEBV01@@Z ??$AppendImpl@VCord@absl@@@Cord@absl@@AEAAX$$QEAV01@@Z - ??$AsciiStrCaseFoldLong@$00@ascii_internal@absl@@YAXPEADPEBD_K@Z - ??$AsciiStrCaseFoldLong@$0A@@ascii_internal@absl@@YAXPEADPEBD_K@Z ??$Base64EscapeInternal@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@strings_internal@absl@@YAXPEBE_KPEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_NPEBD@Z ??$CallOnceImpl@A6AXXZ$$V@base_internal@absl@@YAXPEAU?$atomic@I@__Cr@std@@W4SchedulingMode@01@A6AXXZ@Z ??$CallOnceImpl@P8FlagImpl@flags_internal@absl@@EAAXXZPEAV123@@base_internal@absl@@YAXPEAU?$atomic@I@__Cr@std@@W4SchedulingMode@01@$$QEAP8FlagImpl@flags_internal@1@EAAXXZ$$QEAPEAV671@@Z @@ -60,6 +58,8 @@ EXPORTS ??$CopyToEncodedBuffer@$00@LogMessage@log_internal@absl@@AEAAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$CopyToEncodedBuffer@$0A@@LogMessage@log_internal@absl@@AEAAXD_K@Z ??$CopyToEncodedBuffer@$0A@@LogMessage@log_internal@absl@@AEAAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ??$CopyToEncodedBufferWithStructuredProtoField@$00@LogMessage@log_internal@absl@@AEAAXUStructuredProtoField@12@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ??$CopyToEncodedBufferWithStructuredProtoField@$0A@@LogMessage@log_internal@absl@@AEAAXUStructuredProtoField@12@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$DeallocateStandard@$07@container_internal@absl@@YAXAEAVCommonFields@01@AEBUPolicyFunctions@01@@Z ??$Dispatch@C@FormatArgImpl@str_format_internal@absl@@CA_NTData@012@VFormatConversionSpecImpl@12@PEAX@Z ??$Dispatch@D@FormatArgImpl@str_format_internal@absl@@CA_NTData@012@VFormatConversionSpecImpl@12@PEAX@Z @@ -127,6 +127,7 @@ EXPORTS ??$PopDead@_J_K_K_KG@?$SampleRecorder@UHashtablezInfo@container_internal@absl@@@profiling_internal@absl@@AEAAPEAUHashtablezInfo@container_internal@2@_J_K11G@Z ??$Prepend@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$0A@@Cord@absl@@QEAAX$$QEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ??$Register@AEB_JAEA_KAEA_KAEA_KAEAG@?$SampleRecorder@UHashtablezInfo@container_internal@absl@@@profiling_internal@absl@@QEAAPEAUHashtablezInfo@container_internal@2@AEB_JAEA_K11AEAG@Z + ??$Run@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@@?$VisitIndicesSwitch@$03@variant_internal@absl@@SA_K$$QEAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@12@_K@Z ??$SNPrintF@DHHH@absl@@YAHPEAD_KAEBV?$FormatSpecTemplate@$0BPPPL@$0JPPPL@$0JPPPL@$0JPPPL@@str_format_internal@0@AEBDAEBH44@Z ??$StrCat@PEBD@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@AEBVAlphaNum@0@0000AEBQEBD@Z ??$StrCat@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$$BY02D@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@AEBVAlphaNum@0@0000AEBV123@AEAY02$$CBD@Z @@ -179,7 +180,6 @@ EXPORTS ??$emplace_front@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@@?$__split_buffer@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAX$$QEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@@Z ??$find@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@?$__hash_table@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@V?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$allocator@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@23@@__Cr@std@@QEAA?AV?$__hash_iterator@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@12@AEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@12@@Z ??$find_first_non_full@X@container_internal@absl@@YA?AUFindInfo@01@AEBVCommonFields@01@_K@Z - ??$find_or_prepare_insert_non_soo@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEAA?AU?$pair@Viterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@_N@__Cr@std@@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@45@@Z ??0?$BigUnsigned@$03@strings_internal@absl@@QEAA@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??0?$BigUnsigned@$03@strings_internal@absl@@QEAA@XZ ??0?$BigUnsigned@$03@strings_internal@absl@@QEAA@_K@Z @@ -327,7 +327,6 @@ EXPORTS ??Kabsl@@YA?AVuint128@0@V10@0@Z ??Labsl@@YA?AVint128@0@V10@0@Z ??Labsl@@YA?AVuint128@0@V10@0@Z - ??R@?0??resize_impl@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@CAXAEAVCommonFields@34@_KVHashtablezInfoHandle@34@@Z@QEBA?A?@@PEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@34@@Z ??R?$ConvertToContainer@V?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@23@$0A@@?$Splitter@VByChar@absl@@UAllowEmpty@2@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@strings_internal@absl@@QEBA?AV?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@AEBV123@@Z ??R?$ConvertToContainer@V?$vector@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V?$allocator@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@23@$0A@@?$Splitter@VByChar@absl@@UAllowEmpty@2@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@strings_internal@absl@@QEBA?AV?$vector@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V?$allocator@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@AEBV123@@Z ??R?$RandenPool@E@random_internal@absl@@QEAAEXZ @@ -495,7 +494,6 @@ EXPORTS ?CopyCordToString@absl@@YAXAEBVCord@1@PEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ?CopyPrefix@CordRepBtree@cord_internal@absl@@AEAA?AUCopyResult@123@_K_N@Z ?CopySuffix@CordRepBtree@cord_internal@absl@@AEAA?AUCopyResult@123@_K@Z - ?CopyTo@InlineRep@Cord@absl@@QEBAXPEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ?CopyToArraySlowPath@Cord@absl@@AEBAXPEAD@Z ?Crash@Helper@internal_statusor@absl@@SAXAEBVStatus@3@@Z ?Crc32c@CRC@crc_internal@absl@@SAPEAV123@XZ @@ -564,6 +562,7 @@ EXPORTS ?EncodeBytesTruncate@log_internal@absl@@YA_N_KV?$Span@$$CBD@2@PEAV?$Span@D@2@@Z ?EncodeMessageLength@log_internal@absl@@YAXV?$Span@D@2@PEBV32@@Z ?EncodeMessageStart@log_internal@absl@@YA?AV?$Span@D@2@_K0PEAV32@@Z + ?EncodeStructuredProtoField@log_internal@absl@@YA_NUStructuredProtoField@12@AEAV?$Span@D@2@@Z ?EncodeUTF8Char@strings_internal@absl@@YA_KPEAD_U@Z ?EncodeVarint@log_internal@absl@@YA_N_K0PEAV?$Span@D@2@@Z ?EncodeWaitCycles@SpinLock@base_internal@absl@@KAI_J0@Z @@ -764,6 +763,7 @@ EXPORTS ?HasEdge@GraphCycles@synchronization_internal@absl@@QEBA_NUGraphId@23@0@Z ?HasNode@GraphCycles@synchronization_internal@absl@@QEAA_NUGraphId@23@@Z ?HasRandenHwAesImplementation@random_internal@absl@@YA_NXZ + ?HashTableSizeOverflow@container_internal@absl@@YAXXZ ?HaveLeakSanitizer@absl@@YA_NXZ ?Head@CordzInfo@cord_internal@absl@@SAPEAV123@AEBVCordzSnapshot@23@@Z ?Help@FlagImpl@flags_internal@absl@@EEBA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ @@ -905,7 +905,6 @@ EXPORTS ?NotFoundError@absl@@YA?AVStatus@1@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ?Notify@Notification@absl@@QEAAXXZ ?Now@CycleClock@base_internal@absl@@SA_JXZ - ?Now@UnscaledCycleClock@base_internal@absl@@CA_JXZ ?Now@absl@@YA?AVTime@1@XZ ?NumCPUs@base_internal@absl@@YAHXZ ?NumLeakedFlagValues@flags_internal@absl@@YA_KXZ @@ -1215,6 +1214,9 @@ EXPORTS ?TryRemove@Mutex@absl@@AEAAXPEAUPerThreadSynch@base_internal@2@@Z ?TypeId@FlagImpl@flags_internal@absl@@EEBAPEBXXZ ?TypeId@PrivateHandleAccessor@flags_internal@absl@@SAPEBXAEBVCommandLineFlag@3@@Z + ?TypeName@CommandLineFlag@absl@@EEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@XZ + ?TypeName@FlagImpl@flags_internal@absl@@EEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@XZ + ?TypeName@PrivateHandleAccessor@flags_internal@absl@@SA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCommandLineFlag@3@@Z ?UTC@Impl@time_zone@cctz@time_internal@absl@@SA?AV2345@XZ ?UTC@TimeZoneIf@cctz@time_internal@absl@@SA?AV?$unique_ptr@VTimeZoneIf@cctz@time_internal@absl@@U?$default_delete@VTimeZoneIf@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@XZ ?UTC@TimeZoneInfo@cctz@time_internal@absl@@SA?AV?$unique_ptr@VTimeZoneInfo@cctz@time_internal@absl@@U?$default_delete@VTimeZoneInfo@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@XZ diff --git a/naiveproxy/src/third_party/abseil-cpp/symbols_x64_dbg.def b/naiveproxy/src/third_party/abseil-cpp/symbols_x64_dbg.def index ea726a56a0..54aefe754d 100644 --- a/naiveproxy/src/third_party/abseil-cpp/symbols_x64_dbg.def +++ b/naiveproxy/src/third_party/abseil-cpp/symbols_x64_dbg.def @@ -31,6 +31,10 @@ EXPORTS ??$?0$$V@PlacementImpl@?$NoDestructor@VFlagRegistry@flags_internal@absl@@@absl@@QEAA@XZ ??$?0$$V@PlacementImpl@?$NoDestructor@VMutex@absl@@@absl@@QEAA@XZ ??$?0$$Y_And@__Cr@std@@$0A@@?$tuple@AEAPEAVCommandLineFlag@absl@@AEA_N@__Cr@std@@QEAA@AEAPEAVCommandLineFlag@absl@@AEA_N@Z + ??$?0$$Y_And@__Cr@std@@$0A@@?$tuple@AEAV?$variant@IHM@absl@@@__Cr@std@@QEAA@AEAV?$variant@IHM@absl@@@Z + ??$?0$$Y_And@__Cr@std@@$0A@@?$tuple@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@__Cr@std@@QEAA@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@Z + ??$?0$$Y_And@__Cr@std@@$0A@@?$tuple@AEAV?$variant@_K_JIH_N@absl@@@__Cr@std@@QEAA@AEAV?$variant@_K_JIH_N@absl@@@Z + ??$?0$$Y_And@__Cr@std@@$0A@@?$tuple@AEAV?$variant@_K_JN@absl@@@__Cr@std@@QEAA@AEAV?$variant@_K_JN@absl@@@Z ??$?0$$Y_And@__Cr@std@@$0A@@?$tuple@AEBQEAVCommandLineFlag@absl@@@__Cr@std@@QEAA@AEBQEAVCommandLineFlag@absl@@@Z ??$?0$00X@?$unique_ptr@$$BY0A@PEAU?$__hash_node_base@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@V?$__bucket_list_deallocator@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QEAA@XZ ??$?0$00X@?$unique_ptr@$$BY0A@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@V?$__bucket_list_deallocator@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QEAA@XZ @@ -56,6 +60,10 @@ EXPORTS ??$?0$00X@?$unique_ptr@XUDynValueDeleter@flags_internal@absl@@@__Cr@std@@QEAA@$$T@Z ??$?0$00X@?$unique_ptr@XUDynValueDeleter@flags_internal@absl@@@__Cr@std@@QEAA@PEAX$$QEAUDynValueDeleter@flags_internal@absl@@@Z ??$?0$0A@$$Z$$QEAPEAVCommandLineFlag@absl@@$$Z$S$$Z$$V$$ZPEAV01@@?$__tuple_impl@U?$__tuple_indices@$0A@@__Cr@std@@$$QEAPEAVCommandLineFlag@absl@@@__Cr@std@@QEAA@U?$__tuple_indices@$0A@@12@U?$__tuple_types@$$QEAPEAVCommandLineFlag@absl@@@12@U?$__tuple_indices@$S@12@U?$__tuple_types@$$V@12@$$QEAPEAVCommandLineFlag@absl@@@Z + ??$?0$0A@$$ZAEAV?$variant@IHM@absl@@$$Z$S$$Z$$V$$ZAEAV01@@?$__tuple_impl@U?$__tuple_indices@$0A@@__Cr@std@@AEAV?$variant@IHM@absl@@@__Cr@std@@QEAA@U?$__tuple_indices@$0A@@12@U?$__tuple_types@AEAV?$variant@IHM@absl@@@12@U?$__tuple_indices@$S@12@U?$__tuple_types@$$V@12@AEAV?$variant@IHM@absl@@@Z + ??$?0$0A@$$ZAEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@$$Z$S$$Z$$V$$ZAEAV01@@?$__tuple_impl@U?$__tuple_indices@$0A@@__Cr@std@@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@__Cr@std@@QEAA@U?$__tuple_indices@$0A@@12@U?$__tuple_types@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@12@U?$__tuple_indices@$S@12@U?$__tuple_types@$$V@12@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@Z + ??$?0$0A@$$ZAEAV?$variant@_K_JIH_N@absl@@$$Z$S$$Z$$V$$ZAEAV01@@?$__tuple_impl@U?$__tuple_indices@$0A@@__Cr@std@@AEAV?$variant@_K_JIH_N@absl@@@__Cr@std@@QEAA@U?$__tuple_indices@$0A@@12@U?$__tuple_types@AEAV?$variant@_K_JIH_N@absl@@@12@U?$__tuple_indices@$S@12@U?$__tuple_types@$$V@12@AEAV?$variant@_K_JIH_N@absl@@@Z + ??$?0$0A@$$ZAEAV?$variant@_K_JN@absl@@$$Z$S$$Z$$V$$ZAEAV01@@?$__tuple_impl@U?$__tuple_indices@$0A@@__Cr@std@@AEAV?$variant@_K_JN@absl@@@__Cr@std@@QEAA@U?$__tuple_indices@$0A@@12@U?$__tuple_types@AEAV?$variant@_K_JN@absl@@@12@U?$__tuple_indices@$S@12@U?$__tuple_types@$$V@12@AEAV?$variant@_K_JN@absl@@@Z ??$?0$0A@$$ZAEBQEAVCommandLineFlag@absl@@$$Z$S$$Z$$V$$ZAEBQEAV01@@?$__tuple_impl@U?$__tuple_indices@$0A@@__Cr@std@@AEBQEAVCommandLineFlag@absl@@@__Cr@std@@QEAA@U?$__tuple_indices@$0A@@12@U?$__tuple_types@AEBQEAVCommandLineFlag@absl@@@12@U?$__tuple_indices@$S@12@U?$__tuple_types@$$V@12@AEBQEAVCommandLineFlag@absl@@@Z ??$?0$0A@$00$$ZAEAPEAVCommandLineFlag@absl@@AEA_N$$Z$S$$Z$$V$$ZAEAPEAV01@AEA_N@?$__tuple_impl@U?$__tuple_indices@$0A@$00@__Cr@std@@AEAPEAVCommandLineFlag@absl@@AEA_N@__Cr@std@@QEAA@U?$__tuple_indices@$0A@$00@12@U?$__tuple_types@AEAPEAVCommandLineFlag@absl@@AEA_N@12@U?$__tuple_indices@$S@12@U?$__tuple_types@$$V@12@AEAPEAVCommandLineFlag@absl@@AEA_N@Z ??$?0$0A@$00$$ZPEAVCommandLineFlag@absl@@_N$$Z$S$$Z$$V$$ZAEAPEAV01@AEA_N@?$__tuple_impl@U?$__tuple_indices@$0A@$00@__Cr@std@@PEAVCommandLineFlag@absl@@_N@__Cr@std@@QEAA@U?$__tuple_indices@$0A@$00@12@U?$__tuple_types@PEAVCommandLineFlag@absl@@_N@12@U?$__tuple_indices@$S@12@U?$__tuple_types@$$V@12@AEAPEAVCommandLineFlag@absl@@AEA_N@Z @@ -84,6 +92,10 @@ EXPORTS ??$?0AEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$$T$00@?$CompressedTuple@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@PEAUPayload@status_internal@absl@@@container_internal@absl@@QEAA@AEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$$QEA$$T@Z ??$?0AEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$$T@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@PEAUPayload@status_internal@absl@@@container_internal@absl@@U?$integer_sequence@_K$0A@$00@__Cr@std@@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@AEAV?$allocator@UPayload@status_internal@absl@@@56@$$QEA$$T@Z ??$?0AEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@?$Storage@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QEAA@Uin_place_t@__Cr@std@@AEAV?$allocator@UPayload@status_internal@absl@@@56@@Z + ??$?0AEAV?$variant@IHM@absl@@$0A@@?$__tuple_leaf@$0A@AEAV?$variant@IHM@absl@@$0A@@__Cr@std@@QEAA@AEAV?$variant@IHM@absl@@@Z + ??$?0AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@$0A@@?$__tuple_leaf@$0A@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@$0A@@__Cr@std@@QEAA@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@Z + ??$?0AEAV?$variant@_K_JIH_N@absl@@$0A@@?$__tuple_leaf@$0A@AEAV?$variant@_K_JIH_N@absl@@$0A@@__Cr@std@@QEAA@AEAV?$variant@_K_JIH_N@absl@@@Z + ??$?0AEAV?$variant@_K_JN@absl@@$0A@@?$__tuple_leaf@$0A@AEAV?$variant@_K_JN@absl@@$0A@@__Cr@std@@QEAA@AEAV?$variant@_K_JN@absl@@@Z ??$?0AEAVCord@absl@@$0A@@?$optional@VCord@absl@@@__Cr@std@@QEAA@AEAVCord@absl@@@Z ??$?0AEAVCord@absl@@@?$__optional_destruct_base@VCord@absl@@$0A@@__Cr@std@@QEAA@Uin_place_t@12@AEAVCord@absl@@@Z ??$?0AEAY0BM@$$CBD$0A@@?$NoDestructor@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@absl@@QEAA@AEAY0BM@$$CBD@Z @@ -285,6 +297,11 @@ EXPORTS ??$?OUsecond_tag@detail@cctz@time_internal@absl@@U01234@@detail@cctz@time_internal@absl@@YA_NAEBV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@0123@0@Z ??$?PUsecond_tag@detail@cctz@time_internal@absl@@U01234@@detail@cctz@time_internal@absl@@YA_NAEBV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@0123@0@Z ??$?R$$CBUPrefixCrc@CrcCordState@crc_internal@absl@@U0123@$0A@@__copy_impl@__Cr@std@@QEBA?AU?$pair@PEBUPrefixCrc@CrcCordState@crc_internal@absl@@PEAU1234@@12@PEBUPrefixCrc@CrcCordState@crc_internal@absl@@0PEAU4567@@Z + ??$?R$00@?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@QEBA_KU?$integral_constant@_K$00@__Cr@std@@@Z + ??$?R$01@?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@QEBA_KU?$integral_constant@_K$01@__Cr@std@@@Z + ??$?R$02@?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@QEBA_KU?$integral_constant@_K$02@__Cr@std@@@Z + ??$?R$0?0@?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@QEBA_KU?$integral_constant@_K$0?0@__Cr@std@@@Z + ??$?R$0A@@?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@QEBA_KU?$integral_constant@_K$0A@@__Cr@std@@@Z ??$?RAEAPEAVLogSink@absl@@@__identity@__Cr@std@@QEBAAEAPEAVLogSink@absl@@AEAPEAV34@@Z ??$?RAEAPEBDAEAHAEAY0LLI@DAEBQEBDPEAD@?$AtomicHook@P6AXPEBDH000@Z@base_internal@absl@@QEBAXAEAPEBDAEAHAEAY0LLI@DAEBQEBD$$QEAPEAD@Z ??$?RAEAPEBVCommandLineFlag@absl@@@__identity@__Cr@std@@QEBAAEAPEBVCommandLineFlag@absl@@AEAPEBV34@@Z @@ -322,6 +339,7 @@ EXPORTS ??$?RV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBUpiecewise_construct_t@12@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@12@V?$tuple@AEBQEAVCommandLineFlag@absl@@@12@@FindElement@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@QEBA?AVconst_iterator@123@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBUpiecewise_construct_t@67@$$QEAV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@67@$$QEAV?$tuple@AEBQEAVCommandLineFlag@absl@@@67@@Z ??$?RV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBUpiecewise_construct_t@12@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@12@V?$tuple@AEBQEAVCommandLineFlag@absl@@@12@@HashElement@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@QEBA_KAEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBUpiecewise_construct_t@56@$$QEAV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@56@$$QEAV?$tuple@AEBQEAVCommandLineFlag@absl@@@56@@Z ??$?RVDuration@absl@@V01@@?$__less@XX@__Cr@std@@QEBA_NAEBVDuration@absl@@0@Z + ??$?RVMixingHashState@hash_internal@absl@@@CombineRaw@hash_internal@absl@@QEBA?AVMixingHashState@12@V312@_K@Z ??$?RW4LogSeverity@absl@@AEBQEBDHAEAPEBD@?$AtomicHook@P6AXW4LogSeverity@absl@@PEBDHAEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z@base_internal@absl@@QEBAX$$QEAW4LogSeverity@2@AEBQEBD$$QEAHAEAPEBD@Z ??$?RW4LogSeverity@absl@@AEBQEBDHAEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@?$AtomicHook@P6AXW4LogSeverity@absl@@PEBDHAEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z@base_internal@absl@@QEBAX$$QEAW4LogSeverity@2@AEBQEBD$$QEAHAEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ??$?RW4LogSeverity@absl@@AEBQEBDHAEAY0CC@$$CBD@?$AtomicHook@P6AXW4LogSeverity@absl@@PEBDHAEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z@base_internal@absl@@QEBAX$$QEAW4LogSeverity@2@AEBQEBD$$QEAHAEAY0CC@$$CBD@Z @@ -336,6 +354,36 @@ EXPORTS ??$AbslHashValue@VMixingHashState@hash_internal@absl@@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z ??$AbslHashValue@VMixingHashState@hash_internal@absl@@AEB_K@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBV?$tuple@AEB_K@__Cr@std@@@Z ??$AbslStringify@VStringifySink@strings_internal@absl@@@absl@@YAXAEAVStringifySink@strings_internal@0@UHex@0@@Z + ??$Access@$00AEAV?$variant@IHM@absl@@@VariantCoreAccess@variant_internal@absl@@SAAEAHAEAV?$variant@IHM@2@@Z + ??$Access@$00AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@VariantCoreAccess@variant_internal@absl@@SAAEAV?$variant@_K_JN@2@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@2@@Z + ??$Access@$00AEAV?$variant@_K_JIH_N@absl@@@VariantCoreAccess@variant_internal@absl@@SAAEA_JAEAV?$variant@_K_JIH_N@2@@Z + ??$Access@$00AEAV?$variant@_K_JN@absl@@@VariantCoreAccess@variant_internal@absl@@SAAEA_JAEAV?$variant@_K_JN@2@@Z + ??$Access@$01AEAV?$variant@IHM@absl@@@VariantCoreAccess@variant_internal@absl@@SAAEAMAEAV?$variant@IHM@2@@Z + ??$Access@$01AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@VariantCoreAccess@variant_internal@absl@@SAAEAV?$Span@$$CBD@2@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@2@@Z + ??$Access@$01AEAV?$variant@_K_JIH_N@absl@@@VariantCoreAccess@variant_internal@absl@@SAAEAIAEAV?$variant@_K_JIH_N@2@@Z + ??$Access@$01AEAV?$variant@_K_JN@absl@@@VariantCoreAccess@variant_internal@absl@@SAAEANAEAV?$variant@_K_JN@2@@Z + ??$Access@$02AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@VariantCoreAccess@variant_internal@absl@@SAAEAV?$variant@IHM@2@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@2@@Z + ??$Access@$02AEAV?$variant@_K_JIH_N@absl@@@VariantCoreAccess@variant_internal@absl@@SAAEAHAEAV?$variant@_K_JIH_N@2@@Z + ??$Access@$03AEAV?$variant@_K_JIH_N@absl@@@VariantCoreAccess@variant_internal@absl@@SAAEA_NAEAV?$variant@_K_JIH_N@2@@Z + ??$Access@$0A@AEAV?$variant@IHM@absl@@@VariantCoreAccess@variant_internal@absl@@SAAEAIAEAV?$variant@IHM@2@@Z + ??$Access@$0A@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@VariantCoreAccess@variant_internal@absl@@SAAEAV?$variant@_K_JIH_N@2@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@2@@Z + ??$Access@$0A@AEAV?$variant@_K_JIH_N@absl@@@VariantCoreAccess@variant_internal@absl@@SAAEA_KAEAV?$variant@_K_JIH_N@2@@Z + ??$Access@$0A@AEAV?$variant@_K_JN@absl@@@VariantCoreAccess@variant_internal@absl@@SAAEA_KAEAV?$variant@_K_JN@2@@Z + ??$AccessUnion@AEAT?$Union@IHM@variant_internal@absl@@$00@variant_internal@absl@@YAAEAHAEAT?$Union@IHM@01@U?$integral_constant@_K$00@__Cr@std@@@Z + ??$AccessUnion@AEAT?$Union@IHM@variant_internal@absl@@$01@variant_internal@absl@@YAAEAMAEAT?$Union@IHM@01@U?$integral_constant@_K$01@__Cr@std@@@Z + ??$AccessUnion@AEAT?$Union@IHM@variant_internal@absl@@$0A@@variant_internal@absl@@YAAEAIAEAT?$Union@IHM@01@U?$integral_constant@_K$0A@@__Cr@std@@@Z + ??$AccessUnion@AEAT?$Union@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@variant_internal@absl@@$00@variant_internal@absl@@YAAEAV?$variant@_K_JN@1@AEAT?$Union@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@01@U?$integral_constant@_K$00@__Cr@std@@@Z + ??$AccessUnion@AEAT?$Union@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@variant_internal@absl@@$01@variant_internal@absl@@YAAEAV?$Span@$$CBD@1@AEAT?$Union@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@01@U?$integral_constant@_K$01@__Cr@std@@@Z + ??$AccessUnion@AEAT?$Union@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@variant_internal@absl@@$02@variant_internal@absl@@YAAEAV?$variant@IHM@1@AEAT?$Union@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@01@U?$integral_constant@_K$02@__Cr@std@@@Z + ??$AccessUnion@AEAT?$Union@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@variant_internal@absl@@$0A@@variant_internal@absl@@YAAEAV?$variant@_K_JIH_N@1@AEAT?$Union@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@01@U?$integral_constant@_K$0A@@__Cr@std@@@Z + ??$AccessUnion@AEAT?$Union@_K_JIH_N@variant_internal@absl@@$00@variant_internal@absl@@YAAEA_JAEAT?$Union@_K_JIH_N@01@U?$integral_constant@_K$00@__Cr@std@@@Z + ??$AccessUnion@AEAT?$Union@_K_JIH_N@variant_internal@absl@@$01@variant_internal@absl@@YAAEAIAEAT?$Union@_K_JIH_N@01@U?$integral_constant@_K$01@__Cr@std@@@Z + ??$AccessUnion@AEAT?$Union@_K_JIH_N@variant_internal@absl@@$02@variant_internal@absl@@YAAEAHAEAT?$Union@_K_JIH_N@01@U?$integral_constant@_K$02@__Cr@std@@@Z + ??$AccessUnion@AEAT?$Union@_K_JIH_N@variant_internal@absl@@$03@variant_internal@absl@@YAAEA_NAEAT?$Union@_K_JIH_N@01@U?$integral_constant@_K$03@__Cr@std@@@Z + ??$AccessUnion@AEAT?$Union@_K_JIH_N@variant_internal@absl@@$0A@@variant_internal@absl@@YAAEA_KAEAT?$Union@_K_JIH_N@01@U?$integral_constant@_K$0A@@__Cr@std@@@Z + ??$AccessUnion@AEAT?$Union@_K_JN@variant_internal@absl@@$00@variant_internal@absl@@YAAEA_JAEAT?$Union@_K_JN@01@U?$integral_constant@_K$00@__Cr@std@@@Z + ??$AccessUnion@AEAT?$Union@_K_JN@variant_internal@absl@@$01@variant_internal@absl@@YAAEANAEAT?$Union@_K_JN@01@U?$integral_constant@_K$01@__Cr@std@@@Z + ??$AccessUnion@AEAT?$Union@_K_JN@variant_internal@absl@@$0A@@variant_internal@absl@@YAAEA_KAEAT?$Union@_K_JN@01@U?$integral_constant@_K$0A@@__Cr@std@@@Z ??$Add@$00@CordRepBtree@cord_internal@absl@@AEAAXPEAUCordRep@12@@Z ??$Add@$00@CordRepBtree@cord_internal@absl@@AEAAXV?$Span@QEAUCordRep@cord_internal@absl@@@2@@Z ??$Add@$0A@@CordRepBtree@cord_internal@absl@@AEAAXPEAUCordRep@12@@Z @@ -378,10 +426,14 @@ EXPORTS ??$ArgumentToConv@_N@str_format_internal@absl@@YA?AW4FormatConversionCharSet@1@XZ ??$AsciiInAZRange@$00@ascii_internal@absl@@YA_NE@Z ??$AsciiInAZRange@$0A@@ascii_internal@absl@@YA_NE@Z + ??$AsciiInAZRangeNaive@$00@ascii_internal@absl@@YA_NE@Z + ??$AsciiInAZRangeNaive@$0A@@ascii_internal@absl@@YA_NE@Z ??$AsciiStrCaseFold@$00@ascii_internal@absl@@YAXPEADPEBD_K@Z ??$AsciiStrCaseFold@$0A@@ascii_internal@absl@@YAXPEADPEBD_K@Z - ??$AsciiStrCaseFoldLong@$00@ascii_internal@absl@@YAXPEADPEBD_K@Z - ??$AsciiStrCaseFoldLong@$0A@@ascii_internal@absl@@YAXPEADPEBD_K@Z + ??$AsciiStrCaseFoldImpl@$00$00@ascii_internal@absl@@YAXPEADPEBD_K@Z + ??$AsciiStrCaseFoldImpl@$00$0A@@ascii_internal@absl@@YAXPEADPEBD_K@Z + ??$AsciiStrCaseFoldImpl@$0A@$00@ascii_internal@absl@@YAXPEADPEBD_K@Z + ??$AsciiStrCaseFoldImpl@$0A@$0A@@ascii_internal@absl@@YAXPEADPEBD_K@Z ??$AssertHashEqConsistent@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@IEAAXAEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$AssertOnFind@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@IEAAXAEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$AssignElements@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@V?$IteratorValueAdapter@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@V?$move_iterator@PEAUPayload@status_internal@absl@@@23@@inlined_vector_internal@absl@@@inlined_vector_internal@absl@@YAXPEAUPayload@status_internal@1@AEAV?$IteratorValueAdapter@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@V?$move_iterator@PEAUPayload@status_internal@absl@@@23@@01@_K@Z @@ -417,6 +469,8 @@ EXPORTS ??$CopyToEncodedBuffer@$00@LogMessage@log_internal@absl@@AEAAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$CopyToEncodedBuffer@$0A@@LogMessage@log_internal@absl@@AEAAXD_K@Z ??$CopyToEncodedBuffer@$0A@@LogMessage@log_internal@absl@@AEAAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ??$CopyToEncodedBufferWithStructuredProtoField@$00@LogMessage@log_internal@absl@@AEAAXUStructuredProtoField@12@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ??$CopyToEncodedBufferWithStructuredProtoField@$0A@@LogMessage@log_internal@absl@@AEAAXUStructuredProtoField@12@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$CreateDefault@$0A@@CommonFields@container_internal@absl@@SA?AV012@XZ ??$CreateWithCustomLimitImpl@$$V@CordBuffer@absl@@CA?AV01@_K0@Z ??$Deallocate@$07V?$allocator@D@__Cr@std@@@container_internal@absl@@YAXPEAV?$allocator@D@__Cr@std@@PEAX_K@Z @@ -676,6 +730,13 @@ EXPORTS ??$ReadCallback@P6A_NPEBU?$atomic@_N@__Cr@std@@@Z@Condition@absl@@AEBAXPEAP6A_NPEBU?$atomic@_N@__Cr@std@@@Z@Z ??$Register@AEB_JAEA_KAEA_KAEA_KAEAG@?$SampleRecorder@UHashtablezInfo@container_internal@absl@@@profiling_internal@absl@@QEAAPEAUHashtablezInfo@container_internal@2@AEB_JAEA_K11AEAG@Z ??$RotateRight@I@crc_internal@absl@@YAIIHH@Z + ??$Run@$0A@$$Z$00@?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@QEBA_KU?$integral_constant@_N$0A@@__Cr@std@@U?$integer_sequence@_K$0A@@45@U?$integral_constant@_K$00@45@@Z + ??$Run@$0A@$$Z$01@?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@QEBA_KU?$integral_constant@_N$0A@@__Cr@std@@U?$integer_sequence@_K$0A@@45@U?$integral_constant@_K$01@45@@Z + ??$Run@$0A@$$Z$02@?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@QEBA_KU?$integral_constant@_N$0A@@__Cr@std@@U?$integer_sequence@_K$0A@@45@U?$integral_constant@_K$02@45@@Z + ??$Run@$0A@$$Z$0?0@?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@QEBA_KU?$integral_constant@_N$00@__Cr@std@@U?$integer_sequence@_K$0A@@45@U?$integral_constant@_K$0?0@45@@Z + ??$Run@$0A@$$Z$0A@@?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@QEBA_KU?$integral_constant@_N$0A@@__Cr@std@@U?$integer_sequence@_K$0A@@45@U?$integral_constant@_K$0A@@45@@Z + ??$Run@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@@?$VisitIndicesSwitch@$03@variant_internal@absl@@SA_K$$QEAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@12@_K@Z + ??$Run@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@@UnreachableSwitchCase@variant_internal@absl@@SA_K$$QEAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@12@@Z ??$RunWithReentrancyGuard@V@?0???$construct@AEBUpiecewise_construct_t@__Cr@std@@V?$tuple@$$QEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@V?$tuple@$$QEAPEAVCommandLineFlag@absl@@@23@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@34@AEBUpiecewise_construct_t@__Cr@std@@$$QEAV?$tuple@$$QEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@78@$$QEAV?$tuple@$$QEAPEAVCommandLineFlag@absl@@@78@@Z@@CommonFields@container_internal@absl@@QEAAXV@?0???$construct@AEBUpiecewise_construct_t@__Cr@std@@V?$tuple@$$QEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@V?$tuple@$$QEAPEAVCommandLineFlag@absl@@@23@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@12@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@12@AEBUpiecewise_construct_t@__Cr@std@@$$QEAV?$tuple@$$QEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@78@$$QEAV?$tuple@$$QEAPEAVCommandLineFlag@absl@@@78@@Z@@Z ??$RunWithReentrancyGuard@V@?0???$construct@AEBUpiecewise_construct_t@__Cr@std@@V?$tuple@$$QEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@V?$tuple@$$QEAPEAVCommandLineFlag@absl@@@23@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@34@AEBUpiecewise_construct_t@__Cr@std@@$$QEAV?$tuple@$$QEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@78@$$QEAV?$tuple@$$QEAPEAVCommandLineFlag@absl@@@78@@Z@@CommonFields@container_internal@absl@@QEAAXV@?0???$construct@AEBUpiecewise_construct_t@__Cr@std@@V?$tuple@$$QEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@V?$tuple@$$QEAPEAVCommandLineFlag@absl@@@23@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@12@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@12@AEBUpiecewise_construct_t@__Cr@std@@$$QEAV?$tuple@$$QEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@78@$$QEAV?$tuple@$$QEAPEAVCommandLineFlag@absl@@@78@@Z@@Z ??$RunWithReentrancyGuard@V@?0??destroy@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@45@@Z@@CommonFields@container_internal@absl@@QEAAXV@?0??destroy@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@12@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@12@@Z@@Z @@ -996,6 +1057,15 @@ EXPORTS ??$__invoke@AEAU__identity@__Cr@std@@AEBUTransition@cctz@time_internal@absl@@@__Cr@std@@YAAEBUTransition@cctz@time_internal@absl@@AEAU__identity@01@AEBU2345@@Z ??$__invoke@AEAV@?0??SaveFromRegistry@FlagSaverImpl@flags_internal@absl@@QEAAXXZ@AEAVCommandLineFlag@5@@__Cr@std@@YAXAEAV@?0??SaveFromRegistry@FlagSaverImpl@flags_internal@absl@@QEAAXXZ@AEAVCommandLineFlag@6@@Z ??$__invoke@P8FlagImpl@flags_internal@absl@@EAAXXZPEAV123@$$VX@__Cr@std@@YAX$$QEAP8FlagImpl@flags_internal@absl@@EAAXXZ$$QEAPEAV234@@Z + ??$__invoke@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@U?$integral_constant@_K$00@__Cr@std@@@__Cr@std@@YA_K$$QEAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@$$QEAU?$integral_constant@_K$00@01@@Z + ??$__invoke@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@U?$integral_constant@_K$01@__Cr@std@@@__Cr@std@@YA_K$$QEAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@$$QEAU?$integral_constant@_K$01@01@@Z + ??$__invoke@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@U?$integral_constant@_K$02@__Cr@std@@@__Cr@std@@YA_K$$QEAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@$$QEAU?$integral_constant@_K$02@01@@Z + ??$__invoke@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@U?$integral_constant@_K$0?0@__Cr@std@@@__Cr@std@@YA_K$$QEAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@$$QEAU?$integral_constant@_K$0?0@01@@Z + ??$__invoke@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@U?$integral_constant@_K$0A@@__Cr@std@@@__Cr@std@@YA_K$$QEAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@$$QEAU?$integral_constant@_K$0A@@01@@Z + ??$__invoke@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$Span@$$CBD@4@@__Cr@std@@YA_K$$QEAUBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@45@@Z@AEAV?$Span@$$CBD@5@@Z + ??$__invoke@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@IHM@4@@__Cr@std@@YA_K$$QEAUBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@45@@Z@AEAV?$variant@IHM@5@@Z + ??$__invoke@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@_K_JIH_N@4@@__Cr@std@@YA_K$$QEAUBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@45@@Z@AEAV?$variant@_K_JIH_N@5@@Z + ??$__invoke@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@_K_JN@4@@__Cr@std@@YA_K$$QEAUBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@45@@Z@AEAV?$variant@_K_JN@5@@Z ??$__iter_move@AEAPEAPEAVCommandLineFlag@absl@@$0A@@?$_IterOps@U_ClassicAlgPolicy@__Cr@std@@@__Cr@std@@SA$$QEAPEAVCommandLineFlag@absl@@AEAPEAPEAV34@@Z ??$__iter_move@AEAPEAPEBVCommandLineFlag@absl@@$0A@@?$_IterOps@U_ClassicAlgPolicy@__Cr@std@@@__Cr@std@@SA$$QEAPEBVCommandLineFlag@absl@@AEAPEAPEBV34@@Z ??$__launder@$$CBU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@YAPEBU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@01@PEBU201@@Z @@ -1314,6 +1384,10 @@ EXPORTS ??$find_or_prepare_insert_non_soo@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEAA?AU?$pair@Viterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@_N@__Cr@std@@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@45@@Z ??$find_or_prepare_insert_soo@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEAA?AU?$pair@Viterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@_N@__Cr@std@@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@45@@Z ??$find_soo@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEAA?AViterator@012@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ??$forward_as_tuple@AEAV?$variant@IHM@absl@@@__Cr@std@@YA?AV?$tuple@AEAV?$variant@IHM@absl@@@01@AEAV?$variant@IHM@absl@@@Z + ??$forward_as_tuple@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@__Cr@std@@YA?AV?$tuple@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@01@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@Z + ??$forward_as_tuple@AEAV?$variant@_K_JIH_N@absl@@@__Cr@std@@YA?AV?$tuple@AEAV?$variant@_K_JIH_N@absl@@@01@AEAV?$variant@_K_JIH_N@absl@@@Z + ??$forward_as_tuple@AEAV?$variant@_K_JN@absl@@@__Cr@std@@YA?AV?$tuple@AEAV?$variant@_K_JN@absl@@@01@AEAV?$variant@_K_JN@absl@@@Z ??$forward_as_tuple@AEBQEAVCommandLineFlag@absl@@@__Cr@std@@YA?AV?$tuple@AEBQEAVCommandLineFlag@absl@@@01@AEBQEAVCommandLineFlag@absl@@@Z ??$forward_as_tuple@PEAVCommandLineFlag@absl@@@__Cr@std@@YA?AV?$tuple@$$QEAPEAVCommandLineFlag@absl@@@01@$$QEAPEAVCommandLineFlag@absl@@@Z ??$get@$00@?$CompressedTuple@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@PEAPEAUCordRep@cord_internal@absl@@@container_internal@absl@@QEGAAAEAPEAPEAUCordRep@cord_internal@2@XZ @@ -1347,20 +1421,33 @@ EXPORTS ??$get@$0A@@?$CompressedTuple@VCommonFields@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@QEGBAAEBVCommonFields@12@XZ ??$get@$0A@@?$CompressedTuple@_KV?$allocator@D@__Cr@std@@@container_internal@absl@@QEGBAAEB_KXZ ??$get@$0A@AEAPEAVCommandLineFlag@absl@@AEA_N@__Cr@std@@YAAEAPEAVCommandLineFlag@absl@@AEAV?$tuple@AEAPEAVCommandLineFlag@absl@@AEA_N@01@@Z + ??$get@$0A@AEAV?$variant@IHM@absl@@@__Cr@std@@YAAEAV?$variant@IHM@absl@@AEBV?$tuple@AEAV?$variant@IHM@absl@@@01@@Z + ??$get@$0A@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@__Cr@std@@YAAEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@AEBV?$tuple@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@01@@Z + ??$get@$0A@AEAV?$variant@_K_JIH_N@absl@@@__Cr@std@@YAAEAV?$variant@_K_JIH_N@absl@@AEBV?$tuple@AEAV?$variant@_K_JIH_N@absl@@@01@@Z + ??$get@$0A@AEAV?$variant@_K_JN@absl@@@__Cr@std@@YAAEAV?$variant@_K_JN@absl@@AEBV?$tuple@AEAV?$variant@_K_JN@absl@@@01@@Z ??$get@$0A@AEBQEAVCommandLineFlag@absl@@@__Cr@std@@YAAEBQEAVCommandLineFlag@absl@@AEAV?$tuple@AEBQEAVCommandLineFlag@absl@@@01@@Z ??$get@$0A@PEAVCommandLineFlag@absl@@_N@__Cr@std@@YA$$QEAPEAVCommandLineFlag@absl@@$$QEAV?$tuple@PEAVCommandLineFlag@absl@@_N@01@@Z ??$get@$0A@PEAVCommandLineFlag@absl@@_N@__Cr@std@@YAAEAPEAVCommandLineFlag@absl@@AEAV?$tuple@PEAVCommandLineFlag@absl@@_N@01@@Z ??$hash@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SA_KAEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$hash@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SA_KAEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@@Z ??$hash@V?$tuple@AEB_K@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SA_KAEBV?$tuple@AEB_K@__Cr@std@@@Z - ??$hash_bytes@VMixingHashState@hash_internal@absl@@H@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBH@Z - ??$hash_bytes@VMixingHashState@hash_internal@absl@@_K@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEB_K@Z + ??$hash_bytes@VMixingHashState@hash_internal@absl@@H$0A@@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBH@Z + ??$hash_bytes@VMixingHashState@hash_internal@absl@@_K$0A@@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEB_K@Z ??$hash_range_or_bytes@VMixingHashState@hash_internal@absl@@D@hash_internal@absl@@YA?AVMixingHashState@01@V201@PEBD_K@Z ??$hash_tuple@VMixingHashState@hash_internal@absl@@V?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@$0A@$00@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBV?$tuple@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBH@__Cr@std@@U?$integer_sequence@_K$0A@$00@45@@Z ??$hash_tuple@VMixingHashState@hash_internal@absl@@V?$tuple@AEB_K@__Cr@std@@$0A@@hash_internal@absl@@YA?AVMixingHashState@01@V201@AEBV?$tuple@AEB_K@__Cr@std@@U?$integer_sequence@_K$0A@@45@@Z - ??$insert@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@$0A@U123@$0A@$0A@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@QEAA?AU?$pair@Viterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@_N@__Cr@std@@$$QEAU?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@45@@Z + ??$insert@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@$0A@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@QEAA?AU?$pair@Viterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@_N@__Cr@std@@$$QEAU?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@45@@Z ??$insert@V?$__wrap_iter@PEAUraw_view@?1???R?$ConvertToContainer@V?$vector@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V?$allocator@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@23@$0A@@?$Splitter@VByChar@absl@@UAllowEmpty@2@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@strings_internal@absl@@QEBA?AV?$vector@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V?$allocator@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@AEBV345@@Z@@__Cr@std@@$0A@@?$vector@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V?$allocator@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QEAA?AV?$__wrap_iter@PEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@12@V?$__wrap_iter@PEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@12@V?$__wrap_iter@PEAUraw_view@?1???R?$ConvertToContainer@V?$vector@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V?$allocator@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@23@$0A@@?$Splitter@VByChar@absl@@UAllowEmpty@2@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@strings_internal@absl@@QEBA?AV?$vector@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V?$allocator@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@AEBV345@@Z@@12@1@Z ??$invoke@P8FlagImpl@flags_internal@absl@@EAAXXZPEAV123@@__Cr@std@@YAX$$QEAP8FlagImpl@flags_internal@absl@@EAAXXZ$$QEAPEAV234@@Z + ??$invoke@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@U?$integral_constant@_K$00@__Cr@std@@@__Cr@std@@YA_K$$QEAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@$$QEAU?$integral_constant@_K$00@01@@Z + ??$invoke@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@U?$integral_constant@_K$01@__Cr@std@@@__Cr@std@@YA_K$$QEAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@$$QEAU?$integral_constant@_K$01@01@@Z + ??$invoke@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@U?$integral_constant@_K$02@__Cr@std@@@__Cr@std@@YA_K$$QEAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@$$QEAU?$integral_constant@_K$02@01@@Z + ??$invoke@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@U?$integral_constant@_K$0?0@__Cr@std@@@__Cr@std@@YA_K$$QEAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@$$QEAU?$integral_constant@_K$0?0@01@@Z + ??$invoke@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@U?$integral_constant@_K$0A@@__Cr@std@@@__Cr@std@@YA_K$$QEAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@$$QEAU?$integral_constant@_K$0A@@01@@Z + ??$invoke@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$Span@$$CBD@4@@__Cr@std@@YA_K$$QEAUBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@45@@Z@AEAV?$Span@$$CBD@5@@Z + ??$invoke@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@IHM@4@@__Cr@std@@YA_K$$QEAUBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@45@@Z@AEAV?$variant@IHM@5@@Z + ??$invoke@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@_K_JIH_N@4@@__Cr@std@@YA_K$$QEAUBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@45@@Z@AEAV?$variant@_K_JIH_N@5@@Z + ??$invoke@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@_K_JN@4@@__Cr@std@@YA_K$$QEAUBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@45@@Z@AEAV?$variant@_K_JN@5@@Z ??$iter_swap@AEAPEAPEAVCommandLineFlag@absl@@AEAPEAPEAV12@@?$_IterOps@U_ClassicAlgPolicy@__Cr@std@@@__Cr@std@@SAXAEAPEAPEAVCommandLineFlag@absl@@0@Z ??$iter_swap@AEAPEAPEAVCommandLineFlag@absl@@PEAPEAV12@@?$_IterOps@U_ClassicAlgPolicy@__Cr@std@@@__Cr@std@@SAXAEAPEAPEAVCommandLineFlag@absl@@$$QEAPEAPEAV34@@Z ??$iter_swap@AEAPEAPEBVCommandLineFlag@absl@@AEAPEAPEBV12@@?$_IterOps@U_ClassicAlgPolicy@__Cr@std@@@__Cr@std@@SAXAEAPEAPEBVCommandLineFlag@absl@@0@Z @@ -1490,6 +1577,7 @@ EXPORTS ??$transfer_impl@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@@?$common_policy_traits@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@X@container_internal@absl@@CA?AU?$integral_constant@_N$00@__Cr@std@@PEAV?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@45@PEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@12@1URank2@012@@Z ??$upper_bound@PEBUTransition@cctz@time_internal@absl@@U1234@UByCivilTime@1234@@__Cr@std@@YAPEBUTransition@cctz@time_internal@absl@@PEBU2345@0AEBU2345@UByCivilTime@2345@@Z ??$upper_bound@PEBUTransition@cctz@time_internal@absl@@U1234@UByUnixTime@1234@@__Cr@std@@YAPEBUTransition@cctz@time_internal@absl@@PEBU2345@0AEBU2345@UByUnixTime@2345@@Z + ??$visit@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@absl@@YA_K$$QEAUBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@0@YA_KUStructuredProtoField@30@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@0@@Z ??0?$AllocationTransaction@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAA@AEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@@Z ??0?$AllocationTransaction@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAA@AEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@@Z ??0?$AllocationTransaction@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAA@AEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@Z @@ -2438,6 +2526,7 @@ EXPORTS ??Pabsl@@YA_NVint128@0@0@Z ??Pabsl@@YA_NVuint128@0@0@Z ??R@?0???$Initialize@V?$IteratorValueAdapter@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@PEBVFormatArgImpl@str_format_internal@absl@@@inlined_vector_internal@absl@@@?$Storage@VFormatArgImpl@str_format_internal@absl@@$03V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAAXV?$IteratorValueAdapter@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@PEBVFormatArgImpl@str_format_internal@absl@@@23@_K@Z@QEBA?A?@@XZ + ??R@?0???$Run@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@@?$VisitIndicesSwitch@$03@variant_internal@absl@@SA_K$$QEAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@23@_K@Z@QEBA?A?@@XZ ??R@?0???$construct@AEBUpiecewise_construct_t@__Cr@std@@V?$tuple@$$QEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@V?$tuple@$$QEAPEAVCommandLineFlag@absl@@@23@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@23@AEBUpiecewise_construct_t@__Cr@std@@$$QEAV?$tuple@$$QEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@67@$$QEAV?$tuple@$$QEAPEAVCommandLineFlag@absl@@@67@@Z@QEBA?A?@@XZ ??R@?0???$construct@AEBUpiecewise_construct_t@__Cr@std@@V?$tuple@$$QEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@V?$tuple@$$QEAPEAVCommandLineFlag@absl@@@23@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@23@AEBUpiecewise_construct_t@__Cr@std@@$$QEAV?$tuple@$$QEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@67@$$QEAV?$tuple@$$QEAPEAVCommandLineFlag@absl@@@67@@Z@QEBA?A?@@XZ ??R@?0???A?$FixedArray@D$0?0V?$allocator@D@__Cr@std@@@absl@@QEAAAEAD_K@Z@QEBA?A?@@XZ @@ -2526,6 +2615,10 @@ EXPORTS ??R?$function@$$A6A_NAEBVCommandLineFlag@absl@@@Z@__Cr@std@@QEBA_NAEBVCommandLineFlag@absl@@@Z ??R?$hash@PEBUCordRep@cord_internal@absl@@@__Cr@std@@QEBA_KPEBUCordRep@cord_internal@absl@@@Z ??RAllowEmpty@absl@@QEBA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ??RBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@23@@Z@QEAA_KV?$Span@$$CBD@3@@Z + ??RBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@23@@Z@QEAA_KV?$variant@IHM@3@@Z + ??RBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@23@@Z@QEAA_KV?$variant@_K_JIH_N@3@@Z + ??RBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@23@@Z@QEAA_KV?$variant@_K_JN@3@@Z ??RByCivilTime@Transition@cctz@time_internal@absl@@QEBA_NAEBU1234@0@Z ??RByUnixTime@Transition@cctz@time_internal@absl@@QEBA_NAEBU1234@0@Z ??RDynValueDeleter@flags_internal@absl@@QEBAXPEAX@Z @@ -2722,6 +2815,7 @@ EXPORTS ?BreakTime@TimeZoneInfo@cctz@time_internal@absl@@UEBA?AUabsolute_lookup@time_zone@234@AEBV?$time_point@Vsystem_clock@chrono@__Cr@std@@V?$duration@_JV?$ratio@$00$00@__Cr@std@@@234@@chrono@__Cr@std@@@Z ?BreakTime@TimeZoneLibC@cctz@time_internal@absl@@UEBA?AUabsolute_lookup@time_zone@234@AEBV?$time_point@Vsystem_clock@chrono@__Cr@std@@V?$duration@_JV?$ratio@$00$00@__Cr@std@@@234@@chrono@__Cr@std@@@Z ?BufferSizeFor@log_internal@absl@@YA_K_KW4WireType@12@@Z + ?BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@12@@Z ?BytesToHexString@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@34@@Z ?CEscape@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@34@@Z ?CHexEscape@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@34@@Z @@ -2804,6 +2898,7 @@ EXPORTS ?CopyBeginTo@CordRepBtree@cord_internal@absl@@AEBAPEAV123@_K0@Z ?CopyConstruct@flags_internal@absl@@YAXP6APEAXW4FlagOp@12@PEBXPEAX2@Z12@Z ?CopyCordToString@absl@@YAXAEBVCord@1@PEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z + ?CopyInlineToString@InlineData@cord_internal@absl@@QEBAXPEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ?CopyPrefix@CordRepBtree@cord_internal@absl@@AEAA?AUCopyResult@123@_K_N@Z ?CopyRaw@CordRepBtree@cord_internal@absl@@AEBAPEAV123@_K@Z ?CopySuffix@CordRepBtree@cord_internal@absl@@AEAA?AUCopyResult@123@_K@Z @@ -2935,13 +3030,18 @@ EXPORTS ?EnableMutexInvariantDebugging@absl@@YAX_N@Z ?EnableRescheduling@SchedulingGuard@base_internal@absl@@CAX_N@Z ?EnableSymbolizeLogStackTrace@log_internal@absl@@YAX_N@Z + ?Encode32Bit@log_internal@absl@@YA_N_KHPEAV?$Span@D@2@@Z ?Encode32Bit@log_internal@absl@@YA_N_KIPEAV?$Span@D@2@@Z ?Encode64Bit@log_internal@absl@@YA_N_K0PEAV?$Span@D@2@@Z + ?Encode64Bit@log_internal@absl@@YA_N_K_JPEAV?$Span@D@2@@Z ?EncodeBytes@log_internal@absl@@YA_N_KV?$Span@$$CBD@2@PEAV?$Span@D@2@@Z ?EncodeBytesTruncate@log_internal@absl@@YA_N_KV?$Span@$$CBD@2@PEAV?$Span@D@2@@Z + ?EncodeDouble@log_internal@absl@@YA_N_KNPEAV?$Span@D@2@@Z + ?EncodeFloat@log_internal@absl@@YA_N_KMPEAV?$Span@D@2@@Z ?EncodeMessageLength@log_internal@absl@@YAXV?$Span@D@2@PEBV32@@Z ?EncodeMessageStart@log_internal@absl@@YA?AV?$Span@D@2@_K0PEAV32@@Z ?EncodeStringTruncate@log_internal@absl@@YA_N_KV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAV?$Span@D@2@@Z + ?EncodeStructuredProtoField@log_internal@absl@@YA_NUStructuredProtoField@12@AEAV?$Span@D@2@@Z ?EncodeUTF8Char@strings_internal@absl@@YA_KPEAD_U@Z ?EncodeVarint@log_internal@absl@@YA_N_K0PEAV?$Span@D@2@@Z ?EncodeVarint@log_internal@absl@@YA_N_KHPEAV?$Span@D@2@@Z @@ -3262,6 +3362,7 @@ EXPORTS ?HasNoGrowthLeftAndNoDeleted@GrowthInfo@container_internal@absl@@QEBA_NXZ ?HasNode@GraphCycles@synchronization_internal@absl@@QEAA_NUGraphId@23@@Z ?HasRandenHwAesImplementation@random_internal@absl@@YA_NXZ + ?HashTableSizeOverflow@container_internal@absl@@YAXXZ ?HaveLeakSanitizer@absl@@YA_NXZ ?Head@CordzInfo@cord_internal@absl@@SAPEAV123@AEBVCordzSnapshot@23@@Z ?Help@FlagImpl@flags_internal@absl@@EEBA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ @@ -3610,6 +3711,7 @@ EXPORTS ?RawSetStderrThreshold@log_internal@absl@@YAXW4LogSeverityAtLeast@2@@Z ?Read1To3@MixingHashState@hash_internal@absl@@CAIPEBE_K@Z ?Read4To8@MixingHashState@hash_internal@absl@@CA_KPEBE_K@Z + ?Read8@MixingHashState@hash_internal@absl@@CA_KPEBE@Z ?Read9To16@MixingHashState@hash_internal@absl@@CA?AU?$pair@_K_K@__Cr@std@@PEBE_K@Z ?Read@CordRepBtreeNavigator@cord_internal@absl@@QEAA?AUReadResult@123@_K0@Z ?Read@CordRepBtreeReader@cord_internal@absl@@QEAA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@_K0AEAPEAUCordRep@23@@Z @@ -3697,6 +3799,10 @@ EXPORTS ?ReverseConsume@cord_internal@absl@@YAXPEAUCordRep@12@V?$FunctionRef@$$A6AXPEAUCordRep@cord_internal@absl@@_K1@Z@2@@Z ?RoundUp@cord_internal@absl@@YA_K_K0@Z ?RoundUpForTag@cord_internal@absl@@YA_K_K@Z + ?Run@?$ReachableSwitchCase@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@$00@variant_internal@absl@@SA_K$$QEAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@23@@Z + ?Run@?$ReachableSwitchCase@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@$01@variant_internal@absl@@SA_K$$QEAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@23@@Z + ?Run@?$ReachableSwitchCase@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@$02@variant_internal@absl@@SA_K$$QEAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@23@@Z + ?Run@?$ReachableSwitchCase@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@$0A@@variant_internal@absl@@SA_K$$QEAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@23@@Z ?RuntimeTypeId@flags_internal@absl@@YAPEBVtype_info@@P6APEAXW4FlagOp@12@PEBXPEAX2@Z@Z ?SafeToDelete@CordzHandle@cord_internal@absl@@QEBA_NXZ ?Sample@container_internal@absl@@YA?AVHashtablezInfoHandle@12@_K00G@Z @@ -4000,6 +4106,9 @@ EXPORTS ?TryRemove@Mutex@absl@@AEAAXPEAUPerThreadSynch@base_internal@2@@Z ?TypeId@FlagImpl@flags_internal@absl@@EEBAPEBXXZ ?TypeId@PrivateHandleAccessor@flags_internal@absl@@SAPEBXAEBVCommandLineFlag@3@@Z + ?TypeName@CommandLineFlag@absl@@EEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@XZ + ?TypeName@FlagImpl@flags_internal@absl@@EEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@XZ + ?TypeName@PrivateHandleAccessor@flags_internal@absl@@SA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCommandLineFlag@3@@Z ?UTC@Impl@time_zone@cctz@time_internal@absl@@SA?AV2345@XZ ?UTC@TimeZoneIf@cctz@time_internal@absl@@SA?AV?$unique_ptr@VTimeZoneIf@cctz@time_internal@absl@@U?$default_delete@VTimeZoneIf@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@XZ ?UTC@TimeZoneInfo@cctz@time_internal@absl@@SA?AV?$unique_ptr@VTimeZoneInfo@cctz@time_internal@absl@@U?$default_delete@VTimeZoneInfo@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@XZ @@ -4600,6 +4709,7 @@ EXPORTS ?code@StatusRep@status_internal@absl@@QEBA?AW4StatusCode@3@XZ ?combine@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@23@V423@@Z ?combine_contiguous@MixingHashState@hash_internal@absl@@SA?AV123@V123@PEBE_K@Z + ?combine_raw@MixingHashState@hash_internal@absl@@CA?AV123@V123@_K@Z ?common@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEAAAEAVCommonFields@23@XZ ?common@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEBAAEBVCommonFields@23@XZ ?compare_exchange_strong@?$__atomic_base@PEAVTimeZone@absl@@$0A@@__Cr@std@@QEAA_NAEAPEAVTimeZone@absl@@PEAV45@W4memory_order@23@2@Z @@ -4834,6 +4944,10 @@ EXPORTS ?get@?$__temp_value@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAAEAUTransitionType@cctz@time_internal@absl@@XZ ?get@?$__tuple_leaf@$0A@$$QEAPEAVCommandLineFlag@absl@@$0A@@__Cr@std@@QEAAAEAPEAVCommandLineFlag@absl@@XZ ?get@?$__tuple_leaf@$0A@AEAPEAVCommandLineFlag@absl@@$0A@@__Cr@std@@QEAAAEAPEAVCommandLineFlag@absl@@XZ + ?get@?$__tuple_leaf@$0A@AEAV?$variant@IHM@absl@@$0A@@__Cr@std@@QEBAAEAV?$variant@IHM@absl@@XZ + ?get@?$__tuple_leaf@$0A@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@$0A@@__Cr@std@@QEBAAEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@XZ + ?get@?$__tuple_leaf@$0A@AEAV?$variant@_K_JIH_N@absl@@$0A@@__Cr@std@@QEBAAEAV?$variant@_K_JIH_N@absl@@XZ + ?get@?$__tuple_leaf@$0A@AEAV?$variant@_K_JN@absl@@$0A@@__Cr@std@@QEBAAEAV?$variant@_K_JN@absl@@XZ ?get@?$__tuple_leaf@$0A@AEBQEAVCommandLineFlag@absl@@$0A@@__Cr@std@@QEAAAEBQEAVCommandLineFlag@absl@@XZ ?get@?$__tuple_leaf@$0A@PEAVCommandLineFlag@absl@@$0A@@__Cr@std@@QEAAAEAPEAVCommandLineFlag@absl@@XZ ?get@?$unique_ptr@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@V?$__allocator_destructor@V?$allocator@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@@__Cr@std@@QEBAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@XZ @@ -4894,6 +5008,10 @@ EXPORTS ?hour@?$civil_time@Usecond_tag@time_internal@absl@@@detail@cctz@time_internal@absl@@QEBAHXZ ?increment_size@CommonFields@container_internal@absl@@QEAAXXZ ?index@?$probe_seq@$0BA@@container_internal@absl@@QEBA_KXZ + ?index@?$variant@IHM@absl@@QEBA_KXZ + ?index@?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@QEBA_KXZ + ?index@?$variant@_K_JIH_N@absl@@QEBA_KXZ + ?index@?$variant@_K_JN@absl@@QEBA_KXZ ?index@CordRepBtree@cord_internal@absl@@QEBA_KW4EdgeType@123@@Z ?infoz@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AEAA?AVHashtablezInfoHandle@23@XZ ?infoz@CommonFields@container_internal@absl@@QEAA?AVHashtablezInfoHandle@23@XZ diff --git a/naiveproxy/src/third_party/abseil-cpp/symbols_x64_rel.def b/naiveproxy/src/third_party/abseil-cpp/symbols_x64_rel.def index 4f33b9ccb3..a003dc5247 100644 --- a/naiveproxy/src/third_party/abseil-cpp/symbols_x64_rel.def +++ b/naiveproxy/src/third_party/abseil-cpp/symbols_x64_rel.def @@ -34,8 +34,6 @@ EXPORTS ??$Append@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$0A@@Cord@absl@@QEAAX$$QEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ??$AppendImpl@AEBVCord@absl@@@Cord@absl@@AEAAXAEBV01@@Z ??$AppendImpl@VCord@absl@@@Cord@absl@@AEAAX$$QEAV01@@Z - ??$AsciiStrCaseFoldLong@$00@ascii_internal@absl@@YAXPEADPEBD_K@Z - ??$AsciiStrCaseFoldLong@$0A@@ascii_internal@absl@@YAXPEADPEBD_K@Z ??$Base64EscapeInternal@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@strings_internal@absl@@YAXPEBE_KPEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_NPEBD@Z ??$CallOnceImpl@A6AXXZ$$V@base_internal@absl@@YAXPEAU?$atomic@I@__Cr@std@@W4SchedulingMode@01@A6AXXZ@Z ??$CallOnceImpl@P8FlagImpl@flags_internal@absl@@EAAXXZPEAV123@@base_internal@absl@@YAXPEAU?$atomic@I@__Cr@std@@W4SchedulingMode@01@$$QEAP8FlagImpl@flags_internal@1@EAAXXZ$$QEAPEAV671@@Z @@ -60,6 +58,8 @@ EXPORTS ??$CopyToEncodedBuffer@$00@LogMessage@log_internal@absl@@AEAAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$CopyToEncodedBuffer@$0A@@LogMessage@log_internal@absl@@AEAAXD_K@Z ??$CopyToEncodedBuffer@$0A@@LogMessage@log_internal@absl@@AEAAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ??$CopyToEncodedBufferWithStructuredProtoField@$00@LogMessage@log_internal@absl@@AEAAXUStructuredProtoField@12@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ??$CopyToEncodedBufferWithStructuredProtoField@$0A@@LogMessage@log_internal@absl@@AEAAXUStructuredProtoField@12@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$DeallocateStandard@$07@container_internal@absl@@YAXAEAVCommonFields@01@AEBUPolicyFunctions@01@@Z ??$Dispatch@C@FormatArgImpl@str_format_internal@absl@@CA_NTData@012@VFormatConversionSpecImpl@12@PEAX@Z ??$Dispatch@D@FormatArgImpl@str_format_internal@absl@@CA_NTData@012@VFormatConversionSpecImpl@12@PEAX@Z @@ -128,6 +128,7 @@ EXPORTS ??$PopDead@_J_K_K_KG@?$SampleRecorder@UHashtablezInfo@container_internal@absl@@@profiling_internal@absl@@AEAAPEAUHashtablezInfo@container_internal@2@_J_K11G@Z ??$Prepend@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$0A@@Cord@absl@@QEAAX$$QEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ??$Register@AEB_JAEA_KAEA_KAEA_KAEAG@?$SampleRecorder@UHashtablezInfo@container_internal@absl@@@profiling_internal@absl@@QEAAPEAUHashtablezInfo@container_internal@2@AEB_JAEA_K11AEAG@Z + ??$Run@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@@?$VisitIndicesSwitch@$03@variant_internal@absl@@SA_K$$QEAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@12@_K@Z ??$SNPrintF@DHHH@absl@@YAHPEAD_KAEBV?$FormatSpecTemplate@$0BPPPL@$0JPPPL@$0JPPPL@$0JPPPL@@str_format_internal@0@AEBDAEBH44@Z ??$StrCat@PEBD@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@AEBVAlphaNum@0@0000AEBQEBD@Z ??$StrCat@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$$BY02D@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@AEBVAlphaNum@0@0000AEBV123@AEAY02$$CBD@Z @@ -161,6 +162,7 @@ EXPORTS ??$emplace_back@AEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@@?$__split_buffer@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAXAEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@@Z ??$emplace_back@AEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@@?$__split_buffer@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@AEAV?$allocator@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAXAEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@@Z ??$emplace_back@AEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@@?$__split_buffer@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAXAEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@@Z + ??$emplace_back@AEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBV123@AEA_K@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAAEAUViableSubstitution@strings_internal@absl@@AEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@12@AEBV612@AEA_K@Z ??$emplace_back@AEBQEAVCommandLineFlag@absl@@@?$vector@PEAVCommandLineFlag@absl@@V?$allocator@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@QEAAAEAPEAVCommandLineFlag@absl@@AEBQEAV34@@Z ??$emplace_back@AEBQEAVLogSink@absl@@@?$vector@PEAVLogSink@absl@@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@@__Cr@std@@QEAAAEAPEAVLogSink@absl@@AEBQEAV34@@Z ??$emplace_back@AEBQEBVCommandLineFlag@absl@@@?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@QEAAAEAPEBVCommandLineFlag@absl@@AEBQEBV34@@Z @@ -495,7 +497,6 @@ EXPORTS ?CopyCordToString@absl@@YAXAEBVCord@1@PEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ?CopyPrefix@CordRepBtree@cord_internal@absl@@AEAA?AUCopyResult@123@_K_N@Z ?CopySuffix@CordRepBtree@cord_internal@absl@@AEAA?AUCopyResult@123@_K@Z - ?CopyTo@InlineRep@Cord@absl@@QEBAXPEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ?CopyToArraySlowPath@Cord@absl@@AEBAXPEAD@Z ?Crash@Helper@internal_statusor@absl@@SAXAEBVStatus@3@@Z ?Crc32c@CRC@crc_internal@absl@@SAPEAV123@XZ @@ -564,6 +565,7 @@ EXPORTS ?EncodeBytesTruncate@log_internal@absl@@YA_N_KV?$Span@$$CBD@2@PEAV?$Span@D@2@@Z ?EncodeMessageLength@log_internal@absl@@YAXV?$Span@D@2@PEBV32@@Z ?EncodeMessageStart@log_internal@absl@@YA?AV?$Span@D@2@_K0PEAV32@@Z + ?EncodeStructuredProtoField@log_internal@absl@@YA_NUStructuredProtoField@12@AEAV?$Span@D@2@@Z ?EncodeUTF8Char@strings_internal@absl@@YA_KPEAD_U@Z ?EncodeVarint@log_internal@absl@@YA_N_K0PEAV?$Span@D@2@@Z ?EncodeWaitCycles@SpinLock@base_internal@absl@@KAI_J0@Z @@ -764,6 +766,7 @@ EXPORTS ?HasEdge@GraphCycles@synchronization_internal@absl@@QEBA_NUGraphId@23@0@Z ?HasNode@GraphCycles@synchronization_internal@absl@@QEAA_NUGraphId@23@@Z ?HasRandenHwAesImplementation@random_internal@absl@@YA_NXZ + ?HashTableSizeOverflow@container_internal@absl@@YAXXZ ?HaveLeakSanitizer@absl@@YA_NXZ ?Head@CordzInfo@cord_internal@absl@@SAPEAV123@AEBVCordzSnapshot@23@@Z ?Help@FlagImpl@flags_internal@absl@@EEBA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ @@ -1214,6 +1217,9 @@ EXPORTS ?TryRemove@Mutex@absl@@AEAAXPEAUPerThreadSynch@base_internal@2@@Z ?TypeId@FlagImpl@flags_internal@absl@@EEBAPEBXXZ ?TypeId@PrivateHandleAccessor@flags_internal@absl@@SAPEBXAEBVCommandLineFlag@3@@Z + ?TypeName@CommandLineFlag@absl@@EEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@XZ + ?TypeName@FlagImpl@flags_internal@absl@@EEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@XZ + ?TypeName@PrivateHandleAccessor@flags_internal@absl@@SA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCommandLineFlag@3@@Z ?UTC@Impl@time_zone@cctz@time_internal@absl@@SA?AV2345@XZ ?UTC@TimeZoneIf@cctz@time_internal@absl@@SA?AV?$unique_ptr@VTimeZoneIf@cctz@time_internal@absl@@U?$default_delete@VTimeZoneIf@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@XZ ?UTC@TimeZoneInfo@cctz@time_internal@absl@@SA?AV?$unique_ptr@VTimeZoneInfo@cctz@time_internal@absl@@U?$default_delete@VTimeZoneInfo@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@XZ @@ -1298,7 +1304,6 @@ EXPORTS ?__throw_length_error@?$vector@UUnrecognizedFlag@absl@@V?$allocator@UUnrecognizedFlag@absl@@@__Cr@std@@@__Cr@std@@CAXXZ ?__throw_length_error@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__Cr@std@@@__Cr@std@@CAXXZ ?__throw_length_error@?$vector@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@V?$allocator@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@CAXXZ - ?combine_contiguous@MixingHashState@hash_internal@absl@@SA?AV123@V123@PEBE_K@Z ?cycle_clock_source_@CycleClock@base_internal@absl@@0U?$atomic@P6A_JXZ@__Cr@std@@A ?day_difference@impl@detail@cctz@time_internal@absl@@YA_J_JCC0CC@Z ?description@time_zone@cctz@time_internal@absl@@QEBA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ diff --git a/naiveproxy/src/third_party/abseil-cpp/symbols_x64_rel_asan.def b/naiveproxy/src/third_party/abseil-cpp/symbols_x64_rel_asan.def index edefe36cb6..4c4067fc80 100644 --- a/naiveproxy/src/third_party/abseil-cpp/symbols_x64_rel_asan.def +++ b/naiveproxy/src/third_party/abseil-cpp/symbols_x64_rel_asan.def @@ -37,8 +37,6 @@ EXPORTS ??$Append@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$0A@@Cord@absl@@QEAAX$$QEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ??$AppendImpl@AEBVCord@absl@@@Cord@absl@@AEAAXAEBV01@@Z ??$AppendImpl@VCord@absl@@@Cord@absl@@AEAAX$$QEAV01@@Z - ??$AsciiStrCaseFoldLong@$00@ascii_internal@absl@@YAXPEADPEBD_K@Z - ??$AsciiStrCaseFoldLong@$0A@@ascii_internal@absl@@YAXPEADPEBD_K@Z ??$Base64EscapeInternal@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@strings_internal@absl@@YAXPEBE_KPEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_NPEBD@Z ??$CallOnceImpl@A6AXXZ$$V@base_internal@absl@@YAXPEAU?$atomic@I@__Cr@std@@W4SchedulingMode@01@A6AXXZ@Z ??$CallOnceImpl@P8FlagImpl@flags_internal@absl@@EAAXXZPEAV123@@base_internal@absl@@YAXPEAU?$atomic@I@__Cr@std@@W4SchedulingMode@01@$$QEAP8FlagImpl@flags_internal@1@EAAXXZ$$QEAPEAV671@@Z @@ -63,6 +61,8 @@ EXPORTS ??$CopyToEncodedBuffer@$00@LogMessage@log_internal@absl@@AEAAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$CopyToEncodedBuffer@$0A@@LogMessage@log_internal@absl@@AEAAXD_K@Z ??$CopyToEncodedBuffer@$0A@@LogMessage@log_internal@absl@@AEAAXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ??$CopyToEncodedBufferWithStructuredProtoField@$00@LogMessage@log_internal@absl@@AEAAXUStructuredProtoField@12@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ??$CopyToEncodedBufferWithStructuredProtoField@$0A@@LogMessage@log_internal@absl@@AEAAXUStructuredProtoField@12@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$DeallocateStandard@$07@container_internal@absl@@YAXAEAVCommonFields@01@AEBUPolicyFunctions@01@@Z ??$DecomposePair@UEmplaceDecomposable@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@container_internal@absl@@YA?AU?$pair@Viterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@_N@__Cr@std@@$$QEAUEmplaceDecomposable@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@01@$$QEAU?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@34@@Z ??$DecomposePair@UEmplaceDecomposable@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@U?$pair@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@container_internal@absl@@YA?AU?$pair@Viterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@_N@__Cr@std@@$$QEAUEmplaceDecomposable@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@01@$$QEAU?$pair@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@34@@Z @@ -134,6 +134,7 @@ EXPORTS ??$PopDead@_J_K_K_KG@?$SampleRecorder@UHashtablezInfo@container_internal@absl@@@profiling_internal@absl@@AEAAPEAUHashtablezInfo@container_internal@2@_J_K11G@Z ??$Prepend@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$0A@@Cord@absl@@QEAAX$$QEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ??$Register@AEB_JAEA_KAEA_KAEA_KAEAG@?$SampleRecorder@UHashtablezInfo@container_internal@absl@@@profiling_internal@absl@@QEAAPEAUHashtablezInfo@container_internal@2@AEB_JAEA_K11AEAG@Z + ??$Run@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@@?$VisitIndicesSwitch@$03@variant_internal@absl@@SA_K$$QEAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YA_KUStructuredProtoField@34@@Z@AEAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@12@_K@Z ??$SNPrintF@DHHH@absl@@YAHPEAD_KAEBV?$FormatSpecTemplate@$0BPPPL@$0JPPPL@$0JPPPL@$0JPPPL@@str_format_internal@0@AEBDAEBH44@Z ??$STLStringResizeUninitializedAmortized@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@strings_internal@absl@@YAXPEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_K@Z ??$SharedCompareImpl@VCord@absl@@@absl@@YAHAEBVCord@0@0@Z @@ -518,9 +519,9 @@ EXPORTS ?ConvertFloatImpl@str_format_internal@absl@@YA_NNAEBVFormatConversionSpecImpl@12@PEAVFormatSinkImpl@12@@Z ?ConvertFloatImpl@str_format_internal@absl@@YA_NOAEBVFormatConversionSpecImpl@12@PEAVFormatSinkImpl@12@@Z ?CopyCordToString@absl@@YAXAEBVCord@1@PEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z + ?CopyInlineToString@InlineData@cord_internal@absl@@QEBAXPEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ?CopyPrefix@CordRepBtree@cord_internal@absl@@AEAA?AUCopyResult@123@_K_N@Z ?CopySuffix@CordRepBtree@cord_internal@absl@@AEAA?AUCopyResult@123@_K@Z - ?CopyTo@InlineRep@Cord@absl@@QEBAXPEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ?CopyToArrayImpl@Cord@absl@@AEBAXPEAD@Z ?CopyToArraySlowPath@Cord@absl@@AEBAXPEAD@Z ?Crash@Helper@internal_statusor@absl@@SAXAEBVStatus@3@@Z @@ -590,6 +591,7 @@ EXPORTS ?EncodeBytesTruncate@log_internal@absl@@YA_N_KV?$Span@$$CBD@2@PEAV?$Span@D@2@@Z ?EncodeMessageLength@log_internal@absl@@YAXV?$Span@D@2@PEBV32@@Z ?EncodeMessageStart@log_internal@absl@@YA?AV?$Span@D@2@_K0PEAV32@@Z + ?EncodeStructuredProtoField@log_internal@absl@@YA_NUStructuredProtoField@12@AEAV?$Span@D@2@@Z ?EncodeUTF8Char@strings_internal@absl@@YA_KPEAD_U@Z ?EncodeVarint@log_internal@absl@@YA_N_K0PEAV?$Span@D@2@@Z ?EncodeWaitCycles@SpinLock@base_internal@absl@@KAI_J0@Z @@ -791,6 +793,7 @@ EXPORTS ?HasEdge@GraphCycles@synchronization_internal@absl@@QEBA_NUGraphId@23@0@Z ?HasNode@GraphCycles@synchronization_internal@absl@@QEAA_NUGraphId@23@@Z ?HasRandenHwAesImplementation@random_internal@absl@@YA_NXZ + ?HashTableSizeOverflow@container_internal@absl@@YAXXZ ?HaveLeakSanitizer@absl@@YA_NXZ ?Head@CordzInfo@cord_internal@absl@@SAPEAV123@AEBVCordzSnapshot@23@@Z ?Help@FlagImpl@flags_internal@absl@@EEBA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ @@ -1247,6 +1250,9 @@ EXPORTS ?TryRemove@Mutex@absl@@AEAAXPEAUPerThreadSynch@base_internal@2@@Z ?TypeId@FlagImpl@flags_internal@absl@@EEBAPEBXXZ ?TypeId@PrivateHandleAccessor@flags_internal@absl@@SAPEBXAEBVCommandLineFlag@3@@Z + ?TypeName@CommandLineFlag@absl@@EEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@XZ + ?TypeName@FlagImpl@flags_internal@absl@@EEBA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@XZ + ?TypeName@PrivateHandleAccessor@flags_internal@absl@@SA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBVCommandLineFlag@3@@Z ?UTC@Impl@time_zone@cctz@time_internal@absl@@SA?AV2345@XZ ?UTC@TimeZoneIf@cctz@time_internal@absl@@SA?AV?$unique_ptr@VTimeZoneIf@cctz@time_internal@absl@@U?$default_delete@VTimeZoneIf@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@XZ ?UTC@TimeZoneInfo@cctz@time_internal@absl@@SA?AV?$unique_ptr@VTimeZoneInfo@cctz@time_internal@absl@@U?$default_delete@VTimeZoneInfo@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@XZ @@ -1338,7 +1344,6 @@ EXPORTS ?__throw_length_error@?$vector@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@V?$allocator@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@CAXXZ ?begin@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@QEAA?AViterator@123@XZ ?clear@?$deque@UPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAXXZ - ?combine_contiguous@MixingHashState@hash_internal@absl@@SA?AV123@V123@PEBE_K@Z ?cycle_clock_source_@CycleClock@base_internal@absl@@0U?$atomic@P6A_JXZ@__Cr@std@@A ?day_difference@impl@detail@cctz@time_internal@absl@@YA_J_JCC0CC@Z ?description@time_zone@cctz@time_internal@absl@@QEBA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ diff --git a/naiveproxy/src/third_party/abseil-cpp/symbols_x86_dbg.def b/naiveproxy/src/third_party/abseil-cpp/symbols_x86_dbg.def index 02c5cb77c6..e290a81a1d 100644 --- a/naiveproxy/src/third_party/abseil-cpp/symbols_x86_dbg.def +++ b/naiveproxy/src/third_party/abseil-cpp/symbols_x86_dbg.def @@ -31,6 +31,10 @@ EXPORTS ??$?0$$V@PlacementImpl@?$NoDestructor@VFlagRegistry@flags_internal@absl@@@absl@@QAE@XZ ??$?0$$V@PlacementImpl@?$NoDestructor@VMutex@absl@@@absl@@QAE@XZ ??$?0$$Y_And@__Cr@std@@$0A@@?$tuple@AAPAVCommandLineFlag@absl@@AA_N@__Cr@std@@QAE@AAPAVCommandLineFlag@absl@@AA_N@Z + ??$?0$$Y_And@__Cr@std@@$0A@@?$tuple@AAV?$variant@IHM@absl@@@__Cr@std@@QAE@AAV?$variant@IHM@absl@@@Z + ??$?0$$Y_And@__Cr@std@@$0A@@?$tuple@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@__Cr@std@@QAE@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@Z + ??$?0$$Y_And@__Cr@std@@$0A@@?$tuple@AAV?$variant@_K_JIH_N@absl@@@__Cr@std@@QAE@AAV?$variant@_K_JIH_N@absl@@@Z + ??$?0$$Y_And@__Cr@std@@$0A@@?$tuple@AAV?$variant@_K_JN@absl@@@__Cr@std@@QAE@AAV?$variant@_K_JN@absl@@@Z ??$?0$$Y_And@__Cr@std@@$0A@@?$tuple@ABQAVCommandLineFlag@absl@@@__Cr@std@@QAE@ABQAVCommandLineFlag@absl@@@Z ??$?0$00X@?$unique_ptr@$$BY0A@PAU?$__hash_node_base@PAU?$__hash_node@PBUCordRep@cord_internal@absl@@PAX@__Cr@std@@@__Cr@std@@V?$__bucket_list_deallocator@V?$allocator@PAU?$__hash_node_base@PAU?$__hash_node@PBUCordRep@cord_internal@absl@@PAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QAE@XZ ??$?0$00X@?$unique_ptr@$$BY0A@PAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PAX@__Cr@std@@@__Cr@std@@V?$__bucket_list_deallocator@V?$allocator@PAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QAE@XZ @@ -56,6 +60,10 @@ EXPORTS ??$?0$00X@?$unique_ptr@XUDynValueDeleter@flags_internal@absl@@@__Cr@std@@QAE@$$T@Z ??$?0$00X@?$unique_ptr@XUDynValueDeleter@flags_internal@absl@@@__Cr@std@@QAE@PAX$$QAUDynValueDeleter@flags_internal@absl@@@Z ??$?0$0A@$$Z$$QAPAVCommandLineFlag@absl@@$$Z$S$$Z$$V$$ZPAV01@@?$__tuple_impl@U?$__tuple_indices@$0A@@__Cr@std@@$$QAPAVCommandLineFlag@absl@@@__Cr@std@@QAE@U?$__tuple_indices@$0A@@12@U?$__tuple_types@$$QAPAVCommandLineFlag@absl@@@12@U?$__tuple_indices@$S@12@U?$__tuple_types@$$V@12@$$QAPAVCommandLineFlag@absl@@@Z + ??$?0$0A@$$ZAAV?$variant@IHM@absl@@$$Z$S$$Z$$V$$ZAAV01@@?$__tuple_impl@U?$__tuple_indices@$0A@@__Cr@std@@AAV?$variant@IHM@absl@@@__Cr@std@@QAE@U?$__tuple_indices@$0A@@12@U?$__tuple_types@AAV?$variant@IHM@absl@@@12@U?$__tuple_indices@$S@12@U?$__tuple_types@$$V@12@AAV?$variant@IHM@absl@@@Z + ??$?0$0A@$$ZAAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@$$Z$S$$Z$$V$$ZAAV01@@?$__tuple_impl@U?$__tuple_indices@$0A@@__Cr@std@@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@__Cr@std@@QAE@U?$__tuple_indices@$0A@@12@U?$__tuple_types@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@12@U?$__tuple_indices@$S@12@U?$__tuple_types@$$V@12@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@Z + ??$?0$0A@$$ZAAV?$variant@_K_JIH_N@absl@@$$Z$S$$Z$$V$$ZAAV01@@?$__tuple_impl@U?$__tuple_indices@$0A@@__Cr@std@@AAV?$variant@_K_JIH_N@absl@@@__Cr@std@@QAE@U?$__tuple_indices@$0A@@12@U?$__tuple_types@AAV?$variant@_K_JIH_N@absl@@@12@U?$__tuple_indices@$S@12@U?$__tuple_types@$$V@12@AAV?$variant@_K_JIH_N@absl@@@Z + ??$?0$0A@$$ZAAV?$variant@_K_JN@absl@@$$Z$S$$Z$$V$$ZAAV01@@?$__tuple_impl@U?$__tuple_indices@$0A@@__Cr@std@@AAV?$variant@_K_JN@absl@@@__Cr@std@@QAE@U?$__tuple_indices@$0A@@12@U?$__tuple_types@AAV?$variant@_K_JN@absl@@@12@U?$__tuple_indices@$S@12@U?$__tuple_types@$$V@12@AAV?$variant@_K_JN@absl@@@Z ??$?0$0A@$$ZABQAVCommandLineFlag@absl@@$$Z$S$$Z$$V$$ZABQAV01@@?$__tuple_impl@U?$__tuple_indices@$0A@@__Cr@std@@ABQAVCommandLineFlag@absl@@@__Cr@std@@QAE@U?$__tuple_indices@$0A@@12@U?$__tuple_types@ABQAVCommandLineFlag@absl@@@12@U?$__tuple_indices@$S@12@U?$__tuple_types@$$V@12@ABQAVCommandLineFlag@absl@@@Z ??$?0$0A@$00$$ZAAPAVCommandLineFlag@absl@@AA_N$$Z$S$$Z$$V$$ZAAPAV01@AA_N@?$__tuple_impl@U?$__tuple_indices@$0A@$00@__Cr@std@@AAPAVCommandLineFlag@absl@@AA_N@__Cr@std@@QAE@U?$__tuple_indices@$0A@$00@12@U?$__tuple_types@AAPAVCommandLineFlag@absl@@AA_N@12@U?$__tuple_indices@$S@12@U?$__tuple_types@$$V@12@AAPAVCommandLineFlag@absl@@AA_N@Z ??$?0$0A@$00$$ZPAVCommandLineFlag@absl@@_N$$Z$S$$Z$$V$$ZAAPAV01@AA_N@?$__tuple_impl@U?$__tuple_indices@$0A@$00@__Cr@std@@PAVCommandLineFlag@absl@@_N@__Cr@std@@QAE@U?$__tuple_indices@$0A@$00@12@U?$__tuple_types@PAVCommandLineFlag@absl@@_N@12@U?$__tuple_indices@$S@12@U?$__tuple_types@$$V@12@AAPAVCommandLineFlag@absl@@AA_N@Z @@ -87,6 +95,10 @@ EXPORTS ??$?0AAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$$T$00@?$CompressedTuple@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@PAUPayload@status_internal@absl@@@container_internal@absl@@QAE@AAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$$QA$$T@Z ??$?0AAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$$T@?$CompressedTupleImpl@V?$CompressedTuple@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@PAUPayload@status_internal@absl@@@container_internal@absl@@U?$integer_sequence@I$0A@$00@__Cr@std@@$00@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@__Cr@std@@AAV?$allocator@UPayload@status_internal@absl@@@56@$$QA$$T@Z ??$?0AAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@?$Storage@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$0A@$00@internal_compressed_tuple@container_internal@absl@@QAE@Uin_place_t@__Cr@std@@AAV?$allocator@UPayload@status_internal@absl@@@56@@Z + ??$?0AAV?$variant@IHM@absl@@$0A@@?$__tuple_leaf@$0A@AAV?$variant@IHM@absl@@$0A@@__Cr@std@@QAE@AAV?$variant@IHM@absl@@@Z + ??$?0AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@$0A@@?$__tuple_leaf@$0A@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@$0A@@__Cr@std@@QAE@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@Z + ??$?0AAV?$variant@_K_JIH_N@absl@@$0A@@?$__tuple_leaf@$0A@AAV?$variant@_K_JIH_N@absl@@$0A@@__Cr@std@@QAE@AAV?$variant@_K_JIH_N@absl@@@Z + ??$?0AAV?$variant@_K_JN@absl@@$0A@@?$__tuple_leaf@$0A@AAV?$variant@_K_JN@absl@@$0A@@__Cr@std@@QAE@AAV?$variant@_K_JN@absl@@@Z ??$?0AAVCord@absl@@$0A@@?$optional@VCord@absl@@@__Cr@std@@QAE@AAVCord@absl@@@Z ??$?0AAVCord@absl@@@?$__optional_destruct_base@VCord@absl@@$0A@@__Cr@std@@QAE@Uin_place_t@12@AAVCord@absl@@@Z ??$?0AAY0BM@$$CBD$0A@@?$NoDestructor@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@absl@@QAE@AAY0BM@$$CBD@Z @@ -285,6 +297,11 @@ EXPORTS ??$?OUsecond_tag@detail@cctz@time_internal@absl@@U01234@@detail@cctz@time_internal@absl@@YA_NABV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@0123@0@Z ??$?PUsecond_tag@detail@cctz@time_internal@absl@@U01234@@detail@cctz@time_internal@absl@@YA_NABV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@0123@0@Z ??$?R$$CBUPrefixCrc@CrcCordState@crc_internal@absl@@U0123@$0A@@__copy_impl@__Cr@std@@QBE?AU?$pair@PBUPrefixCrc@CrcCordState@crc_internal@absl@@PAU1234@@12@PBUPrefixCrc@CrcCordState@crc_internal@absl@@0PAU4567@@Z + ??$?R$00@?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@QBEIU?$integral_constant@I$00@__Cr@std@@@Z + ??$?R$01@?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@QBEIU?$integral_constant@I$01@__Cr@std@@@Z + ??$?R$02@?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@QBEIU?$integral_constant@I$02@__Cr@std@@@Z + ??$?R$0A@@?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@QBEIU?$integral_constant@I$0A@@__Cr@std@@@Z + ??$?R$0PPPPPPPP@@?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@QBEIU?$integral_constant@I$0PPPPPPPP@@__Cr@std@@@Z ??$?RAAPAVLogSink@absl@@@__identity@__Cr@std@@QBEAAPAVLogSink@absl@@AAPAV34@@Z ??$?RAAPBDAAHAAY0LLI@DABQBDPAD@?$AtomicHook@P6AXPBDH000@Z@base_internal@absl@@QBEXAAPBDAAHAAY0LLI@DABQBD$$QAPAD@Z ??$?RAAPBVCommandLineFlag@absl@@@__identity@__Cr@std@@QBEAAPBVCommandLineFlag@absl@@AAPBV34@@Z @@ -322,6 +339,7 @@ EXPORTS ??$?RV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABUpiecewise_construct_t@12@V?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@12@V?$tuple@ABQAVCommandLineFlag@absl@@@12@@FindElement@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@QBE?AVconst_iterator@123@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABUpiecewise_construct_t@67@$$QAV?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@67@$$QAV?$tuple@ABQAVCommandLineFlag@absl@@@67@@Z ??$?RV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABUpiecewise_construct_t@12@V?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@12@V?$tuple@ABQAVCommandLineFlag@absl@@@12@@HashElement@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@QBEIABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABUpiecewise_construct_t@56@$$QAV?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@56@$$QAV?$tuple@ABQAVCommandLineFlag@absl@@@56@@Z ??$?RVDuration@absl@@V01@@?$__less@XX@__Cr@std@@QBE_NABVDuration@absl@@0@Z + ??$?RVMixingHashState@hash_internal@absl@@@CombineRaw@hash_internal@absl@@QBE?AVMixingHashState@12@V312@_K@Z ??$?RW4LogSeverity@absl@@ABQBDHAAPBD@?$AtomicHook@P6AXW4LogSeverity@absl@@PBDHABV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z@base_internal@absl@@QBEX$$QAW4LogSeverity@2@ABQBD$$QAHAAPBD@Z ??$?RW4LogSeverity@absl@@ABQBDHAAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@?$AtomicHook@P6AXW4LogSeverity@absl@@PBDHABV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z@base_internal@absl@@QBEX$$QAW4LogSeverity@2@ABQBD$$QAHAAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ??$?RW4LogSeverity@absl@@ABQBDHAAY0CC@$$CBD@?$AtomicHook@P6AXW4LogSeverity@absl@@PBDHABV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z@base_internal@absl@@QBEX$$QAW4LogSeverity@2@ABQBD$$QAHAAY0CC@$$CBD@Z @@ -336,6 +354,36 @@ EXPORTS ??$AbslHashValue@VMixingHashState@hash_internal@absl@@ABI@hash_internal@absl@@YA?AVMixingHashState@01@V201@ABV?$tuple@ABI@__Cr@std@@@Z ??$AbslHashValue@VMixingHashState@hash_internal@absl@@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@hash_internal@absl@@YA?AVMixingHashState@01@V201@ABV?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@__Cr@std@@@Z ??$AbslStringify@VStringifySink@strings_internal@absl@@@absl@@YAXAAVStringifySink@strings_internal@0@UHex@0@@Z + ??$Access@$00AAV?$variant@IHM@absl@@@VariantCoreAccess@variant_internal@absl@@SAAAHAAV?$variant@IHM@2@@Z + ??$Access@$00AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@VariantCoreAccess@variant_internal@absl@@SAAAV?$variant@_K_JN@2@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@2@@Z + ??$Access@$00AAV?$variant@_K_JIH_N@absl@@@VariantCoreAccess@variant_internal@absl@@SAAA_JAAV?$variant@_K_JIH_N@2@@Z + ??$Access@$00AAV?$variant@_K_JN@absl@@@VariantCoreAccess@variant_internal@absl@@SAAA_JAAV?$variant@_K_JN@2@@Z + ??$Access@$01AAV?$variant@IHM@absl@@@VariantCoreAccess@variant_internal@absl@@SAAAMAAV?$variant@IHM@2@@Z + ??$Access@$01AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@VariantCoreAccess@variant_internal@absl@@SAAAV?$Span@$$CBD@2@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@2@@Z + ??$Access@$01AAV?$variant@_K_JIH_N@absl@@@VariantCoreAccess@variant_internal@absl@@SAAAIAAV?$variant@_K_JIH_N@2@@Z + ??$Access@$01AAV?$variant@_K_JN@absl@@@VariantCoreAccess@variant_internal@absl@@SAAANAAV?$variant@_K_JN@2@@Z + ??$Access@$02AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@VariantCoreAccess@variant_internal@absl@@SAAAV?$variant@IHM@2@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@2@@Z + ??$Access@$02AAV?$variant@_K_JIH_N@absl@@@VariantCoreAccess@variant_internal@absl@@SAAAHAAV?$variant@_K_JIH_N@2@@Z + ??$Access@$03AAV?$variant@_K_JIH_N@absl@@@VariantCoreAccess@variant_internal@absl@@SAAA_NAAV?$variant@_K_JIH_N@2@@Z + ??$Access@$0A@AAV?$variant@IHM@absl@@@VariantCoreAccess@variant_internal@absl@@SAAAIAAV?$variant@IHM@2@@Z + ??$Access@$0A@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@VariantCoreAccess@variant_internal@absl@@SAAAV?$variant@_K_JIH_N@2@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@2@@Z + ??$Access@$0A@AAV?$variant@_K_JIH_N@absl@@@VariantCoreAccess@variant_internal@absl@@SAAA_KAAV?$variant@_K_JIH_N@2@@Z + ??$Access@$0A@AAV?$variant@_K_JN@absl@@@VariantCoreAccess@variant_internal@absl@@SAAA_KAAV?$variant@_K_JN@2@@Z + ??$AccessUnion@AAT?$Union@IHM@variant_internal@absl@@$00@variant_internal@absl@@YAAAHAAT?$Union@IHM@01@U?$integral_constant@I$00@__Cr@std@@@Z + ??$AccessUnion@AAT?$Union@IHM@variant_internal@absl@@$01@variant_internal@absl@@YAAAMAAT?$Union@IHM@01@U?$integral_constant@I$01@__Cr@std@@@Z + ??$AccessUnion@AAT?$Union@IHM@variant_internal@absl@@$0A@@variant_internal@absl@@YAAAIAAT?$Union@IHM@01@U?$integral_constant@I$0A@@__Cr@std@@@Z + ??$AccessUnion@AAT?$Union@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@variant_internal@absl@@$00@variant_internal@absl@@YAAAV?$variant@_K_JN@1@AAT?$Union@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@01@U?$integral_constant@I$00@__Cr@std@@@Z + ??$AccessUnion@AAT?$Union@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@variant_internal@absl@@$01@variant_internal@absl@@YAAAV?$Span@$$CBD@1@AAT?$Union@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@01@U?$integral_constant@I$01@__Cr@std@@@Z + ??$AccessUnion@AAT?$Union@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@variant_internal@absl@@$02@variant_internal@absl@@YAAAV?$variant@IHM@1@AAT?$Union@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@01@U?$integral_constant@I$02@__Cr@std@@@Z + ??$AccessUnion@AAT?$Union@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@variant_internal@absl@@$0A@@variant_internal@absl@@YAAAV?$variant@_K_JIH_N@1@AAT?$Union@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@01@U?$integral_constant@I$0A@@__Cr@std@@@Z + ??$AccessUnion@AAT?$Union@_K_JIH_N@variant_internal@absl@@$00@variant_internal@absl@@YAAA_JAAT?$Union@_K_JIH_N@01@U?$integral_constant@I$00@__Cr@std@@@Z + ??$AccessUnion@AAT?$Union@_K_JIH_N@variant_internal@absl@@$01@variant_internal@absl@@YAAAIAAT?$Union@_K_JIH_N@01@U?$integral_constant@I$01@__Cr@std@@@Z + ??$AccessUnion@AAT?$Union@_K_JIH_N@variant_internal@absl@@$02@variant_internal@absl@@YAAAHAAT?$Union@_K_JIH_N@01@U?$integral_constant@I$02@__Cr@std@@@Z + ??$AccessUnion@AAT?$Union@_K_JIH_N@variant_internal@absl@@$03@variant_internal@absl@@YAAA_NAAT?$Union@_K_JIH_N@01@U?$integral_constant@I$03@__Cr@std@@@Z + ??$AccessUnion@AAT?$Union@_K_JIH_N@variant_internal@absl@@$0A@@variant_internal@absl@@YAAA_KAAT?$Union@_K_JIH_N@01@U?$integral_constant@I$0A@@__Cr@std@@@Z + ??$AccessUnion@AAT?$Union@_K_JN@variant_internal@absl@@$00@variant_internal@absl@@YAAA_JAAT?$Union@_K_JN@01@U?$integral_constant@I$00@__Cr@std@@@Z + ??$AccessUnion@AAT?$Union@_K_JN@variant_internal@absl@@$01@variant_internal@absl@@YAAANAAT?$Union@_K_JN@01@U?$integral_constant@I$01@__Cr@std@@@Z + ??$AccessUnion@AAT?$Union@_K_JN@variant_internal@absl@@$0A@@variant_internal@absl@@YAAA_KAAT?$Union@_K_JN@01@U?$integral_constant@I$0A@@__Cr@std@@@Z ??$Add@$00@CordRepBtree@cord_internal@absl@@AAEXPAUCordRep@12@@Z ??$Add@$00@CordRepBtree@cord_internal@absl@@AAEXV?$Span@QAUCordRep@cord_internal@absl@@@2@@Z ??$Add@$0A@@CordRepBtree@cord_internal@absl@@AAEXPAUCordRep@12@@Z @@ -378,10 +426,14 @@ EXPORTS ??$ArgumentToConv@_N@str_format_internal@absl@@YA?AW4FormatConversionCharSet@1@XZ ??$AsciiInAZRange@$00@ascii_internal@absl@@YA_NE@Z ??$AsciiInAZRange@$0A@@ascii_internal@absl@@YA_NE@Z + ??$AsciiInAZRangeNaive@$00@ascii_internal@absl@@YA_NE@Z + ??$AsciiInAZRangeNaive@$0A@@ascii_internal@absl@@YA_NE@Z ??$AsciiStrCaseFold@$00@ascii_internal@absl@@YAXPADPBDI@Z ??$AsciiStrCaseFold@$0A@@ascii_internal@absl@@YAXPADPBDI@Z - ??$AsciiStrCaseFoldLong@$00@ascii_internal@absl@@YAXPADPBDI@Z - ??$AsciiStrCaseFoldLong@$0A@@ascii_internal@absl@@YAXPADPBDI@Z + ??$AsciiStrCaseFoldImpl@$00$00@ascii_internal@absl@@YAXPADPBDI@Z + ??$AsciiStrCaseFoldImpl@$00$0A@@ascii_internal@absl@@YAXPADPBDI@Z + ??$AsciiStrCaseFoldImpl@$0A@$00@ascii_internal@absl@@YAXPADPBDI@Z + ??$AsciiStrCaseFoldImpl@$0A@$0A@@ascii_internal@absl@@YAXPADPBDI@Z ??$AssertHashEqConsistent@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@IAEXABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$AssertOnFind@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@IAEXABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$AssignElements@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@V?$IteratorValueAdapter@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@V?$move_iterator@PAUPayload@status_internal@absl@@@23@@inlined_vector_internal@absl@@@inlined_vector_internal@absl@@YAXPAUPayload@status_internal@1@AAV?$IteratorValueAdapter@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@V?$move_iterator@PAUPayload@status_internal@absl@@@23@@01@I@Z @@ -417,6 +469,8 @@ EXPORTS ??$CopyToEncodedBuffer@$00@LogMessage@log_internal@absl@@AAEXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$CopyToEncodedBuffer@$0A@@LogMessage@log_internal@absl@@AAEXDI@Z ??$CopyToEncodedBuffer@$0A@@LogMessage@log_internal@absl@@AAEXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ??$CopyToEncodedBufferWithStructuredProtoField@$00@LogMessage@log_internal@absl@@AAEXUStructuredProtoField@12@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ??$CopyToEncodedBufferWithStructuredProtoField@$0A@@LogMessage@log_internal@absl@@AAEXUStructuredProtoField@12@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$CreateDefault@$0A@@CommonFields@container_internal@absl@@SA?AV012@XZ ??$CreateWithCustomLimitImpl@$$V@CordBuffer@absl@@CA?AV01@II@Z ??$Deallocate@$03V?$allocator@D@__Cr@std@@@container_internal@absl@@YAXPAV?$allocator@D@__Cr@std@@PAXI@Z @@ -676,6 +730,13 @@ EXPORTS ??$ReadCallback@P6A_NPBU?$atomic@_N@__Cr@std@@@Z@Condition@absl@@ABEXPAP6A_NPBU?$atomic@_N@__Cr@std@@@Z@Z ??$Register@AB_JAAIAAIAAIAAG@?$SampleRecorder@UHashtablezInfo@container_internal@absl@@@profiling_internal@absl@@QAEPAUHashtablezInfo@container_internal@2@AB_JAAI11AAG@Z ??$RotateRight@I@crc_internal@absl@@YAIIHH@Z + ??$Run@$0A@$$Z$00@?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@QBEIU?$integral_constant@_N$0A@@__Cr@std@@U?$integer_sequence@I$0A@@45@U?$integral_constant@I$00@45@@Z + ??$Run@$0A@$$Z$01@?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@QBEIU?$integral_constant@_N$0A@@__Cr@std@@U?$integer_sequence@I$0A@@45@U?$integral_constant@I$01@45@@Z + ??$Run@$0A@$$Z$02@?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@QBEIU?$integral_constant@_N$0A@@__Cr@std@@U?$integer_sequence@I$0A@@45@U?$integral_constant@I$02@45@@Z + ??$Run@$0A@$$Z$0A@@?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@QBEIU?$integral_constant@_N$0A@@__Cr@std@@U?$integer_sequence@I$0A@@45@U?$integral_constant@I$0A@@45@@Z + ??$Run@$0A@$$Z$0PPPPPPPP@@?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@QBEIU?$integral_constant@_N$00@__Cr@std@@U?$integer_sequence@I$0A@@45@U?$integral_constant@I$0PPPPPPPP@@45@@Z + ??$Run@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@@?$VisitIndicesSwitch@$03@variant_internal@absl@@SAI$$QAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@12@I@Z + ??$Run@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@@UnreachableSwitchCase@variant_internal@absl@@SAI$$QAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@12@@Z ??$RunWithReentrancyGuard@V@?0???$construct@ABUpiecewise_construct_t@__Cr@std@@V?$tuple@$$QAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@V?$tuple@$$QAPAVCommandLineFlag@absl@@@23@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AAEXPAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@34@ABUpiecewise_construct_t@__Cr@std@@$$QAV?$tuple@$$QAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@78@$$QAV?$tuple@$$QAPAVCommandLineFlag@absl@@@78@@Z@@CommonFields@container_internal@absl@@QAEXV@?0???$construct@ABUpiecewise_construct_t@__Cr@std@@V?$tuple@$$QAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@V?$tuple@$$QAPAVCommandLineFlag@absl@@@23@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@12@AAEXPAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@12@ABUpiecewise_construct_t@__Cr@std@@$$QAV?$tuple@$$QAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@78@$$QAV?$tuple@$$QAPAVCommandLineFlag@absl@@@78@@Z@@Z ??$RunWithReentrancyGuard@V@?0???$construct@ABUpiecewise_construct_t@__Cr@std@@V?$tuple@$$QBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@V?$tuple@$$QAPAVCommandLineFlag@absl@@@23@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AAEXPAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@34@ABUpiecewise_construct_t@__Cr@std@@$$QAV?$tuple@$$QBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@78@$$QAV?$tuple@$$QAPAVCommandLineFlag@absl@@@78@@Z@@CommonFields@container_internal@absl@@QAEXV@?0???$construct@ABUpiecewise_construct_t@__Cr@std@@V?$tuple@$$QBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@V?$tuple@$$QAPAVCommandLineFlag@absl@@@23@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@12@AAEXPAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@12@ABUpiecewise_construct_t@__Cr@std@@$$QAV?$tuple@$$QBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@78@$$QAV?$tuple@$$QAPAVCommandLineFlag@absl@@@78@@Z@@Z ??$RunWithReentrancyGuard@V@?0??destroy@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AAEXPAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@45@@Z@@CommonFields@container_internal@absl@@QAEXV@?0??destroy@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@12@AAEXPAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@12@@Z@@Z @@ -996,6 +1057,15 @@ EXPORTS ??$__invoke@AAU__identity@__Cr@std@@ABUTransition@cctz@time_internal@absl@@@__Cr@std@@YAABUTransition@cctz@time_internal@absl@@AAU__identity@01@ABU2345@@Z ??$__invoke@AAV@?0??SaveFromRegistry@FlagSaverImpl@flags_internal@absl@@QAEXXZ@AAVCommandLineFlag@5@@__Cr@std@@YAXAAV@?0??SaveFromRegistry@FlagSaverImpl@flags_internal@absl@@QAEXXZ@AAVCommandLineFlag@6@@Z ??$__invoke@P8FlagImpl@flags_internal@absl@@AEXXZPAV123@$$VX@__Cr@std@@YAX$$QAP8FlagImpl@flags_internal@absl@@AEXXZ$$QAPAV234@@Z + ??$__invoke@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@U?$integral_constant@I$00@__Cr@std@@@__Cr@std@@YAI$$QAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@$$QAU?$integral_constant@I$00@01@@Z + ??$__invoke@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@U?$integral_constant@I$01@__Cr@std@@@__Cr@std@@YAI$$QAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@$$QAU?$integral_constant@I$01@01@@Z + ??$__invoke@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@U?$integral_constant@I$02@__Cr@std@@@__Cr@std@@YAI$$QAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@$$QAU?$integral_constant@I$02@01@@Z + ??$__invoke@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@U?$integral_constant@I$0A@@__Cr@std@@@__Cr@std@@YAI$$QAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@$$QAU?$integral_constant@I$0A@@01@@Z + ??$__invoke@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@U?$integral_constant@I$0PPPPPPPP@@__Cr@std@@@__Cr@std@@YAI$$QAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@$$QAU?$integral_constant@I$0PPPPPPPP@@01@@Z + ??$__invoke@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$Span@$$CBD@4@@__Cr@std@@YAI$$QAUBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@45@@Z@AAV?$Span@$$CBD@5@@Z + ??$__invoke@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@IHM@4@@__Cr@std@@YAI$$QAUBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@45@@Z@AAV?$variant@IHM@5@@Z + ??$__invoke@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@_K_JIH_N@4@@__Cr@std@@YAI$$QAUBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@45@@Z@AAV?$variant@_K_JIH_N@5@@Z + ??$__invoke@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@_K_JN@4@@__Cr@std@@YAI$$QAUBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@45@@Z@AAV?$variant@_K_JN@5@@Z ??$__iter_move@AAPAPAVCommandLineFlag@absl@@$0A@@?$_IterOps@U_ClassicAlgPolicy@__Cr@std@@@__Cr@std@@SA$$QAPAVCommandLineFlag@absl@@AAPAPAV34@@Z ??$__iter_move@AAPAPBVCommandLineFlag@absl@@$0A@@?$_IterOps@U_ClassicAlgPolicy@__Cr@std@@@__Cr@std@@SA$$QAPBVCommandLineFlag@absl@@AAPAPBV34@@Z ??$__launder@$$CBU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@YAPBU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@01@PBU201@@Z @@ -1314,6 +1384,10 @@ EXPORTS ??$find_or_prepare_insert_non_soo@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AAE?AU?$pair@Viterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@_N@__Cr@std@@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@45@@Z ??$find_or_prepare_insert_soo@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AAE?AU?$pair@Viterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@_N@__Cr@std@@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@45@@Z ??$find_soo@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AAE?AViterator@012@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ??$forward_as_tuple@AAV?$variant@IHM@absl@@@__Cr@std@@YA?AV?$tuple@AAV?$variant@IHM@absl@@@01@AAV?$variant@IHM@absl@@@Z + ??$forward_as_tuple@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@__Cr@std@@YA?AV?$tuple@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@01@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@Z + ??$forward_as_tuple@AAV?$variant@_K_JIH_N@absl@@@__Cr@std@@YA?AV?$tuple@AAV?$variant@_K_JIH_N@absl@@@01@AAV?$variant@_K_JIH_N@absl@@@Z + ??$forward_as_tuple@AAV?$variant@_K_JN@absl@@@__Cr@std@@YA?AV?$tuple@AAV?$variant@_K_JN@absl@@@01@AAV?$variant@_K_JN@absl@@@Z ??$forward_as_tuple@ABQAVCommandLineFlag@absl@@@__Cr@std@@YA?AV?$tuple@ABQAVCommandLineFlag@absl@@@01@ABQAVCommandLineFlag@absl@@@Z ??$forward_as_tuple@PAVCommandLineFlag@absl@@@__Cr@std@@YA?AV?$tuple@$$QAPAVCommandLineFlag@absl@@@01@$$QAPAVCommandLineFlag@absl@@@Z ??$get@$00@?$CompressedTuple@IV?$allocator@D@__Cr@std@@@container_internal@absl@@QGAEAAV?$allocator@D@__Cr@std@@XZ @@ -1347,20 +1421,33 @@ EXPORTS ??$get@$0A@@?$CompressedTuple@VCommonFields@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@QGAEAAVCommonFields@12@XZ ??$get@$0A@@?$CompressedTuple@VCommonFields@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@QGBEABVCommonFields@12@XZ ??$get@$0A@AAPAVCommandLineFlag@absl@@AA_N@__Cr@std@@YAAAPAVCommandLineFlag@absl@@AAV?$tuple@AAPAVCommandLineFlag@absl@@AA_N@01@@Z + ??$get@$0A@AAV?$variant@IHM@absl@@@__Cr@std@@YAAAV?$variant@IHM@absl@@ABV?$tuple@AAV?$variant@IHM@absl@@@01@@Z + ??$get@$0A@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@__Cr@std@@YAAAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@ABV?$tuple@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@@01@@Z + ??$get@$0A@AAV?$variant@_K_JIH_N@absl@@@__Cr@std@@YAAAV?$variant@_K_JIH_N@absl@@ABV?$tuple@AAV?$variant@_K_JIH_N@absl@@@01@@Z + ??$get@$0A@AAV?$variant@_K_JN@absl@@@__Cr@std@@YAAAV?$variant@_K_JN@absl@@ABV?$tuple@AAV?$variant@_K_JN@absl@@@01@@Z ??$get@$0A@ABQAVCommandLineFlag@absl@@@__Cr@std@@YAABQAVCommandLineFlag@absl@@AAV?$tuple@ABQAVCommandLineFlag@absl@@@01@@Z ??$get@$0A@PAVCommandLineFlag@absl@@_N@__Cr@std@@YA$$QAPAVCommandLineFlag@absl@@$$QAV?$tuple@PAVCommandLineFlag@absl@@_N@01@@Z ??$get@$0A@PAVCommandLineFlag@absl@@_N@__Cr@std@@YAAAPAVCommandLineFlag@absl@@AAV?$tuple@PAVCommandLineFlag@absl@@_N@01@@Z ??$hash@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SAIABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$hash@V?$tuple@ABI@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SAIABV?$tuple@ABI@__Cr@std@@@Z ??$hash@V?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@__Cr@std@@$0A@@MixingHashState@hash_internal@absl@@SAIABV?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@__Cr@std@@@Z - ??$hash_bytes@VMixingHashState@hash_internal@absl@@H@hash_internal@absl@@YA?AVMixingHashState@01@V201@ABH@Z - ??$hash_bytes@VMixingHashState@hash_internal@absl@@I@hash_internal@absl@@YA?AVMixingHashState@01@V201@ABI@Z + ??$hash_bytes@VMixingHashState@hash_internal@absl@@H$0A@@hash_internal@absl@@YA?AVMixingHashState@01@V201@ABH@Z + ??$hash_bytes@VMixingHashState@hash_internal@absl@@I$0A@@hash_internal@absl@@YA?AVMixingHashState@01@V201@ABI@Z ??$hash_range_or_bytes@VMixingHashState@hash_internal@absl@@D@hash_internal@absl@@YA?AVMixingHashState@01@V201@PBDI@Z ??$hash_tuple@VMixingHashState@hash_internal@absl@@V?$tuple@ABI@__Cr@std@@$0A@@hash_internal@absl@@YA?AVMixingHashState@01@V201@ABV?$tuple@ABI@__Cr@std@@U?$integer_sequence@I$0A@@45@@Z ??$hash_tuple@VMixingHashState@hash_internal@absl@@V?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@__Cr@std@@$0A@$00@hash_internal@absl@@YA?AVMixingHashState@01@V201@ABV?$tuple@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@__Cr@std@@U?$integer_sequence@I$0A@$00@45@@Z - ??$insert@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@$0A@U123@$0A@$0A@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@QAE?AU?$pair@Viterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@_N@__Cr@std@@$$QAU?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@45@@Z + ??$insert@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@$0A@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@QAE?AU?$pair@Viterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@_N@__Cr@std@@$$QAU?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@45@@Z ??$insert@V?$__wrap_iter@PAUraw_view@?1???R?$ConvertToContainer@V?$vector@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V?$allocator@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@23@$0A@@?$Splitter@VByChar@absl@@UAllowEmpty@2@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@strings_internal@absl@@QBE?AV?$vector@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V?$allocator@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@ABV345@@Z@@__Cr@std@@$0A@@?$vector@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V?$allocator@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QAE?AV?$__wrap_iter@PAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@12@V?$__wrap_iter@PBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@12@V?$__wrap_iter@PAUraw_view@?1???R?$ConvertToContainer@V?$vector@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V?$allocator@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@23@$0A@@?$Splitter@VByChar@absl@@UAllowEmpty@2@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@strings_internal@absl@@QBE?AV?$vector@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V?$allocator@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@ABV345@@Z@@12@1@Z ??$invoke@P8FlagImpl@flags_internal@absl@@AEXXZPAV123@@__Cr@std@@YAX$$QAP8FlagImpl@flags_internal@absl@@AEXXZ$$QAPAV234@@Z + ??$invoke@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@U?$integral_constant@I$00@__Cr@std@@@__Cr@std@@YAI$$QAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@$$QAU?$integral_constant@I$00@01@@Z + ??$invoke@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@U?$integral_constant@I$01@__Cr@std@@@__Cr@std@@YAI$$QAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@$$QAU?$integral_constant@I$01@01@@Z + ??$invoke@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@U?$integral_constant@I$02@__Cr@std@@@__Cr@std@@YAI$$QAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@$$QAU?$integral_constant@I$02@01@@Z + ??$invoke@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@U?$integral_constant@I$0A@@__Cr@std@@@__Cr@std@@YAI$$QAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@$$QAU?$integral_constant@I$0A@@01@@Z + ??$invoke@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@U?$integral_constant@I$0PPPPPPPP@@__Cr@std@@@__Cr@std@@YAI$$QAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@$$QAU?$integral_constant@I$0PPPPPPPP@@01@@Z + ??$invoke@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$Span@$$CBD@4@@__Cr@std@@YAI$$QAUBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@45@@Z@AAV?$Span@$$CBD@5@@Z + ??$invoke@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@IHM@4@@__Cr@std@@YAI$$QAUBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@45@@Z@AAV?$variant@IHM@5@@Z + ??$invoke@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@_K_JIH_N@4@@__Cr@std@@YAI$$QAUBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@45@@Z@AAV?$variant@_K_JIH_N@5@@Z + ??$invoke@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@_K_JN@4@@__Cr@std@@YAI$$QAUBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@45@@Z@AAV?$variant@_K_JN@5@@Z ??$iter_swap@AAPAPAVCommandLineFlag@absl@@AAPAPAV12@@?$_IterOps@U_ClassicAlgPolicy@__Cr@std@@@__Cr@std@@SAXAAPAPAVCommandLineFlag@absl@@0@Z ??$iter_swap@AAPAPAVCommandLineFlag@absl@@PAPAV12@@?$_IterOps@U_ClassicAlgPolicy@__Cr@std@@@__Cr@std@@SAXAAPAPAVCommandLineFlag@absl@@$$QAPAPAV34@@Z ??$iter_swap@AAPAPBVCommandLineFlag@absl@@AAPAPBV12@@?$_IterOps@U_ClassicAlgPolicy@__Cr@std@@@__Cr@std@@SAXAAPAPBVCommandLineFlag@absl@@0@Z @@ -1490,6 +1577,7 @@ EXPORTS ??$transfer_impl@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@@?$common_policy_traits@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@X@container_internal@absl@@CA?AU?$integral_constant@_N$00@__Cr@std@@PAV?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@45@PAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@12@1URank2@012@@Z ??$upper_bound@PBUTransition@cctz@time_internal@absl@@U1234@UByCivilTime@1234@@__Cr@std@@YAPBUTransition@cctz@time_internal@absl@@PBU2345@0ABU2345@UByCivilTime@2345@@Z ??$upper_bound@PBUTransition@cctz@time_internal@absl@@U1234@UByUnixTime@1234@@__Cr@std@@YAPBUTransition@cctz@time_internal@absl@@PBU2345@0ABU2345@UByUnixTime@2345@@Z + ??$visit@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@absl@@YAI$$QAUBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@0@YAIUStructuredProtoField@30@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@0@@Z ??0?$AllocationTransaction@V?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QAE@AAV?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@@Z ??0?$AllocationTransaction@V?$allocator@PAVLogSink@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QAE@AAV?$allocator@PAVLogSink@absl@@@__Cr@std@@@Z ??0?$AllocationTransaction@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QAE@AAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@Z @@ -2438,6 +2526,7 @@ EXPORTS ??Pabsl@@YA_NVint128@0@0@Z ??Pabsl@@YA_NVuint128@0@0@Z ??R@?0???$Initialize@V?$IteratorValueAdapter@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@PBVFormatArgImpl@str_format_internal@absl@@@inlined_vector_internal@absl@@@?$Storage@VFormatArgImpl@str_format_internal@absl@@$03V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QAEXV?$IteratorValueAdapter@V?$allocator@VFormatArgImpl@str_format_internal@absl@@@__Cr@std@@PBVFormatArgImpl@str_format_internal@absl@@@23@I@Z@QBE?A?@@XZ + ??R@?0???$Run@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@@?$VisitIndicesSwitch@$03@variant_internal@absl@@SAI$$QAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@23@I@Z@QBE?A?@@XZ ??R@?0???$construct@ABUpiecewise_construct_t@__Cr@std@@V?$tuple@$$QAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@V?$tuple@$$QAPAVCommandLineFlag@absl@@@23@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AAEXPAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@23@ABUpiecewise_construct_t@__Cr@std@@$$QAV?$tuple@$$QAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@67@$$QAV?$tuple@$$QAPAVCommandLineFlag@absl@@@67@@Z@QBE?A?@@XZ ??R@?0???$construct@ABUpiecewise_construct_t@__Cr@std@@V?$tuple@$$QBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@V?$tuple@$$QAPAVCommandLineFlag@absl@@@23@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AAEXPAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@23@ABUpiecewise_construct_t@__Cr@std@@$$QAV?$tuple@$$QBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@67@$$QAV?$tuple@$$QAPAVCommandLineFlag@absl@@@67@@Z@QBE?A?@@XZ ??R@?0???A?$FixedArray@D$0PPPPPPPP@V?$allocator@D@__Cr@std@@@absl@@QAEAADI@Z@QBE?A?@@XZ @@ -2526,6 +2615,10 @@ EXPORTS ??R?$function@$$A6A_NABVCommandLineFlag@absl@@@Z@__Cr@std@@QBE_NABVCommandLineFlag@absl@@@Z ??R?$hash@PBUCordRep@cord_internal@absl@@@__Cr@std@@QBEIPBUCordRep@cord_internal@absl@@@Z ??RAllowEmpty@absl@@QBE_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ??RBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@23@@Z@QAEIV?$Span@$$CBD@3@@Z + ??RBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@23@@Z@QAEIV?$variant@IHM@3@@Z + ??RBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@23@@Z@QAEIV?$variant@_K_JIH_N@3@@Z + ??RBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@23@@Z@QAEIV?$variant@_K_JN@3@@Z ??RByCivilTime@Transition@cctz@time_internal@absl@@QBE_NABU1234@0@Z ??RByUnixTime@Transition@cctz@time_internal@absl@@QBE_NABU1234@0@Z ??RDynValueDeleter@flags_internal@absl@@QBEXPAX@Z @@ -2722,6 +2815,7 @@ EXPORTS ?BreakTime@TimeZoneInfo@cctz@time_internal@absl@@UBE?AUabsolute_lookup@time_zone@234@ABV?$time_point@Vsystem_clock@chrono@__Cr@std@@V?$duration@_JV?$ratio@$00$00@__Cr@std@@@234@@chrono@__Cr@std@@@Z ?BreakTime@TimeZoneLibC@cctz@time_internal@absl@@UBE?AUabsolute_lookup@time_zone@234@ABV?$time_point@Vsystem_clock@chrono@__Cr@std@@V?$duration@_JV?$ratio@$00$00@__Cr@std@@@234@@chrono@__Cr@std@@@Z ?BufferSizeFor@log_internal@absl@@YAI_KW4WireType@12@@Z + ?BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@12@@Z ?BytesToHexString@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@34@@Z ?CEscape@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@34@@Z ?CHexEscape@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@34@@Z @@ -2804,6 +2898,7 @@ EXPORTS ?CopyBeginTo@CordRepBtree@cord_internal@absl@@ABEPAV123@II@Z ?CopyConstruct@flags_internal@absl@@YAXP6APAXW4FlagOp@12@PBXPAX2@Z12@Z ?CopyCordToString@absl@@YAXABVCord@1@PAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z + ?CopyInlineToString@InlineData@cord_internal@absl@@QBEXPAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ?CopyPrefix@CordRepBtree@cord_internal@absl@@AAE?AUCopyResult@123@I_N@Z ?CopyRaw@CordRepBtree@cord_internal@absl@@ABEPAV123@I@Z ?CopySuffix@CordRepBtree@cord_internal@absl@@AAE?AUCopyResult@123@I@Z @@ -2935,13 +3030,18 @@ EXPORTS ?EnableMutexInvariantDebugging@absl@@YAX_N@Z ?EnableRescheduling@SchedulingGuard@base_internal@absl@@CAX_N@Z ?EnableSymbolizeLogStackTrace@log_internal@absl@@YAX_N@Z + ?Encode32Bit@log_internal@absl@@YA_N_KHPAV?$Span@D@2@@Z ?Encode32Bit@log_internal@absl@@YA_N_KIPAV?$Span@D@2@@Z ?Encode64Bit@log_internal@absl@@YA_N_K0PAV?$Span@D@2@@Z + ?Encode64Bit@log_internal@absl@@YA_N_K_JPAV?$Span@D@2@@Z ?EncodeBytes@log_internal@absl@@YA_N_KV?$Span@$$CBD@2@PAV?$Span@D@2@@Z ?EncodeBytesTruncate@log_internal@absl@@YA_N_KV?$Span@$$CBD@2@PAV?$Span@D@2@@Z + ?EncodeDouble@log_internal@absl@@YA_N_KNPAV?$Span@D@2@@Z + ?EncodeFloat@log_internal@absl@@YA_N_KMPAV?$Span@D@2@@Z ?EncodeMessageLength@log_internal@absl@@YAXV?$Span@D@2@PBV32@@Z ?EncodeMessageStart@log_internal@absl@@YA?AV?$Span@D@2@_K0PAV32@@Z ?EncodeStringTruncate@log_internal@absl@@YA_N_KV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAV?$Span@D@2@@Z + ?EncodeStructuredProtoField@log_internal@absl@@YA_NUStructuredProtoField@12@AAV?$Span@D@2@@Z ?EncodeUTF8Char@strings_internal@absl@@YAIPAD_U@Z ?EncodeVarint@log_internal@absl@@YA_N_K0PAV?$Span@D@2@@Z ?EncodeVarint@log_internal@absl@@YA_N_KHPAV?$Span@D@2@@Z @@ -3262,6 +3362,7 @@ EXPORTS ?HasNoGrowthLeftAndNoDeleted@GrowthInfo@container_internal@absl@@QBE_NXZ ?HasNode@GraphCycles@synchronization_internal@absl@@QAE_NUGraphId@23@@Z ?HasRandenHwAesImplementation@random_internal@absl@@YA_NXZ + ?HashTableSizeOverflow@container_internal@absl@@YAXXZ ?HaveLeakSanitizer@absl@@YA_NXZ ?Head@CordzInfo@cord_internal@absl@@SAPAV123@ABVCordzSnapshot@23@@Z ?Help@FlagImpl@flags_internal@absl@@EBE?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ @@ -3610,6 +3711,7 @@ EXPORTS ?RawSetStderrThreshold@log_internal@absl@@YAXW4LogSeverityAtLeast@2@@Z ?Read1To3@MixingHashState@hash_internal@absl@@CAIPBEI@Z ?Read4To8@MixingHashState@hash_internal@absl@@CA_KPBEI@Z + ?Read8@MixingHashState@hash_internal@absl@@CA_KPBE@Z ?Read9To16@MixingHashState@hash_internal@absl@@CA?AU?$pair@_K_K@__Cr@std@@PBEI@Z ?Read@CordRepBtreeNavigator@cord_internal@absl@@QAE?AUReadResult@123@II@Z ?Read@CordRepBtreeReader@cord_internal@absl@@QAE?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@IIAAPAUCordRep@23@@Z @@ -3697,6 +3799,10 @@ EXPORTS ?ReverseConsume@cord_internal@absl@@YAXPAUCordRep@12@V?$FunctionRef@$$A6AXPAUCordRep@cord_internal@absl@@II@Z@2@@Z ?RoundUp@cord_internal@absl@@YAIII@Z ?RoundUpForTag@cord_internal@absl@@YAII@Z + ?Run@?$ReachableSwitchCase@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@$00@variant_internal@absl@@SAI$$QAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@23@@Z + ?Run@?$ReachableSwitchCase@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@$01@variant_internal@absl@@SAI$$QAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@23@@Z + ?Run@?$ReachableSwitchCase@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@$02@variant_internal@absl@@SAI$$QAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@23@@Z + ?Run@?$ReachableSwitchCase@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@$0A@@variant_internal@absl@@SAI$$QAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@23@@Z ?RuntimeTypeId@flags_internal@absl@@YAPBVtype_info@@P6APAXW4FlagOp@12@PBXPAX2@Z@Z ?SafeToDelete@CordzHandle@cord_internal@absl@@QBE_NXZ ?Sample@container_internal@absl@@YA?AVHashtablezInfoHandle@12@IIIG@Z @@ -4000,6 +4106,9 @@ EXPORTS ?TryRemove@Mutex@absl@@AAEXPAUPerThreadSynch@base_internal@2@@Z ?TypeId@FlagImpl@flags_internal@absl@@EBEPBXXZ ?TypeId@PrivateHandleAccessor@flags_internal@absl@@SAPBXABVCommandLineFlag@3@@Z + ?TypeName@CommandLineFlag@absl@@EBE?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@XZ + ?TypeName@FlagImpl@flags_internal@absl@@EBE?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@XZ + ?TypeName@PrivateHandleAccessor@flags_internal@absl@@SA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABVCommandLineFlag@3@@Z ?UTC@Impl@time_zone@cctz@time_internal@absl@@SA?AV2345@XZ ?UTC@TimeZoneIf@cctz@time_internal@absl@@SA?AV?$unique_ptr@VTimeZoneIf@cctz@time_internal@absl@@U?$default_delete@VTimeZoneIf@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@XZ ?UTC@TimeZoneInfo@cctz@time_internal@absl@@SA?AV?$unique_ptr@VTimeZoneInfo@cctz@time_internal@absl@@U?$default_delete@VTimeZoneInfo@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@XZ @@ -4600,6 +4709,7 @@ EXPORTS ?code@StatusRep@status_internal@absl@@QBE?AW4StatusCode@3@XZ ?combine@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@23@V423@@Z ?combine_contiguous@MixingHashState@hash_internal@absl@@SA?AV123@V123@PBEI@Z + ?combine_raw@MixingHashState@hash_internal@absl@@CA?AV123@V123@_K@Z ?common@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AAEAAVCommonFields@23@XZ ?common@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@ABEABVCommonFields@23@XZ ?compare_exchange_strong@?$__atomic_base@PAVTimeZone@absl@@$0A@@__Cr@std@@QAE_NAAPAVTimeZone@absl@@PAV45@W4memory_order@23@2@Z @@ -4834,6 +4944,10 @@ EXPORTS ?get@?$__temp_value@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QAEAAUTransitionType@cctz@time_internal@absl@@XZ ?get@?$__tuple_leaf@$0A@$$QAPAVCommandLineFlag@absl@@$0A@@__Cr@std@@QAEAAPAVCommandLineFlag@absl@@XZ ?get@?$__tuple_leaf@$0A@AAPAVCommandLineFlag@absl@@$0A@@__Cr@std@@QAEAAPAVCommandLineFlag@absl@@XZ + ?get@?$__tuple_leaf@$0A@AAV?$variant@IHM@absl@@$0A@@__Cr@std@@QBEAAV?$variant@IHM@absl@@XZ + ?get@?$__tuple_leaf@$0A@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@$0A@@__Cr@std@@QBEAAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@XZ + ?get@?$__tuple_leaf@$0A@AAV?$variant@_K_JIH_N@absl@@$0A@@__Cr@std@@QBEAAV?$variant@_K_JIH_N@absl@@XZ + ?get@?$__tuple_leaf@$0A@AAV?$variant@_K_JN@absl@@$0A@@__Cr@std@@QBEAAV?$variant@_K_JN@absl@@XZ ?get@?$__tuple_leaf@$0A@ABQAVCommandLineFlag@absl@@$0A@@__Cr@std@@QAEABQAVCommandLineFlag@absl@@XZ ?get@?$__tuple_leaf@$0A@PAVCommandLineFlag@absl@@$0A@@__Cr@std@@QAEAAPAVCommandLineFlag@absl@@XZ ?get@?$unique_ptr@PAPBVImpl@time_zone@cctz@time_internal@absl@@V?$__allocator_destructor@V?$allocator@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@@__Cr@std@@QBEPAPBVImpl@time_zone@cctz@time_internal@absl@@XZ @@ -4894,6 +5008,10 @@ EXPORTS ?hour@?$civil_time@Usecond_tag@time_internal@absl@@@detail@cctz@time_internal@absl@@QBEHXZ ?increment_size@CommonFields@container_internal@absl@@QAEXXZ ?index@?$probe_seq@$0BA@@container_internal@absl@@QBEIXZ + ?index@?$variant@IHM@absl@@QBEIXZ + ?index@?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@absl@@QBEIXZ + ?index@?$variant@_K_JIH_N@absl@@QBEIXZ + ?index@?$variant@_K_JN@absl@@QBEIXZ ?index@CordRepBtree@cord_internal@absl@@QBEIW4EdgeType@123@@Z ?infoz@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@UStringHash@23@UStringEq@23@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@container_internal@absl@@AAE?AVHashtablezInfoHandle@23@XZ ?infoz@CommonFields@container_internal@absl@@QAE?AVHashtablezInfoHandle@23@XZ diff --git a/naiveproxy/src/third_party/abseil-cpp/symbols_x86_rel.def b/naiveproxy/src/third_party/abseil-cpp/symbols_x86_rel.def index e4c30dadcc..9362e091fd 100644 --- a/naiveproxy/src/third_party/abseil-cpp/symbols_x86_rel.def +++ b/naiveproxy/src/third_party/abseil-cpp/symbols_x86_rel.def @@ -24,7 +24,6 @@ EXPORTS ??$?RW4LogSeverity@absl@@ABQBDHAAY0CC@$$CBD@?$AtomicHook@P6AXW4LogSeverity@absl@@PBDHABV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z@base_internal@absl@@QBEX$$QAW4LogSeverity@2@ABQBD$$QAHAAY0CC@$$CBD@Z ??$?RW4LogSeverity@absl@@ABQBDHAAY0CG@$$CBD@?$AtomicHook@P6AXW4LogSeverity@absl@@PBDHABV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z@base_internal@absl@@QBEX$$QAW4LogSeverity@2@ABQBD$$QAHAAY0CG@$$CBD@Z ??$?RW4LogSeverity@absl@@ABQBDHAAY0CH@$$CBD@?$AtomicHook@P6AXW4LogSeverity@absl@@PBDHABV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z@base_internal@absl@@QBEX$$QAW4LogSeverity@2@ABQBD$$QAHAAY0CH@$$CBD@Z - ??$AbslHashValue@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@YA?AVMixingHashState@01@V201@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$AbslStringify@VStringifySink@strings_internal@absl@@@absl@@YAXAAVStringifySink@strings_internal@0@UHex@0@@Z ??$AddCordRep@$00@CordRepBtree@cord_internal@absl@@CAPAV012@PAV012@PAUCordRep@12@@Z ??$AddCordRep@$0A@@CordRepBtree@cord_internal@absl@@CAPAV012@PAV012@PAUCordRep@12@@Z @@ -35,8 +34,6 @@ EXPORTS ??$Append@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$0A@@Cord@absl@@QAEX$$QAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ??$AppendImpl@ABVCord@absl@@@Cord@absl@@AAEXABV01@@Z ??$AppendImpl@VCord@absl@@@Cord@absl@@AAEX$$QAV01@@Z - ??$AsciiStrCaseFoldLong@$00@ascii_internal@absl@@YAXPADPBDI@Z - ??$AsciiStrCaseFoldLong@$0A@@ascii_internal@absl@@YAXPADPBDI@Z ??$Base64EscapeInternal@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@strings_internal@absl@@YAXPBEIPAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_NPBD@Z ??$CallOnceImpl@A6AXXZ$$V@base_internal@absl@@YAXPAU?$atomic@I@__Cr@std@@W4SchedulingMode@01@A6AXXZ@Z ??$CallOnceImpl@P8FlagImpl@flags_internal@absl@@AEXXZPAV123@@base_internal@absl@@YAXPAU?$atomic@I@__Cr@std@@W4SchedulingMode@01@$$QAP8FlagImpl@flags_internal@1@AEXXZ$$QAPAV671@@Z @@ -61,6 +58,8 @@ EXPORTS ??$CopyToEncodedBuffer@$00@LogMessage@log_internal@absl@@AAEXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$CopyToEncodedBuffer@$0A@@LogMessage@log_internal@absl@@AAEXDI@Z ??$CopyToEncodedBuffer@$0A@@LogMessage@log_internal@absl@@AAEXV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ??$CopyToEncodedBufferWithStructuredProtoField@$00@LogMessage@log_internal@absl@@AAEXUStructuredProtoField@12@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ??$CopyToEncodedBufferWithStructuredProtoField@$0A@@LogMessage@log_internal@absl@@AAEXUStructuredProtoField@12@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$DeallocateStandard@$03@container_internal@absl@@YAXAAVCommonFields@01@ABUPolicyFunctions@01@@Z ??$Dispatch@C@FormatArgImpl@str_format_internal@absl@@CA_NTData@012@VFormatConversionSpecImpl@12@PAX@Z ??$Dispatch@D@FormatArgImpl@str_format_internal@absl@@CA_NTData@012@VFormatConversionSpecImpl@12@PAX@Z @@ -134,6 +133,7 @@ EXPORTS ??$PopDead@_JIIIG@?$SampleRecorder@UHashtablezInfo@container_internal@absl@@@profiling_internal@absl@@AAEPAUHashtablezInfo@container_internal@2@_JIIIG@Z ??$Prepend@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$0A@@Cord@absl@@QAEX$$QAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ??$Register@AB_JAAIAAIAAIAAG@?$SampleRecorder@UHashtablezInfo@container_internal@absl@@@profiling_internal@absl@@QAEPAUHashtablezInfo@container_internal@2@AB_JAAI11AAG@Z + ??$Run@U?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@variant_internal@absl@@@?$VisitIndicesSwitch@$03@variant_internal@absl@@SAI$$QAU?$PerformVisitation@UBufferSizeVisitor@?1??BufferSizeForStructuredProtoField@log_internal@absl@@YAIUStructuredProtoField@34@@Z@AAV?$variant@V?$variant@_K_JIH_N@absl@@V?$variant@_K_JN@2@V?$Span@$$CBD@2@V?$variant@IHM@2@@4@@12@I@Z ??$SNPrintF@DHHH@absl@@YAHPADIABV?$FormatSpecTemplate@$0BPPPL@$0JPPPL@$0JPPPL@$0JPPPL@@str_format_internal@0@ABDABH33@Z ??$StrCat@PBD@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@ABVAlphaNum@0@0000ABQBD@Z ??$StrCat@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@$$BY02D@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@ABVAlphaNum@0@0000ABV123@AAY02$$CBD@Z @@ -162,6 +162,8 @@ EXPORTS ??$__emplace_unique_key_args@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@ABUpiecewise_construct_t@23@V?$tuple@ABV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$tuple@$$V@23@@?$__tree@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@V?$__map_value_compare@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@$00@23@V?$allocator@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@__Cr@std@@QAE?AU?$pair@V?$__tree_iterator@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@PAV?$__tree_node@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@PAX@23@H@__Cr@std@@_N@12@ABV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@12@ABUpiecewise_construct_t@12@$$QAV?$tuple@ABV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@12@$$QAV?$tuple@$$V@12@@Z ??$__for_each_segment@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PBU1234@ABU1234@PBQBU1234@H$0A@@__Cr@std@@U?$_CopySegment@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PBU1234@ABU1234@PBQBU1234@H$0A@@__Cr@std@@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PAU1234@AAU1234@PAPAU1234@H$0A@@23@@__copy_impl@23@@__Cr@std@@YAXV?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PBU1234@ABU1234@PBQBU1234@H$0A@@01@0U?$_CopySegment@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PBU1234@ABU1234@PBQBU1234@H$0A@@__Cr@std@@V?$__deque_iterator@UPrefixCrc@CrcCordState@crc_internal@absl@@PAU1234@AAU1234@PAPAU1234@H$0A@@23@@__copy_impl@01@@Z ??$__insert_with_size@V?$__wrap_iter@PAUraw_view@?1???R?$ConvertToContainer@V?$vector@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V?$allocator@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@23@$0A@@?$Splitter@VByChar@absl@@UAllowEmpty@2@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@strings_internal@absl@@QBE?AV?$vector@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V?$allocator@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@ABV345@@Z@@__Cr@std@@V123@@?$vector@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V?$allocator@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@AAE?AV?$__wrap_iter@PAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@12@V?$__wrap_iter@PBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@12@V?$__wrap_iter@PAUraw_view@?1???R?$ConvertToContainer@V?$vector@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V?$allocator@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@23@$0A@@?$Splitter@VByChar@absl@@UAllowEmpty@2@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@strings_internal@absl@@QBE?AV?$vector@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V?$allocator@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@ABV345@@Z@@12@1H@Z + ??$combine@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@$$V@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ??$combine@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@H@?$HashStateBase@VMixingHashState@hash_internal@absl@@@hash_internal@absl@@SA?AVMixingHashState@12@V312@ABV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABH@Z ??$emplace@$$V@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QAE?AV?$__wrap_iter@PAUTransition@cctz@time_internal@absl@@@12@V?$__wrap_iter@PBUTransition@cctz@time_internal@absl@@@12@@Z ??$emplace@$$V@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QAE?AV?$__wrap_iter@PAUTransitionType@cctz@time_internal@absl@@@12@V?$__wrap_iter@PBUTransitionType@cctz@time_internal@absl@@@12@@Z ??$emplace_back@$$V@?$__split_buffer@UTransition@cctz@time_internal@absl@@AAV?$allocator@UTransition@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QAEXXZ @@ -501,7 +503,6 @@ EXPORTS ?CopyCordToString@absl@@YAXABVCord@1@PAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ?CopyPrefix@CordRepBtree@cord_internal@absl@@AAE?AUCopyResult@123@I_N@Z ?CopySuffix@CordRepBtree@cord_internal@absl@@AAE?AUCopyResult@123@I@Z - ?CopyTo@InlineRep@Cord@absl@@QBEXPAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ?CopyToArraySlowPath@Cord@absl@@ABEXPAD@Z ?Crash@Helper@internal_statusor@absl@@SAXABVStatus@3@@Z ?Crc32c@CRC@crc_internal@absl@@SAPAV123@XZ @@ -570,6 +571,7 @@ EXPORTS ?EncodeBytesTruncate@log_internal@absl@@YA_N_KV?$Span@$$CBD@2@PAV?$Span@D@2@@Z ?EncodeMessageLength@log_internal@absl@@YAXV?$Span@D@2@PBV32@@Z ?EncodeMessageStart@log_internal@absl@@YA?AV?$Span@D@2@_K0PAV32@@Z + ?EncodeStructuredProtoField@log_internal@absl@@YA_NUStructuredProtoField@12@AAV?$Span@D@2@@Z ?EncodeUTF8Char@strings_internal@absl@@YAIPAD_U@Z ?EncodeVarint@log_internal@absl@@YA_N_K0PAV?$Span@D@2@@Z ?EncodeWaitCycles@SpinLock@base_internal@absl@@KAI_J0@Z @@ -770,6 +772,7 @@ EXPORTS ?HasEdge@GraphCycles@synchronization_internal@absl@@QBE_NUGraphId@23@0@Z ?HasNode@GraphCycles@synchronization_internal@absl@@QAE_NUGraphId@23@@Z ?HasRandenHwAesImplementation@random_internal@absl@@YA_NXZ + ?HashTableSizeOverflow@container_internal@absl@@YAXXZ ?HaveLeakSanitizer@absl@@YA_NXZ ?Head@CordzInfo@cord_internal@absl@@SAPAV123@ABVCordzSnapshot@23@@Z ?Help@FlagImpl@flags_internal@absl@@EBE?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ @@ -1222,6 +1225,9 @@ EXPORTS ?TryRemove@Mutex@absl@@AAEXPAUPerThreadSynch@base_internal@2@@Z ?TypeId@FlagImpl@flags_internal@absl@@EBEPBXXZ ?TypeId@PrivateHandleAccessor@flags_internal@absl@@SAPBXABVCommandLineFlag@3@@Z + ?TypeName@CommandLineFlag@absl@@EBE?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@XZ + ?TypeName@FlagImpl@flags_internal@absl@@EBE?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@XZ + ?TypeName@PrivateHandleAccessor@flags_internal@absl@@SA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABVCommandLineFlag@3@@Z ?UTC@Impl@time_zone@cctz@time_internal@absl@@SA?AV2345@XZ ?UTC@TimeZoneIf@cctz@time_internal@absl@@SA?AV?$unique_ptr@VTimeZoneIf@cctz@time_internal@absl@@U?$default_delete@VTimeZoneIf@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@XZ ?UTC@TimeZoneInfo@cctz@time_internal@absl@@SA?AV?$unique_ptr@VTimeZoneInfo@cctz@time_internal@absl@@U?$default_delete@VTimeZoneInfo@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@XZ diff --git a/naiveproxy/src/third_party/angle/dotfile_settings.gni b/naiveproxy/src/third_party/angle/dotfile_settings.gni index d42beef6fe..91b2b34d6c 100644 --- a/naiveproxy/src/third_party/angle/dotfile_settings.gni +++ b/naiveproxy/src/third_party/angle/dotfile_settings.gni @@ -6,5 +6,9 @@ # to make it easier to roll new versions of ANGLE in. angle_dotfile_settings = { - exec_script_whitelist = [ get_path_info("BUILD.gn", "abspath") ] + exec_script_allowlist = [ get_path_info("BUILD.gn", "abspath") ] + + # TODO(crbug.com/389986807) - move other clients to `exec_script_allowlist` + # so that we don't need to keep supporting `exec_script_whitelist`. + exec_script_whitelist = exec_script_allowlist } diff --git a/naiveproxy/src/third_party/boringssl/README.chromium b/naiveproxy/src/third_party/boringssl/README.chromium index cfec719f62..1b0de3a78c 100644 --- a/naiveproxy/src/third_party/boringssl/README.chromium +++ b/naiveproxy/src/third_party/boringssl/README.chromium @@ -1,7 +1,7 @@ Name: BoringSSL URL: https://boringssl.googlesource.com/boringssl Version: git -License: BSDish +License: MIT, BSD-3-Clause, OpenSSL, ISC, SSLeay License File: src/LICENSE License Android Compatible: yes Security Critical: yes diff --git a/naiveproxy/src/third_party/boringssl/src/.bazelrc b/naiveproxy/src/third_party/boringssl/src/.bazelrc index 24eb0ddf9f..803b785c89 100644 --- a/naiveproxy/src/third_party/boringssl/src/.bazelrc +++ b/naiveproxy/src/third_party/boringssl/src/.bazelrc @@ -1,16 +1,16 @@ # Copyright 2024 The BoringSSL Authors # -# Permission to use, copy, modify, and/or distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at # -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # This is a bazelrc file, documented in https://bazel.build/run/bazelrc and # specifies default flags when BoringSSL is the root project. It has no effect diff --git a/naiveproxy/src/third_party/boringssl/src/.bcr/presubmit.yml b/naiveproxy/src/third_party/boringssl/src/.bcr/presubmit.yml index 32813baf0d..44e4b7a560 100644 --- a/naiveproxy/src/third_party/boringssl/src/.bcr/presubmit.yml +++ b/naiveproxy/src/third_party/boringssl/src/.bcr/presubmit.yml @@ -3,17 +3,25 @@ build_targets: &build_targets - "@boringssl//:ssl" matrix: &matrix - non_macos_platform: + linux_platforms: - debian11 - ubuntu2204 - - windows bazel: [7.x] tasks: - verify_targets: - name: Verify build targets - platform: ${{ non_macos_platform }} + verify_targets_on_linux: + name: Verify build targets on Linux + platform: ${{ linux_platforms }} bazel: ${{ bazel }} build_targets: *build_targets + build_flags: + - '--cxxopt=-std=c++17' + verify_targets_on_windows: + name: Verify build targets on Windows + platform: windows + bazel: ${{ bazel }} + build_targets: *build_targets + build_flags: + - '--cxxopt=/std:c++17' # Work around https://github.com/bazelbuild/bazel/issues/10472 verify_targets_on_macos: name: Verify build targets on macOS @@ -27,12 +35,22 @@ bcr_test_module: module_path: util/bazel-example matrix: *matrix tasks: - run_test_module: - name: Run test module - platform: ${{ non_macos_platform }} + run_test_module_on_linux: + name: Run test module on Linux + platform: ${{ linux_platforms }} bazel: ${{ bazel }} build_targets: - //... + build_flags: + - '--cxxopt=-std=c++17' + run_test_module_on_windows: + name: Run test module on Windows + platform: windows + bazel: ${{ bazel }} + build_targets: + - //... + build_flags: + - '--cxxopt=/std:c++17' # Work around https://github.com/bazelbuild/bazel/issues/10472 run_test_module_on_macos: name: Run test module on macOS diff --git a/naiveproxy/src/third_party/boringssl/src/.github/PULL_REQUEST_TEMPLATE b/naiveproxy/src/third_party/boringssl/src/.github/PULL_REQUEST_TEMPLATE index 6c101eabca..b07f3a9207 100644 --- a/naiveproxy/src/third_party/boringssl/src/.github/PULL_REQUEST_TEMPLATE +++ b/naiveproxy/src/third_party/boringssl/src/.github/PULL_REQUEST_TEMPLATE @@ -2,6 +2,6 @@ Please do not send pull requests to the BoringSSL repository. We do, however, take contributions gladly. -See https://boringssl.googlesource.com/boringssl/+/master/CONTRIBUTING.md +See https://boringssl.googlesource.com/boringssl/+/main/CONTRIBUTING.md Thanks! diff --git a/naiveproxy/src/third_party/boringssl/src/AUTHORS b/naiveproxy/src/third_party/boringssl/src/AUTHORS index 78c3a2a0c1..f3e85c03ad 100644 --- a/naiveproxy/src/third_party/boringssl/src/AUTHORS +++ b/naiveproxy/src/third_party/boringssl/src/AUTHORS @@ -6,6 +6,7 @@ # source control. Google LLC Brian Smith +Apple Inc # Additionally, much of the code in BoringSSL is derived from code in the # OpenSSL project. We thank the OpenSSL project’s contributors for their diff --git a/naiveproxy/src/third_party/boringssl/src/BREAKING-CHANGES.md b/naiveproxy/src/third_party/boringssl/src/BREAKING-CHANGES.md index e98492ce4e..1bf6233597 100644 --- a/naiveproxy/src/third_party/boringssl/src/BREAKING-CHANGES.md +++ b/naiveproxy/src/third_party/boringssl/src/BREAKING-CHANGES.md @@ -36,7 +36,7 @@ In most cases, this is straightforward: The removal should still include an `Update-Note` tag, in case some were missed. -In some cases, this kind of staged approach is not feasible: perhaps the same code cannot simultaneously work before and after the change, or perhaps there are too many different versions in play. For instance, [Conscrypt](https://github.com/google/conscrypt) feeds into three different repositories. The GitHub repository consumes BoringSSL's `master` branch directly. It is pushed into Android, where it consumes Android's `external/boringssl`. Yet another copy is pushed into the internal repository, where it consumes that copy of BoringSSL. As each of these Conscrypts are updated independently from their corresponding BoringSSLs, Conscrypt upstream cannot rely on a new BoringSSL API until it is present in all copies of BoringSSL its downstreams rely on. +In some cases, this kind of staged approach is not feasible: perhaps the same code cannot simultaneously work before and after the change, or perhaps there are too many different versions in play. For instance, [Conscrypt](https://github.com/google/conscrypt) feeds into three different repositories. The GitHub repository consumes BoringSSL's `main` branch directly. It is pushed into Android, where it consumes Android's `external/boringssl`. Yet another copy is pushed into the internal repository, where it consumes that copy of BoringSSL. As each of these Conscrypts are updated independently from their corresponding BoringSSLs, Conscrypt upstream cannot rely on a new BoringSSL API until it is present in all copies of BoringSSL its downstreams rely on. In that case, a multi-sided change may be more appropriate: diff --git a/naiveproxy/src/third_party/boringssl/src/BUILD.bazel b/naiveproxy/src/third_party/boringssl/src/BUILD.bazel index 2e914b948e..5c68e63f02 100644 --- a/naiveproxy/src/third_party/boringssl/src/BUILD.bazel +++ b/naiveproxy/src/third_party/boringssl/src/BUILD.bazel @@ -1,16 +1,16 @@ # Copyright 2024 The BoringSSL Authors # -# Permission to use, copy, modify, and/or distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at # -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. load( ":gen/sources.bzl", @@ -58,13 +58,8 @@ package( license( name = "license", package_name = "BoringSSL", - # TODO(crbug.com/364634028): Update this once we've aligned with OpenSSL's - # new license. license_kinds = [ - "@rules_license//licenses/spdx:ISC", - "@rules_license//licenses/spdx:OpenSSL", - "@rules_license//licenses/spdx:MIT", - "@rules_license//licenses/spdx:SSLeay-standalone", + "@rules_license//licenses/spdx:Apache-2.0", ], license_text = "LICENSE", ) diff --git a/naiveproxy/src/third_party/boringssl/src/CMakeLists.txt b/naiveproxy/src/third_party/boringssl/src/CMakeLists.txt index 77c2e384f8..12a043e723 100644 --- a/naiveproxy/src/third_party/boringssl/src/CMakeLists.txt +++ b/naiveproxy/src/third_party/boringssl/src/CMakeLists.txt @@ -1,16 +1,16 @@ # Copyright 2014 The BoringSSL Authors # -# Permission to use, copy, modify, and/or distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at # -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. cmake_minimum_required(VERSION 3.16) diff --git a/naiveproxy/src/third_party/boringssl/src/CONTRIBUTING.md b/naiveproxy/src/third_party/boringssl/src/CONTRIBUTING.md index 33a4e9c0a3..ef70b895d5 100644 --- a/naiveproxy/src/third_party/boringssl/src/CONTRIBUTING.md +++ b/naiveproxy/src/third_party/boringssl/src/CONTRIBUTING.md @@ -33,9 +33,9 @@ on commit. Run: chmod u+x .git/hooks/commit-msg #### Uploading changes -To upload a change, push it to the special `refs/for/master` target: +To upload a change, push it to the special `refs/for/main` target: - git push origin HEAD:refs/for/master + git push origin HEAD:refs/for/main The output will then give you a link to the change. Add `agl@google.com`, `davidben@google.com`, and `bbe@google.com` as reviewers. @@ -66,3 +66,11 @@ welcome to send us a patch to be added, or request that we add you. Contributions made by corporations are covered by a different agreement than the one above, the [Software Grant and Corporate Contributor License Agreement](https://cla.developers.google.com/about/google-corporate). + +The following are Google-internal bug numbers where explicit permission from +some authors is recorded for use of their work. (This is purely for our own +record keeping.) +* 27287199 +* 27287880 +* 27287883 +* 263291445 diff --git a/naiveproxy/src/third_party/boringssl/src/INCORPORATING.md b/naiveproxy/src/third_party/boringssl/src/INCORPORATING.md index 1a4eb476c4..bc809233bb 100644 --- a/naiveproxy/src/third_party/boringssl/src/INCORPORATING.md +++ b/naiveproxy/src/third_party/boringssl/src/INCORPORATING.md @@ -67,7 +67,7 @@ top-level build logic, maintained by the embedder. Source lists for various build systems are pre-generated and live in the `gen` directory. For example, source lists for -[GN](https://gn.googlesource.com/gn/+/master/docs/quick_start.md) live in +[GN](https://gn.googlesource.com/gn/+/main/docs/quick_start.md) live in [gen/sources.gni](./gen/sources.gni). There is also a generic [gen/sources.json](./gen/sources.json) file for projects to consume if needed. [util/build/build.go](./util/build/build.go) describes what the various source diff --git a/naiveproxy/src/third_party/boringssl/src/LICENSE b/naiveproxy/src/third_party/boringssl/src/LICENSE index 3aa5aa6911..a0f82a1f8e 100644 --- a/naiveproxy/src/third_party/boringssl/src/LICENSE +++ b/naiveproxy/src/third_party/boringssl/src/LICENSE @@ -1,185 +1,205 @@ -BoringSSL is a fork of OpenSSL. As such, large parts of it fall under OpenSSL -licensing. Files that are completely new have a Google copyright and an ISC -license. This license is reproduced at the bottom of this file. -Contributors to BoringSSL are required to follow the CLA rules for Chromium: -https://cla.developers.google.com/clas + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ -Files in third_party/ have their own licenses, as described therein. The MIT -license, for third_party/fiat, which, unlike other third_party directories, is -compiled into non-test libraries, is included below. + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -The OpenSSL toolkit stays under a dual license, i.e. both the conditions of the -OpenSSL License and the original SSLeay license apply to the toolkit. See below -for the actual license texts. Actually both licenses are BSD-style Open Source -licenses. In case of any license issues related to OpenSSL please contact -openssl-core@openssl.org. + 1. Definitions. -The following are Google-internal bug numbers where explicit permission from -some authors is recorded for use of their work. (This is purely for our own -record keeping.) - 27287199 - 27287880 - 27287883 - 263291445 + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. - OpenSSL License - --------------- + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. -/* ==================================================================== - * Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. All advertising materials mentioning features or use of this - * software must display the following acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - * - * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For written permission, please contact - * openssl-core@openssl.org. - * - * 5. Products derived from this software may not be called "OpenSSL" - * nor may "OpenSSL" appear in their names without prior written - * permission of the OpenSSL Project. - * - * 6. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by the OpenSSL Project - * for use in the OpenSSL Toolkit (http://www.openssl.org/)" - * - * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY - * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * ==================================================================== - * - * This product includes cryptographic software written by Eric Young - * (eay@cryptsoft.com). This product includes software written by Tim - * Hudson (tjh@cryptsoft.com). - * - */ + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. - Original SSLeay License - ----------------------- + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. -/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. -ISC license used for completely new code in BoringSSL: + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). -/* Copyright 2015 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." -The code in third_party/fiat carries the MIT license: + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. -Copyright (c) 2015-2016 the fiat-crypto authors (see -https://github.com/mit-plv/fiat-crypto/blob/master/AUTHORS). + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. Licenses for support code diff --git a/naiveproxy/src/third_party/boringssl/src/MODULE.bazel b/naiveproxy/src/third_party/boringssl/src/MODULE.bazel index ec88786709..348c69455d 100644 --- a/naiveproxy/src/third_party/boringssl/src/MODULE.bazel +++ b/naiveproxy/src/third_party/boringssl/src/MODULE.bazel @@ -1,22 +1,22 @@ # Copyright 2024 The BoringSSL Authors # -# Permission to use, copy, modify, and/or distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at # -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # When tagging a new periodic snapshot, bump the version here and then tag at # the revision where we bump the version. module( name = "boringssl", - version = "0.20241209.0", + version = "0.20250114.0", compatibility_level = 2, ) @@ -32,6 +32,6 @@ module( # this. bazel_dep(name = "googletest", version = "1.15.2") -bazel_dep(name = "platforms", version = "0.0.10") +bazel_dep(name = "platforms", version = "0.0.11") bazel_dep(name = "rules_cc", version = "0.1.0") bazel_dep(name = "rules_license", version = "1.0.0") diff --git a/naiveproxy/src/third_party/boringssl/src/MODULE.bazel.lock b/naiveproxy/src/third_party/boringssl/src/MODULE.bazel.lock index 2c2a121dcf..76cf420c9f 100644 --- a/naiveproxy/src/third_party/boringssl/src/MODULE.bazel.lock +++ b/naiveproxy/src/third_party/boringssl/src/MODULE.bazel.lock @@ -35,7 +35,8 @@ "https://bcr.bazel.build/modules/googletest/1.15.2/source.json": "dbdda654dcb3a0d7a8bc5d0ac5fc7e150b58c2a986025ae5bc634bb2cb61f470", "https://bcr.bazel.build/modules/libpfm/4.11.0/MODULE.bazel": "45061ff025b301940f1e30d2c16bea596c25b176c8b6b3087e92615adbd52902", "https://bcr.bazel.build/modules/platforms/0.0.10/MODULE.bazel": "8cb8efaf200bdeb2150d93e162c40f388529a25852b332cec879373771e48ed5", - "https://bcr.bazel.build/modules/platforms/0.0.10/source.json": "f22828ff4cf021a6b577f1bf6341cb9dcd7965092a439f64fc1bb3b7a5ae4bd5", + "https://bcr.bazel.build/modules/platforms/0.0.11/MODULE.bazel": "0daefc49732e227caa8bfa834d65dc52e8cc18a2faf80df25e8caea151a9413f", + "https://bcr.bazel.build/modules/platforms/0.0.11/source.json": "f7e188b79ebedebfe75e9e1d098b8845226c7992b307e28e1496f23112e8fc29", "https://bcr.bazel.build/modules/platforms/0.0.4/MODULE.bazel": "9b328e31ee156f53f3c416a64f8491f7eb731742655a47c9eec4703a71644aee", "https://bcr.bazel.build/modules/platforms/0.0.5/MODULE.bazel": "5733b54ea419d5eaf7997054bb55f6a1d0b5ff8aedf0176fef9eea44f3acda37", "https://bcr.bazel.build/modules/platforms/0.0.6/MODULE.bazel": "ad6eeef431dc52aefd2d77ed20a4b353f8ebf0f4ecdd26a807d2da5aa8cd0615", @@ -120,23 +121,6 @@ ] ] } - }, - "@@platforms//host:extension.bzl%host_platform": { - "general": { - "bzlTransitiveDigest": "xelQcPZH8+tmuOHVjL9vDxMnnQNMlwj0SlvgoqBkm4U=", - "usagesDigest": "hgylFkgWSg0ulUwWZzEM1aIftlUnbmw2ynWLdEfHnZc=", - "recordedFileInputs": {}, - "recordedDirentsInputs": {}, - "envVariables": {}, - "generatedRepoSpecs": { - "host_platform": { - "bzlFile": "@@platforms//host:extension.bzl", - "ruleClassName": "host_platform_repo", - "attributes": {} - } - }, - "recordedRepoMappingEntries": [] - } } } } diff --git a/naiveproxy/src/third_party/boringssl/src/build.json b/naiveproxy/src/third_party/boringssl/src/build.json index 71489c9dfa..a2693eb799 100644 --- a/naiveproxy/src/third_party/boringssl/src/build.json +++ b/naiveproxy/src/third_party/boringssl/src/build.json @@ -18,8 +18,15 @@ "internal_hdrs": [ "crypto/fipsmodule/aes/aes.cc.inc", "crypto/fipsmodule/aes/aes_nohw.cc.inc", + "crypto/fipsmodule/aes/cbc.cc.inc", + "crypto/fipsmodule/aes/cfb.cc.inc", + "crypto/fipsmodule/aes/ctr.cc.inc", + "crypto/fipsmodule/aes/gcm.cc.inc", + "crypto/fipsmodule/aes/gcm_nohw.cc.inc", "crypto/fipsmodule/aes/key_wrap.cc.inc", "crypto/fipsmodule/aes/mode_wrappers.cc.inc", + "crypto/fipsmodule/aes/ofb.cc.inc", + "crypto/fipsmodule/aes/polyval.cc.inc", "crypto/fipsmodule/bn/add.cc.inc", "crypto/fipsmodule/bn/asm/x86_64-gcc.cc.inc", "crypto/fipsmodule/bn/bn.cc.inc", @@ -71,13 +78,6 @@ "crypto/fipsmodule/keccak/keccak.cc.inc", "crypto/fipsmodule/mldsa/mldsa.cc.inc", "crypto/fipsmodule/mlkem/mlkem.cc.inc", - "crypto/fipsmodule/modes/cbc.cc.inc", - "crypto/fipsmodule/modes/cfb.cc.inc", - "crypto/fipsmodule/modes/ctr.cc.inc", - "crypto/fipsmodule/modes/gcm.cc.inc", - "crypto/fipsmodule/modes/gcm_nohw.cc.inc", - "crypto/fipsmodule/modes/ofb.cc.inc", - "crypto/fipsmodule/modes/polyval.cc.inc", "crypto/fipsmodule/rand/ctrdrbg.cc.inc", "crypto/fipsmodule/rand/rand.cc.inc", "crypto/fipsmodule/rsa/blinding.cc.inc", @@ -103,11 +103,11 @@ ], "perlasm_aarch64": [ {"src": "crypto/fipsmodule/aes/asm/aesv8-armx.pl", "dst": "aesv8-armv8"}, - {"src": "crypto/fipsmodule/modes/asm/aesv8-gcm-armv8.pl"}, + {"src": "crypto/fipsmodule/aes/asm/aesv8-gcm-armv8.pl"}, {"src": "crypto/fipsmodule/bn/asm/armv8-mont.pl"}, {"src": "crypto/fipsmodule/bn/asm/bn-armv8.pl"}, - {"src": "crypto/fipsmodule/modes/asm/ghash-neon-armv8.pl"}, - {"src": "crypto/fipsmodule/modes/asm/ghashv8-armx.pl", "dst": "ghashv8-armv8"}, + {"src": "crypto/fipsmodule/aes/asm/ghash-neon-armv8.pl"}, + {"src": "crypto/fipsmodule/aes/asm/ghashv8-armx.pl", "dst": "ghashv8-armv8"}, {"src": "crypto/fipsmodule/ec/asm/p256_beeu-armv8-asm.pl"}, {"src": "crypto/fipsmodule/ec/asm/p256-armv8-asm.pl"}, {"src": "crypto/fipsmodule/sha/asm/sha1-armv8.pl"}, @@ -119,8 +119,8 @@ {"src": "crypto/fipsmodule/aes/asm/aesv8-armx.pl", "dst": "aesv8-armv7"}, {"src": "crypto/fipsmodule/bn/asm/armv4-mont.pl"}, {"src": "crypto/fipsmodule/aes/asm/bsaes-armv7.pl"}, - {"src": "crypto/fipsmodule/modes/asm/ghash-armv4.pl"}, - {"src": "crypto/fipsmodule/modes/asm/ghashv8-armx.pl", "dst": "ghashv8-armv7"}, + {"src": "crypto/fipsmodule/aes/asm/ghash-armv4.pl"}, + {"src": "crypto/fipsmodule/aes/asm/ghashv8-armx.pl", "dst": "ghashv8-armv7"}, {"src": "crypto/fipsmodule/sha/asm/sha1-armv4-large.pl"}, {"src": "crypto/fipsmodule/sha/asm/sha256-armv4.pl"}, {"src": "crypto/fipsmodule/sha/asm/sha512-armv4.pl"}, @@ -130,8 +130,8 @@ {"src": "crypto/fipsmodule/aes/asm/aesni-x86.pl"}, {"src": "crypto/fipsmodule/bn/asm/bn-586.pl"}, {"src": "crypto/fipsmodule/bn/asm/co-586.pl"}, - {"src": "crypto/fipsmodule/modes/asm/ghash-ssse3-x86.pl"}, - {"src": "crypto/fipsmodule/modes/asm/ghash-x86.pl"}, + {"src": "crypto/fipsmodule/aes/asm/ghash-ssse3-x86.pl"}, + {"src": "crypto/fipsmodule/aes/asm/ghash-x86.pl"}, {"src": "crypto/fipsmodule/sha/asm/sha1-586.pl"}, {"src": "crypto/fipsmodule/sha/asm/sha256-586.pl"}, {"src": "crypto/fipsmodule/sha/asm/sha512-586.pl"}, @@ -139,12 +139,12 @@ {"src": "crypto/fipsmodule/bn/asm/x86-mont.pl"} ], "perlasm_x86_64": [ - {"src": "crypto/fipsmodule/modes/asm/aesni-gcm-x86_64.pl"}, - {"src": "crypto/fipsmodule/modes/asm/aes-gcm-avx10-x86_64.pl"}, - {"src": "crypto/fipsmodule/modes/asm/aes-gcm-avx2-x86_64.pl"}, + {"src": "crypto/fipsmodule/aes/asm/aesni-gcm-x86_64.pl"}, + {"src": "crypto/fipsmodule/aes/asm/aes-gcm-avx10-x86_64.pl"}, + {"src": "crypto/fipsmodule/aes/asm/aes-gcm-avx2-x86_64.pl"}, {"src": "crypto/fipsmodule/aes/asm/aesni-x86_64.pl"}, - {"src": "crypto/fipsmodule/modes/asm/ghash-ssse3-x86_64.pl"}, - {"src": "crypto/fipsmodule/modes/asm/ghash-x86_64.pl"}, + {"src": "crypto/fipsmodule/aes/asm/ghash-ssse3-x86_64.pl"}, + {"src": "crypto/fipsmodule/aes/asm/ghash-x86_64.pl"}, {"src": "crypto/fipsmodule/ec/asm/p256_beeu-x86_64-asm.pl"}, {"src": "crypto/fipsmodule/ec/asm/p256-x86_64-asm.pl"}, {"src": "crypto/fipsmodule/rand/asm/rdrand-x86_64.pl"}, @@ -199,8 +199,8 @@ "crypto/bio/socket.cc", "crypto/bio/socket_helper.cc", "crypto/blake2/blake2.cc", - "crypto/bn_extra/bn_asn1.cc", - "crypto/bn_extra/convert.cc", + "crypto/bn/bn_asn1.cc", + "crypto/bn/convert.cc", "crypto/buf/buf.cc", "crypto/bytestring/asn1_compat.cc", "crypto/bytestring/ber.cc", @@ -208,17 +208,17 @@ "crypto/bytestring/cbs.cc", "crypto/bytestring/unicode.cc", "crypto/chacha/chacha.cc", - "crypto/cipher_extra/cipher_extra.cc", - "crypto/cipher_extra/derive_key.cc", - "crypto/cipher_extra/e_aesctrhmac.cc", - "crypto/cipher_extra/e_aesgcmsiv.cc", - "crypto/cipher_extra/e_chacha20poly1305.cc", - "crypto/cipher_extra/e_des.cc", - "crypto/cipher_extra/e_null.cc", - "crypto/cipher_extra/e_rc2.cc", - "crypto/cipher_extra/e_rc4.cc", - "crypto/cipher_extra/e_tls.cc", - "crypto/cipher_extra/tls_cbc.cc", + "crypto/cipher/derive_key.cc", + "crypto/cipher/get_cipher.cc", + "crypto/cipher/e_aesctrhmac.cc", + "crypto/cipher/e_aesgcmsiv.cc", + "crypto/cipher/e_chacha20poly1305.cc", + "crypto/cipher/e_des.cc", + "crypto/cipher/e_null.cc", + "crypto/cipher/e_rc2.cc", + "crypto/cipher/e_rc4.cc", + "crypto/cipher/e_tls.cc", + "crypto/cipher/tls_cbc.cc", "crypto/conf/conf.cc", "crypto/cpu_aarch64_apple.cc", "crypto/cpu_aarch64_fuchsia.cc", @@ -234,16 +234,16 @@ "crypto/curve25519/curve25519_64_adx.cc", "crypto/curve25519/spake25519.cc", "crypto/des/des.cc", - "crypto/dh_extra/dh_asn1.cc", - "crypto/dh_extra/params.cc", - "crypto/digest_extra/digest_extra.cc", + "crypto/dh/dh_asn1.cc", + "crypto/dh/params.cc", + "crypto/digest/digest_extra.cc", "crypto/dsa/dsa.cc", "crypto/dsa/dsa_asn1.cc", - "crypto/ec_extra/ec_asn1.cc", - "crypto/ec_extra/ec_derive.cc", - "crypto/ec_extra/hash_to_curve.cc", - "crypto/ecdh_extra/ecdh_extra.cc", - "crypto/ecdsa_extra/ecdsa_asn1.cc", + "crypto/ec/ec_asn1.cc", + "crypto/ec/ec_derive.cc", + "crypto/ec/hash_to_curve.cc", + "crypto/ecdh/ecdh.cc", + "crypto/ecdsa/ecdsa_asn1.cc", "crypto/engine/engine.cc", "crypto/err/err.cc", "crypto/evp/evp.cc", @@ -295,27 +295,28 @@ "crypto/poly1305/poly1305_arm.cc", "crypto/poly1305/poly1305_vec.cc", "crypto/pool/pool.cc", - "crypto/rand_extra/deterministic.cc", - "crypto/rand_extra/fork_detect.cc", - "crypto/rand_extra/forkunsafe.cc", - "crypto/rand_extra/getentropy.cc", - "crypto/rand_extra/ios.cc", - "crypto/rand_extra/passive.cc", - "crypto/rand_extra/rand_extra.cc", - "crypto/rand_extra/trusty.cc", - "crypto/rand_extra/urandom.cc", - "crypto/rand_extra/windows.cc", + "crypto/rand/deterministic.cc", + "crypto/rand/fork_detect.cc", + "crypto/rand/forkunsafe.cc", + "crypto/rand/getentropy.cc", + "crypto/rand/ios.cc", + "crypto/rand/passive.cc", + "crypto/rand/rand.cc", + "crypto/rand/trusty.cc", + "crypto/rand/urandom.cc", + "crypto/rand/windows.cc", "crypto/rc4/rc4.cc", "crypto/refcount.cc", - "crypto/rsa_extra/rsa_asn1.cc", - "crypto/rsa_extra/rsa_crypt.cc", - "crypto/rsa_extra/rsa_extra.cc", - "crypto/rsa_extra/rsa_print.cc", + "crypto/rsa/rsa_asn1.cc", + "crypto/rsa/rsa_crypt.cc", + "crypto/rsa/rsa_extra.cc", + "crypto/rsa/rsa_print.cc", "crypto/slhdsa/slhdsa.cc", "crypto/sha/sha1.cc", "crypto/sha/sha256.cc", "crypto/sha/sha512.cc", "crypto/siphash/siphash.cc", + "crypto/spake2plus/spake2plus.cc", "crypto/stack/stack.cc", "crypto/thread.cc", "crypto/thread_none.cc", @@ -489,14 +490,14 @@ "crypto/bio/internal.h", "crypto/bytestring/internal.h", "crypto/chacha/internal.h", - "crypto/cipher_extra/internal.h", + "crypto/cipher/internal.h", "crypto/conf/internal.h", "crypto/cpu_arm_linux.h", "crypto/curve25519/curve25519_tables.h", "crypto/curve25519/internal.h", "crypto/des/internal.h", "crypto/dsa/internal.h", - "crypto/ec_extra/internal.h", + "crypto/ec/internal.h", "crypto/err/internal.h", "crypto/evp/internal.h", "crypto/fipsmodule/aes/internal.h", @@ -515,7 +516,6 @@ "crypto/fipsmodule/ec/p256_table.h", "crypto/fipsmodule/ecdsa/internal.h", "crypto/fipsmodule/keccak/internal.h", - "crypto/fipsmodule/modes/internal.h", "crypto/fipsmodule/rand/internal.h", "crypto/fipsmodule/rsa/internal.h", "crypto/fipsmodule/service_indicator/internal.h", @@ -539,9 +539,10 @@ "crypto/pkcs8/internal.h", "crypto/poly1305/internal.h", "crypto/pool/internal.h", - "crypto/rand_extra/getrandom_fillin.h", - "crypto/rand_extra/sysrand_internal.h", - "crypto/rsa_extra/internal.h", + "crypto/rand/getrandom_fillin.h", + "crypto/rand/sysrand_internal.h", + "crypto/rsa/internal.h", + "crypto/spake2plus/internal.h", "crypto/trust_token/internal.h", "crypto/x509/ext_dat.h", "crypto/x509/internal.h", @@ -565,7 +566,7 @@ ], "perlasm_aarch64": [ {"src": "crypto/chacha/asm/chacha-armv8.pl"}, - {"src": "crypto/cipher_extra/asm/chacha20_poly1305_armv8.pl"} + {"src": "crypto/cipher/asm/chacha20_poly1305_armv8.pl"} ], "perlasm_arm": [ {"src": "crypto/chacha/asm/chacha-armv4.pl"} @@ -576,8 +577,8 @@ ], "perlasm_x86_64": [ {"src": "crypto/chacha/asm/chacha-x86_64.pl"}, - {"src": "crypto/cipher_extra/asm/aes128gcmsiv-x86_64.pl"}, - {"src": "crypto/cipher_extra/asm/chacha20_poly1305_x86_64.pl"}, + {"src": "crypto/cipher/asm/aes128gcmsiv-x86_64.pl"}, + {"src": "crypto/cipher/asm/chacha20_poly1305_x86_64.pl"}, {"src": "crypto/md5/asm/md5-x86_64.pl"} ] }, @@ -803,8 +804,8 @@ "crypto/buf/buf_test.cc", "crypto/bytestring/bytestring_test.cc", "crypto/chacha/chacha_test.cc", - "crypto/cipher_extra/aead_test.cc", - "crypto/cipher_extra/cipher_test.cc", + "crypto/cipher/aead_test.cc", + "crypto/cipher/cipher_test.cc", "crypto/compiler_test.cc", "crypto/conf/conf_test.cc", "crypto/constant_time_test.cc", @@ -813,16 +814,17 @@ "crypto/curve25519/ed25519_test.cc", "crypto/curve25519/spake25519_test.cc", "crypto/curve25519/x25519_test.cc", - "crypto/dh_extra/dh_test.cc", - "crypto/digest_extra/digest_test.cc", + "crypto/dh/dh_test.cc", + "crypto/digest/digest_test.cc", "crypto/dsa/dsa_test.cc", - "crypto/ecdh_extra/ecdh_test.cc", + "crypto/ecdh/ecdh_test.cc", "crypto/err/err_test.cc", "crypto/evp/evp_extra_test.cc", "crypto/evp/evp_test.cc", "crypto/evp/pbkdf_test.cc", "crypto/evp/scrypt_test.cc", "crypto/fipsmodule/aes/aes_test.cc", + "crypto/fipsmodule/aes/gcm_test.cc", "crypto/fipsmodule/bn/bn_test.cc", "crypto/fipsmodule/cmac/cmac_test.cc", "crypto/fipsmodule/ec/ec_test.cc", @@ -831,11 +833,10 @@ "crypto/fipsmodule/ecdsa/ecdsa_test.cc", "crypto/fipsmodule/hkdf/hkdf_test.cc", "crypto/fipsmodule/keccak/keccak_test.cc", - "crypto/fipsmodule/modes/gcm_test.cc", "crypto/fipsmodule/rand/ctrdrbg_test.cc", "crypto/fipsmodule/service_indicator/service_indicator_test.cc", "crypto/fipsmodule/sha/sha_test.cc", - "crypto/hmac_extra/hmac_test.cc", + "crypto/hmac/hmac_test.cc", "crypto/hpke/hpke_test.cc", "crypto/hrss/hrss_test.cc", "crypto/impl_dispatch_test.cc", @@ -851,14 +852,15 @@ "crypto/pkcs8/pkcs8_test.cc", "crypto/poly1305/poly1305_test.cc", "crypto/pool/pool_test.cc", - "crypto/rand_extra/fork_detect_test.cc", - "crypto/rand_extra/getentropy_test.cc", - "crypto/rand_extra/rand_test.cc", + "crypto/rand/fork_detect_test.cc", + "crypto/rand/getentropy_test.cc", + "crypto/rand/rand_test.cc", "crypto/refcount_test.cc", - "crypto/rsa_extra/rsa_test.cc", + "crypto/rsa/rsa_test.cc", "crypto/self_test.cc", "crypto/siphash/siphash_test.cc", "crypto/slhdsa/slhdsa_test.cc", + "crypto/spake2plus/spake2plus_test.cc", "crypto/stack/stack_test.cc", "crypto/test/gtest_main.cc", "crypto/thread_test.cc", @@ -869,10 +871,10 @@ ], "data": [ "crypto/blake2/blake2b256_tests.txt", - "crypto/cipher_extra/test/*.txt", - "crypto/cipher_extra/test/nist_cavp/*.txt", + "crypto/cipher/test/*.txt", + "crypto/cipher/test/nist_cavp/*.txt", "crypto/curve25519/ed25519_tests.txt", - "crypto/ecdh_extra/ecdh_tests.txt", + "crypto/ecdh/ecdh_tests.txt", "crypto/evp/evp_tests.txt", "crypto/evp/scrypt_tests.txt", "crypto/fipsmodule/aes/aes_tests.txt", @@ -887,7 +889,7 @@ "crypto/fipsmodule/ecdsa/ecdsa_verify_tests.txt", "crypto/fipsmodule/keccak/keccak_tests.txt", "crypto/fipsmodule/rand/ctrdrbg_vectors.txt", - "crypto/hmac_extra/hmac_tests.txt", + "crypto/hmac/hmac_tests.txt", "crypto/hpke/hpke_test_vectors.txt", "crypto/kyber/kyber_tests.txt", "crypto/mldsa/mldsa_nist_keygen_65_tests.txt", @@ -917,7 +919,7 @@ }, "urandom_test": { "srcs": [ - "crypto/rand_extra/urandom_test.cc" + "crypto/rand/urandom_test.cc" ] }, "pki_test": { diff --git a/naiveproxy/src/third_party/boringssl/src/cmake/OpenSSLConfig.cmake b/naiveproxy/src/third_party/boringssl/src/cmake/OpenSSLConfig.cmake index a92e6411ed..2925a252e2 100644 --- a/naiveproxy/src/third_party/boringssl/src/cmake/OpenSSLConfig.cmake +++ b/naiveproxy/src/third_party/boringssl/src/cmake/OpenSSLConfig.cmake @@ -1,16 +1,16 @@ # Copyright 2022 The BoringSSL Authors # -# Permission to use, copy, modify, and/or distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at # -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. include(${CMAKE_CURRENT_LIST_DIR}/OpenSSLTargets.cmake) diff --git a/naiveproxy/src/third_party/boringssl/src/cmake/go.cmake b/naiveproxy/src/third_party/boringssl/src/cmake/go.cmake index b53b37e8f3..9b2f411983 100644 --- a/naiveproxy/src/third_party/boringssl/src/cmake/go.cmake +++ b/naiveproxy/src/third_party/boringssl/src/cmake/go.cmake @@ -1,16 +1,16 @@ # Copyright 2023 The BoringSSL Authors # -# Permission to use, copy, modify, and/or distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at # -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # Go is an optional dependency. It's a necessary dependency if running tests or # the FIPS build, which will check these. diff --git a/naiveproxy/src/third_party/boringssl/src/cmake/paths.cmake b/naiveproxy/src/third_party/boringssl/src/cmake/paths.cmake index a3158cc2ba..625b18846d 100644 --- a/naiveproxy/src/third_party/boringssl/src/cmake/paths.cmake +++ b/naiveproxy/src/third_party/boringssl/src/cmake/paths.cmake @@ -1,16 +1,16 @@ # Copyright 2023 The BoringSSL Authors # -# Permission to use, copy, modify, and/or distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at # -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # binary_dir_relative_path sets outvar to # ${CMAKE_CURRENT_BINARY_DIR}/${cur_bin_dir_relative}, but expressed relative to diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_bitstr.cc b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_bitstr.cc index 077161da7c..82df5c83f2 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_bitstr.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_bitstr.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_bool.cc b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_bool.cc index c391c52e05..7869e694ed 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_bool.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_bool.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_d2i_fp.cc b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_d2i_fp.cc index 5c1c8938e0..66bf8d4131 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_d2i_fp.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_d2i_fp.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_dup.cc b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_dup.cc index 7650c5bfc7..df2b9be82c 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_dup.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_dup.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_gentm.cc b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_gentm.cc index ae4086f9e7..f3b2faec77 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_gentm.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_gentm.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_i2d_fp.cc b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_i2d_fp.cc index 6e79e4284b..fcde9fb72f 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_i2d_fp.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_i2d_fp.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_int.cc b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_int.cc index 66d5b3b18a..7b0e28b570 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_int.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_int.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_mbstr.cc b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_mbstr.cc index c0ce991b8c..7c64b1537f 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_mbstr.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_mbstr.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_object.cc b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_object.cc index 4c00b69833..a4ede8a6c0 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_object.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_object.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_octet.cc b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_octet.cc index 6ccd3b58b5..edcfb1eba8 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_octet.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_octet.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_strex.cc b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_strex.cc index 692d56af38..a2d5e2cb7f 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_strex.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_strex.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_strnid.cc b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_strnid.cc index d8814865fc..c2a0c27dab 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_strnid.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_strnid.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_time.cc b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_time.cc index 6ab5d93dae..46785f64c5 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_time.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_time.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include @@ -186,6 +191,14 @@ int ASN1_TIME_diff(int *out_days, int *out_seconds, const ASN1_TIME *from, return OPENSSL_gmtime_diff(out_days, out_seconds, &tm_from, &tm_to); } +int ASN1_TIME_to_posix_nonstandard(const ASN1_TIME *t, int64_t *out_time) { + struct tm tm; + if (!asn1_time_to_tm(&tm, t, /*allow_timezone_offset=*/1)) { + return 0; + } + return OPENSSL_tm_to_posix(&tm, out_time); +} + // The functions below do *not* permissively allow the use of four digit // timezone offsets in UTC times, as is done elsewhere in the code. They are // both new API, and used internally to X509_cmp_time. This is to discourage the diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_type.cc b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_type.cc index 3ff1a8c2fd..92e9ede52e 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_type.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_type.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_utctm.cc b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_utctm.cc index 993dd5d213..5c9e359875 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_utctm.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/a_utctm.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include @@ -102,34 +107,3 @@ ASN1_UTCTIME *ASN1_UTCTIME_adj(ASN1_UTCTIME *s, int64_t posix_time, s->type = V_ASN1_UTCTIME; return s; } - -int ASN1_UTCTIME_cmp_time_t(const ASN1_UTCTIME *s, time_t t) { - struct tm stm, ttm; - int day, sec; - - if (!asn1_utctime_to_tm(&stm, s, /*allow_timezone_offset=*/1)) { - return -2; - } - - if (!OPENSSL_posix_to_tm(t, &ttm)) { - return -2; - } - - if (!OPENSSL_gmtime_diff(&day, &sec, &ttm, &stm)) { - return -2; - } - - if (day > 0) { - return 1; - } - if (day < 0) { - return -1; - } - if (sec > 0) { - return 1; - } - if (sec < 0) { - return -1; - } - return 0; -} diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/asn1_lib.cc b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/asn1_lib.cc index 3685e88dd4..517dda5ebd 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/asn1_lib.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/asn1_lib.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/asn1_par.cc b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/asn1_par.cc index 131d70b947..7767ccad9d 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/asn1_par.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/asn1_par.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/asn_pack.cc b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/asn_pack.cc index 11e161234f..2d66061980 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/asn_pack.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/asn_pack.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/f_int.cc b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/f_int.cc index 6f1f7a60e7..e842e79e8f 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/f_int.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/f_int.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/f_string.cc b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/f_string.cc index d7c9a1f195..04cf751e11 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/f_string.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/f_string.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/internal.h b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/internal.h index d0cf97e607..302dd713e5 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/internal.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/internal.h @@ -1,11 +1,16 @@ -/* - * Copyright 2005-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2005-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_ASN1_INTERNAL_H #define OPENSSL_HEADER_ASN1_INTERNAL_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/posix_time.cc b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/posix_time.cc index b05c911ae4..1dd2ee4641 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/posix_time.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/posix_time.cc @@ -1,16 +1,16 @@ -/* Copyright 2022 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2022 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // Time conversion to/from POSIX time_t and struct tm, with no support // for time zones other than UTC diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/tasn_dec.cc b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/tasn_dec.cc index 4daece3210..bf5e03061e 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/tasn_dec.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/tasn_dec.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/tasn_enc.cc b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/tasn_enc.cc index 55363cae8c..9156e16bec 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/tasn_enc.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/tasn_enc.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/tasn_fre.cc b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/tasn_fre.cc index c7db6c3e64..8d1fefe32c 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/tasn_fre.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/tasn_fre.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/tasn_new.cc b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/tasn_new.cc index c35a052a3e..13bdbb8d2a 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/tasn_new.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/tasn_new.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/tasn_typ.cc b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/tasn_typ.cc index b2b83c187b..97d0e44b0e 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/tasn_typ.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/tasn_typ.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/tasn_utl.cc b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/tasn_utl.cc index 9dd93dafbb..4faf5cd531 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/asn1/tasn_utl.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/asn1/tasn_utl.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/base64/base64.cc b/naiveproxy/src/third_party/boringssl/src/crypto/base64/base64.cc index 88e52c03dc..1fbd23ce61 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/base64/base64.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/base64/base64.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/bcm_support.h b/naiveproxy/src/third_party/boringssl/src/crypto/bcm_support.h index 67a816fe58..903c85c2e4 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/bcm_support.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/bcm_support.h @@ -1,16 +1,16 @@ -/* Copyright 2024 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2024 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_CRYPTO_BCM_SUPPORT_H #define OPENSSL_HEADER_CRYPTO_BCM_SUPPORT_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/bio/bio.cc b/naiveproxy/src/third_party/boringssl/src/crypto/bio/bio.cc index 29dd3111a6..d1a53a3dca 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/bio/bio.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/bio/bio.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/bio/bio_mem.cc b/naiveproxy/src/third_party/boringssl/src/crypto/bio/bio_mem.cc index 08512d396d..2814074757 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/bio/bio_mem.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/bio/bio_mem.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/bio/connect.cc b/naiveproxy/src/third_party/boringssl/src/crypto/bio/connect.cc index 9056fff893..8175b9d2de 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/bio/connect.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/bio/connect.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/bio/errno.cc b/naiveproxy/src/third_party/boringssl/src/crypto/bio/errno.cc index 1976ee3bf9..6c0df07b22 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/bio/errno.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/bio/errno.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/bio/fd.cc b/naiveproxy/src/third_party/boringssl/src/crypto/bio/fd.cc index 72ab288f27..45819d7469 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/bio/fd.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/bio/fd.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/bio/file.cc b/naiveproxy/src/third_party/boringssl/src/crypto/bio/file.cc index 7836f255f5..40ca7257e4 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/bio/file.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/bio/file.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #if defined(__linux) || defined(__sun) || defined(__hpux) // Following definition aliases fopen to fopen64 on above mentioned diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/bio/hexdump.cc b/naiveproxy/src/third_party/boringssl/src/crypto/bio/hexdump.cc index bf7bc1ff9a..d7a9bef918 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/bio/hexdump.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/bio/hexdump.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/bio/internal.h b/naiveproxy/src/third_party/boringssl/src/crypto/bio/internal.h index fed4a88941..8c44d2ddf2 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/bio/internal.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/bio/internal.h @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_BIO_INTERNAL_H #define OPENSSL_HEADER_BIO_INTERNAL_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/bio/pair.cc b/naiveproxy/src/third_party/boringssl/src/crypto/bio/pair.cc index ac83199c2c..d12ea9db9d 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/bio/pair.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/bio/pair.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/bio/printf.cc b/naiveproxy/src/third_party/boringssl/src/crypto/bio/printf.cc index 2631f23809..ca74f9508e 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/bio/printf.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/bio/printf.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/bio/socket.cc b/naiveproxy/src/third_party/boringssl/src/crypto/bio/socket.cc index cee706e973..22ef4f7155 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/bio/socket.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/bio/socket.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/bio/socket_helper.cc b/naiveproxy/src/third_party/boringssl/src/crypto/bio/socket_helper.cc index d39e506907..4b8802042d 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/bio/socket_helper.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/bio/socket_helper.cc @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #if defined(__linux__) #undef _POSIX_C_SOURCE diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/blake2/blake2.cc b/naiveproxy/src/third_party/boringssl/src/crypto/blake2/blake2.cc index b9ba6153f7..d514b362f9 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/blake2/blake2.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/blake2/blake2.cc @@ -1,16 +1,16 @@ -/* Copyright 2021 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2021 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/bn_extra/bn_asn1.cc b/naiveproxy/src/third_party/boringssl/src/crypto/bn/bn_asn1.cc similarity index 58% rename from naiveproxy/src/third_party/boringssl/src/crypto/bn_extra/bn_asn1.cc rename to naiveproxy/src/third_party/boringssl/src/crypto/bn/bn_asn1.cc index 7027e8d55e..38b03eb8d0 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/bn_extra/bn_asn1.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/bn/bn_asn1.cc @@ -1,16 +1,16 @@ -/* Copyright 2015 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2015 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/bn_extra/convert.cc b/naiveproxy/src/third_party/boringssl/src/crypto/bn/convert.cc similarity index 93% rename from naiveproxy/src/third_party/boringssl/src/crypto/bn_extra/convert.cc rename to naiveproxy/src/third_party/boringssl/src/crypto/bn/convert.cc index 8a7a66159b..6f4d4fa7b7 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/bn_extra/convert.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/bn/convert.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/buf/buf.cc b/naiveproxy/src/third_party/boringssl/src/crypto/buf/buf.cc index 8c000822f7..cb797b2a57 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/buf/buf.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/buf/buf.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/bytestring/asn1_compat.cc b/naiveproxy/src/third_party/boringssl/src/crypto/bytestring/asn1_compat.cc index 863ae74354..6c9770ba63 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/bytestring/asn1_compat.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/bytestring/asn1_compat.cc @@ -1,16 +1,16 @@ -/* Copyright 2016 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2016 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/bytestring/ber.cc b/naiveproxy/src/third_party/boringssl/src/crypto/bytestring/ber.cc index a0051af297..758bf0afde 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/bytestring/ber.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/bytestring/ber.cc @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/bytestring/cbb.cc b/naiveproxy/src/third_party/boringssl/src/crypto/bytestring/cbb.cc index 5557bf5b56..316ac4a076 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/bytestring/cbb.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/bytestring/cbb.cc @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/bytestring/cbs.cc b/naiveproxy/src/third_party/boringssl/src/crypto/bytestring/cbs.cc index 071012d4d4..efdf3f01ba 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/bytestring/cbs.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/bytestring/cbs.cc @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/bytestring/internal.h b/naiveproxy/src/third_party/boringssl/src/crypto/bytestring/internal.h index e48fdcef5e..f2ea91a832 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/bytestring/internal.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/bytestring/internal.h @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_BYTESTRING_INTERNAL_H #define OPENSSL_HEADER_BYTESTRING_INTERNAL_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/bytestring/unicode.cc b/naiveproxy/src/third_party/boringssl/src/crypto/bytestring/unicode.cc index 9c803dbe74..74f558eb6b 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/bytestring/unicode.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/bytestring/unicode.cc @@ -1,16 +1,16 @@ -/* Copyright 2018 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2018 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/chacha/asm/chacha-armv4.pl b/naiveproxy/src/third_party/boringssl/src/crypto/chacha/asm/chacha-armv4.pl index fd92fdb4fb..1520c6f4ac 100755 --- a/naiveproxy/src/third_party/boringssl/src/crypto/chacha/asm/chacha-armv4.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/chacha/asm/chacha-armv4.pl @@ -1,17 +1,22 @@ #! /usr/bin/env perl # Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # # ==================================================================== # Written by Andy Polyakov for the OpenSSL -# project. The module is, however, dual licensed under OpenSSL and -# CRYPTOGAMS licenses depending on where you obtain it. For further -# details see http://www.openssl.org/~appro/cryptogams/. +# project. # ==================================================================== # # December 2014 diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/chacha/asm/chacha-armv8.pl b/naiveproxy/src/third_party/boringssl/src/crypto/chacha/asm/chacha-armv8.pl index 6818da2145..87be36950d 100755 --- a/naiveproxy/src/third_party/boringssl/src/crypto/chacha/asm/chacha-armv8.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/chacha/asm/chacha-armv8.pl @@ -1,17 +1,22 @@ #! /usr/bin/env perl # Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # # ==================================================================== # Written by Andy Polyakov for the OpenSSL -# project. The module is, however, dual licensed under OpenSSL and -# CRYPTOGAMS licenses depending on where you obtain it. For further -# details see http://www.openssl.org/~appro/cryptogams/. +# project. # ==================================================================== # # June 2015 diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/chacha/asm/chacha-x86.pl b/naiveproxy/src/third_party/boringssl/src/crypto/chacha/asm/chacha-x86.pl index ae477fc7de..7d3df9ab99 100755 --- a/naiveproxy/src/third_party/boringssl/src/crypto/chacha/asm/chacha-x86.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/chacha/asm/chacha-x86.pl @@ -1,17 +1,22 @@ #! /usr/bin/env perl # Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # # ==================================================================== # Written by Andy Polyakov for the OpenSSL -# project. The module is, however, dual licensed under OpenSSL and -# CRYPTOGAMS licenses depending on where you obtain it. For further -# details see http://www.openssl.org/~appro/cryptogams/. +# project. # ==================================================================== # # January 2015 diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/chacha/asm/chacha-x86_64.pl b/naiveproxy/src/third_party/boringssl/src/crypto/chacha/asm/chacha-x86_64.pl index 333ef9b263..c34ed9af59 100755 --- a/naiveproxy/src/third_party/boringssl/src/crypto/chacha/asm/chacha-x86_64.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/chacha/asm/chacha-x86_64.pl @@ -1,17 +1,22 @@ #! /usr/bin/env perl # Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # # ==================================================================== # Written by Andy Polyakov for the OpenSSL -# project. The module is, however, dual licensed under OpenSSL and -# CRYPTOGAMS licenses depending on where you obtain it. For further -# details see http://www.openssl.org/~appro/cryptogams/. +# project. # ==================================================================== # # November 2014 diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/chacha/chacha.cc b/naiveproxy/src/third_party/boringssl/src/crypto/chacha/chacha.cc index 43b12aa208..ee78a7dcbe 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/chacha/chacha.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/chacha/chacha.cc @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // Adapted from the public domain, estream code by D. Bernstein. diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/chacha/internal.h b/naiveproxy/src/third_party/boringssl/src/crypto/chacha/internal.h index c30429cb15..828621b9f3 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/chacha/internal.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/chacha/internal.h @@ -1,16 +1,16 @@ -/* Copyright 2018 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2018 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_CHACHA_INTERNAL #define OPENSSL_HEADER_CHACHA_INTERNAL diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/asm/aes128gcmsiv-x86_64.pl b/naiveproxy/src/third_party/boringssl/src/crypto/cipher/asm/aes128gcmsiv-x86_64.pl similarity index 98% rename from naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/asm/aes128gcmsiv-x86_64.pl rename to naiveproxy/src/third_party/boringssl/src/crypto/cipher/asm/aes128gcmsiv-x86_64.pl index a478861122..dec73fc4fd 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/asm/aes128gcmsiv-x86_64.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/cipher/asm/aes128gcmsiv-x86_64.pl @@ -3,17 +3,17 @@ # Copyright (c) 2017, Shay Gueron. # Copyright 2017 The BoringSSL Authors # -# Permission to use, copy, modify, and/or distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at # -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. use warnings FATAL => 'all'; diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/asm/chacha20_poly1305_armv8.pl b/naiveproxy/src/third_party/boringssl/src/crypto/cipher/asm/chacha20_poly1305_armv8.pl similarity index 98% rename from naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/asm/chacha20_poly1305_armv8.pl rename to naiveproxy/src/third_party/boringssl/src/crypto/cipher/asm/chacha20_poly1305_armv8.pl index 9bd7f49d60..b5715c91ff 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/asm/chacha20_poly1305_armv8.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/cipher/asm/chacha20_poly1305_armv8.pl @@ -2,17 +2,17 @@ # Copyright (c) 2020, CloudFlare Ltd. # -# Permission to use, copy, modify, and/or distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at # -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. ############################################################################## # # diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/asm/chacha20_poly1305_x86_64.pl b/naiveproxy/src/third_party/boringssl/src/crypto/cipher/asm/chacha20_poly1305_x86_64.pl similarity index 98% rename from naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/asm/chacha20_poly1305_x86_64.pl rename to naiveproxy/src/third_party/boringssl/src/crypto/cipher/asm/chacha20_poly1305_x86_64.pl index 9297052272..1abc178090 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/asm/chacha20_poly1305_x86_64.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/cipher/asm/chacha20_poly1305_x86_64.pl @@ -2,17 +2,17 @@ # Copyright (c) 2015, CloudFlare Ltd. # -# Permission to use, copy, modify, and/or distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at # -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. ############################################################################## # # @@ -440,10 +440,10 @@ poly_hash_ad_internal: # union chacha20_poly1305_open_data *aead_data) # $code.=" -.globl chacha20_poly1305_open_nohw -.type chacha20_poly1305_open_nohw,\@function,6 +.globl chacha20_poly1305_open_sse41 +.type chacha20_poly1305_open_sse41,\@function,6 .align 64 -chacha20_poly1305_open_nohw: +chacha20_poly1305_open_sse41: .cfi_startproc _CET_ENDBR push %rbp @@ -849,7 +849,7 @@ $code.=" movdqa $C2, $B2 movdqa $D2, $C2 jmp .Lopen_sse_128_xor_hash -.size chacha20_poly1305_open_nohw, .-chacha20_poly1305_open_nohw +.size chacha20_poly1305_open_sse41, .-chacha20_poly1305_open_sse41 .cfi_endproc ################################################################################ @@ -858,10 +858,10 @@ $code.=" # size_t plaintext_len, const uint8_t *ad, # size_t ad_len, # union chacha20_poly1305_seal_data *data); -.globl chacha20_poly1305_seal_nohw -.type chacha20_poly1305_seal_nohw,\@function,6 +.globl chacha20_poly1305_seal_sse41 +.type chacha20_poly1305_seal_sse41,\@function,6 .align 64 -chacha20_poly1305_seal_nohw: +chacha20_poly1305_seal_sse41: .cfi_startproc _CET_ENDBR push %rbp @@ -1357,7 +1357,7 @@ $code.=" mov %r8, $itr2 call poly_hash_ad_internal jmp .Lseal_sse_128_tail_xor -.size chacha20_poly1305_seal_nohw, .-chacha20_poly1305_seal_nohw +.size chacha20_poly1305_seal_sse41, .-chacha20_poly1305_seal_sse41 .cfi_endproc\n"; } diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/derive_key.cc b/naiveproxy/src/third_party/boringssl/src/crypto/cipher/derive_key.cc similarity index 75% rename from naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/derive_key.cc rename to naiveproxy/src/third_party/boringssl/src/crypto/cipher/derive_key.cc index b805c1fb7a..d8aecddba2 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/derive_key.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/cipher/derive_key.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/e_aesctrhmac.cc b/naiveproxy/src/third_party/boringssl/src/crypto/cipher/e_aesctrhmac.cc similarity index 92% rename from naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/e_aesctrhmac.cc rename to naiveproxy/src/third_party/boringssl/src/crypto/cipher/e_aesctrhmac.cc index f9845a4227..fc4e0c5325 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/e_aesctrhmac.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/cipher/e_aesctrhmac.cc @@ -1,16 +1,16 @@ -/* Copyright 2017 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2017 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/e_aesgcmsiv.cc b/naiveproxy/src/third_party/boringssl/src/crypto/cipher/e_aesgcmsiv.cc similarity index 97% rename from naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/e_aesgcmsiv.cc rename to naiveproxy/src/third_party/boringssl/src/crypto/cipher/e_aesgcmsiv.cc index 5d5b6fb4cb..b429dc5591 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/e_aesgcmsiv.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/cipher/e_aesgcmsiv.cc @@ -1,16 +1,16 @@ -/* Copyright 2017 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2017 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/e_chacha20poly1305.cc b/naiveproxy/src/third_party/boringssl/src/crypto/cipher/e_chacha20poly1305.cc similarity index 93% rename from naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/e_chacha20poly1305.cc rename to naiveproxy/src/third_party/boringssl/src/crypto/cipher/e_chacha20poly1305.cc index dc8deb19e6..d1a9b34ae1 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/e_chacha20poly1305.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/cipher/e_chacha20poly1305.cc @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/e_des.cc b/naiveproxy/src/third_party/boringssl/src/crypto/cipher/e_des.cc similarity index 89% rename from naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/e_des.cc rename to naiveproxy/src/third_party/boringssl/src/crypto/cipher/e_des.cc index 4cd44dd516..cf85371c92 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/e_des.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/cipher/e_des.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/e_null.cc b/naiveproxy/src/third_party/boringssl/src/crypto/cipher/e_null.cc similarity index 56% rename from naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/e_null.cc rename to naiveproxy/src/third_party/boringssl/src/crypto/cipher/e_null.cc index c69d50d26e..4e59448b99 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/e_null.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/cipher/e_null.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/e_rc2.cc b/naiveproxy/src/third_party/boringssl/src/crypto/cipher/e_rc2.cc similarity index 95% rename from naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/e_rc2.cc rename to naiveproxy/src/third_party/boringssl/src/crypto/cipher/e_rc2.cc index 466259390d..250351afd8 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/e_rc2.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/cipher/e_rc2.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/e_rc4.cc b/naiveproxy/src/third_party/boringssl/src/crypto/cipher/e_rc4.cc similarity index 60% rename from naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/e_rc4.cc rename to naiveproxy/src/third_party/boringssl/src/crypto/cipher/e_rc4.cc index 9fe4c85866..2450a73cd0 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/e_rc4.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/cipher/e_rc4.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/e_tls.cc b/naiveproxy/src/third_party/boringssl/src/crypto/cipher/e_tls.cc similarity index 96% rename from naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/e_tls.cc rename to naiveproxy/src/third_party/boringssl/src/crypto/cipher/e_tls.cc index b21b06207e..ccb677bad9 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/e_tls.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/cipher/e_tls.cc @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/cipher_extra.cc b/naiveproxy/src/third_party/boringssl/src/crypto/cipher/get_cipher.cc similarity index 78% rename from naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/cipher_extra.cc rename to naiveproxy/src/third_party/boringssl/src/crypto/cipher/get_cipher.cc index 2d0f369bde..2622dc78d1 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/cipher_extra.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/cipher/get_cipher.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/internal.h b/naiveproxy/src/third_party/boringssl/src/crypto/cipher/internal.h similarity index 90% rename from naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/internal.h rename to naiveproxy/src/third_party/boringssl/src/crypto/cipher/internal.h index c10766d36e..c0fb07ae09 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/internal.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/cipher/internal.h @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_CIPHER_EXTRA_INTERNAL_H #define OPENSSL_HEADER_CIPHER_EXTRA_INTERNAL_H @@ -146,7 +151,7 @@ inline int chacha20_poly1305_asm_capable(void) { // write calculated tag value to |aead_data->out.tag|, which the caller must // check. #if defined(OPENSSL_X86_64) -extern void chacha20_poly1305_open_nohw( +extern void chacha20_poly1305_open_sse41( uint8_t *out_plaintext, const uint8_t *ciphertext, size_t plaintext_len, const uint8_t *ad, size_t ad_len, union chacha20_poly1305_open_data *data); extern void chacha20_poly1305_open_avx2( @@ -161,8 +166,8 @@ inline void chacha20_poly1305_open(uint8_t *out_plaintext, chacha20_poly1305_open_avx2(out_plaintext, ciphertext, plaintext_len, ad, ad_len, data); } else { - chacha20_poly1305_open_nohw(out_plaintext, ciphertext, plaintext_len, ad, - ad_len, data); + chacha20_poly1305_open_sse41(out_plaintext, ciphertext, plaintext_len, ad, + ad_len, data); } } #else @@ -179,7 +184,7 @@ extern void chacha20_poly1305_open(uint8_t *out_plaintext, // value is over the computed ciphertext concatenated with |extra_ciphertext| // and written to |aead_data->out.tag|. #if defined(OPENSSL_X86_64) -extern void chacha20_poly1305_seal_nohw( +extern void chacha20_poly1305_seal_sse41( uint8_t *out_ciphertext, const uint8_t *plaintext, size_t plaintext_len, const uint8_t *ad, size_t ad_len, union chacha20_poly1305_seal_data *data); extern void chacha20_poly1305_seal_avx2( @@ -194,8 +199,8 @@ inline void chacha20_poly1305_seal(uint8_t *out_ciphertext, chacha20_poly1305_seal_avx2(out_ciphertext, plaintext, plaintext_len, ad, ad_len, data); } else { - chacha20_poly1305_seal_nohw(out_ciphertext, plaintext, plaintext_len, ad, - ad_len, data); + chacha20_poly1305_seal_sse41(out_ciphertext, plaintext, plaintext_len, ad, + ad_len, data); } } #else diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/cipher/test/make_all_legacy_aead_tests.sh b/naiveproxy/src/third_party/boringssl/src/crypto/cipher/test/make_all_legacy_aead_tests.sh new file mode 100755 index 0000000000..bf62d440de --- /dev/null +++ b/naiveproxy/src/third_party/boringssl/src/crypto/cipher/test/make_all_legacy_aead_tests.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +set -xe + +go run make_legacy_aead_tests.go -cipher aes128 -mac sha1 > aes_128_cbc_sha1_tls_tests.txt +go run make_legacy_aead_tests.go -cipher aes128 -mac sha1 -implicit-iv > aes_128_cbc_sha1_tls_implicit_iv_tests.txt + +go run make_legacy_aead_tests.go -cipher aes256 -mac sha1 > aes_256_cbc_sha1_tls_tests.txt +go run make_legacy_aead_tests.go -cipher aes256 -mac sha1 -implicit-iv > aes_256_cbc_sha1_tls_implicit_iv_tests.txt + +go run make_legacy_aead_tests.go -cipher 3des -mac sha1 > des_ede3_cbc_sha1_tls_tests.txt +go run make_legacy_aead_tests.go -cipher 3des -mac sha1 -implicit-iv > des_ede3_cbc_sha1_tls_implicit_iv_tests.txt diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/cipher/test/make_legacy_aead_tests.go b/naiveproxy/src/third_party/boringssl/src/crypto/cipher/test/make_legacy_aead_tests.go new file mode 100644 index 0000000000..b5c6894801 --- /dev/null +++ b/naiveproxy/src/third_party/boringssl/src/crypto/cipher/test/make_legacy_aead_tests.go @@ -0,0 +1,321 @@ +package main + +import ( + "crypto" + "crypto/aes" + "crypto/cipher" + "crypto/des" + "crypto/hmac" + _ "crypto/md5" + "crypto/rc4" + _ "crypto/sha1" + _ "crypto/sha256" + _ "crypto/sha512" + "encoding/hex" + "flag" + "fmt" + "os" +) + +var bulkCipher *string = flag.String("cipher", "", "The bulk cipher to use") +var mac *string = flag.String("mac", "", "The hash function to use in the MAC") +var implicitIV *bool = flag.Bool("implicit-iv", false, "If true, generate tests for a cipher using a pre-TLS-1.0 implicit IV") + +// rc4Stream produces a deterministic stream of pseudorandom bytes. This is to +// make this script idempotent. +type rc4Stream struct { + cipher *rc4.Cipher +} + +func newRc4Stream(seed string) (*rc4Stream, error) { + cipher, err := rc4.NewCipher([]byte(seed)) + if err != nil { + return nil, err + } + return &rc4Stream{cipher}, nil +} + +func (rs *rc4Stream) fillBytes(p []byte) { + for i := range p { + p[i] = 0 + } + rs.cipher.XORKeyStream(p, p) +} + +func getHash(name string) (crypto.Hash, bool) { + switch name { + case "md5": + return crypto.MD5, true + case "sha1": + return crypto.SHA1, true + case "sha256": + return crypto.SHA256, true + case "sha384": + return crypto.SHA384, true + default: + return 0, false + } +} + +func getKeySize(name string) int { + switch name { + case "aes128": + return 16 + case "aes256": + return 32 + case "3des": + return 24 + default: + return 0 + } +} + +func newBlockCipher(name string, key []byte) (cipher.Block, error) { + switch name { + case "aes128": + return aes.NewCipher(key) + case "aes256": + return aes.NewCipher(key) + case "3des": + return des.NewTripleDESCipher(key) + default: + return nil, fmt.Errorf("unknown cipher '%s'", name) + } +} + +type testCase struct { + digest []byte + key []byte + nonce []byte + input []byte + ad []byte + ciphertext []byte + tag []byte + tag_len int + noSeal bool + fails bool +} + +// options adds additional options for a test. +type options struct { + // extraPadding causes an extra block of padding to be added. + extraPadding bool + // maximalPadding causes the maximum allowed amount of padding to be added. + maximalPadding bool + // wrongPadding causes one of the padding bytes to be wrong. + wrongPadding bool + // wrongPaddingOffset specifies the byte offset of the incorrect padding + // byte. + wrongPaddingOffset int + // noPadding causes padding is to be omitted. The plaintext + MAC must + // be a multiple of the block size. + noPadding bool + // omitMAC causes the MAC to be omitted. + omitMAC bool +} + +func makeTestCase(length int, options options) (*testCase, error) { + rand, err := newRc4Stream("input stream") + if err != nil { + return nil, err + } + + input := make([]byte, length) + rand.fillBytes(input) + + adFull := make([]byte, 13) + ad := adFull[:len(adFull)-2] + rand.fillBytes(ad) + adFull[len(adFull)-2] = uint8(length >> 8) + adFull[len(adFull)-1] = uint8(length & 0xff) + + hash, ok := getHash(*mac) + if !ok { + return nil, fmt.Errorf("unknown hash function '%s'", *mac) + } + + macKey := make([]byte, hash.Size()) + rand.fillBytes(macKey) + + h := hmac.New(hash.New, macKey) + h.Write(adFull) + h.Write(input) + digest := h.Sum(nil) + + size := getKeySize(*bulkCipher) + if size == 0 { + return nil, fmt.Errorf("unknown cipher '%s'", *bulkCipher) + } + encKey := make([]byte, size) + rand.fillBytes(encKey) + + var fixedIV []byte + var nonce []byte + var sealed []byte + var noSeal, fails bool + block, err := newBlockCipher(*bulkCipher, encKey) + if err != nil { + return nil, err + } + + iv := make([]byte, block.BlockSize()) + rand.fillBytes(iv) + if *implicitIV { + fixedIV = iv + } else { + nonce = iv + } + + cbc := cipher.NewCBCEncrypter(block, iv) + + sealed = make([]byte, 0, len(input)+len(digest)+cbc.BlockSize()) + sealed = append(sealed, input...) + if options.omitMAC { + noSeal = true + fails = true + } else { + sealed = append(sealed, digest...) + } + paddingLen := cbc.BlockSize() - len(sealed)%cbc.BlockSize() + if options.noPadding { + if paddingLen != cbc.BlockSize() { + return nil, fmt.Errorf("invalid length for noPadding") + } + noSeal = true + fails = true + } else { + if options.extraPadding || options.maximalPadding { + if options.extraPadding { + paddingLen += cbc.BlockSize() + } else { + if 256%cbc.BlockSize() != 0 { + panic("256 is not a whole number of blocks") + } + paddingLen = 256 - len(sealed)%cbc.BlockSize() + } + noSeal = true + } + pad := make([]byte, paddingLen) + for i := range pad { + pad[i] = byte(paddingLen - 1) + } + sealed = append(sealed, pad...) + if options.wrongPadding { + if options.wrongPaddingOffset >= paddingLen { + return nil, fmt.Errorf("invalid wrongPaddingOffset") + } + sealed[len(sealed)-paddingLen+options.wrongPaddingOffset]++ + noSeal = true + // TLS specifies the all the padding bytes. + fails = true + } + } + cbc.CryptBlocks(sealed, sealed) + + key := make([]byte, 0, len(macKey)+len(encKey)+len(fixedIV)) + key = append(key, macKey...) + key = append(key, encKey...) + key = append(key, fixedIV...) + t := &testCase{ + digest: digest, + key: key, + nonce: nonce, + input: input, + ad: ad, + ciphertext: sealed[:len(input)], + tag: sealed[len(input):], + tag_len: hash.Size(), + noSeal: noSeal, + fails: fails, + } + return t, nil +} + +func printTestCase(t *testCase) { + fmt.Printf("# DIGEST: %s\n", hex.EncodeToString(t.digest)) + fmt.Printf("KEY: %s\n", hex.EncodeToString(t.key)) + fmt.Printf("NONCE: %s\n", hex.EncodeToString(t.nonce)) + fmt.Printf("IN: %s\n", hex.EncodeToString(t.input)) + fmt.Printf("AD: %s\n", hex.EncodeToString(t.ad)) + fmt.Printf("CT: %s\n", hex.EncodeToString(t.ciphertext)) + fmt.Printf("TAG: %s\n", hex.EncodeToString(t.tag)) + fmt.Printf("TAG_LEN: %d\n", t.tag_len) + if t.noSeal { + fmt.Printf("NO_SEAL: 01\n") + } + if t.fails { + fmt.Printf("FAILS: 01\n") + } +} + +func addTestCase(length int, options options) { + t, err := makeTestCase(length, options) + if err != nil { + fmt.Fprintf(os.Stderr, "%s\n", err) + os.Exit(1) + } + printTestCase(t) + fmt.Printf("\n") +} + +func main() { + flag.Parse() + + commandLine := fmt.Sprintf("go run make_legacy_aead_tests.go -cipher %s -mac %s", *bulkCipher, *mac) + if *implicitIV { + commandLine += " -implicit-iv" + } + fmt.Printf("# Generated by\n") + fmt.Printf("# %s\n", commandLine) + fmt.Printf("#\n") + fmt.Printf("# Note: aead_test's input format splits the ciphertext and tag positions of the\n") + fmt.Printf("# sealed input. But these legacy AEADs are MAC-then-encrypt and so the 'TAG' may\n") + fmt.Printf("# also include padding. We write the byte length of the MAC to 'TAG_LEN' and\n") + fmt.Printf("# include the unencrypted MAC in the 'DIGEST' tag above # each test case.\n") + fmt.Printf("# each test case.\n") + fmt.Printf("\n") + + // For CBC-mode ciphers, emit tests for padding flexibility. + fmt.Printf("# Test with non-minimal padding.\n") + addTestCase(5, options{extraPadding: true}) + + fmt.Printf("# Test with bad padding values.\n") + addTestCase(5, options{wrongPadding: true}) + + hash, ok := getHash(*mac) + if !ok { + panic("unknown hash") + } + + fmt.Printf("# Test with no padding.\n") + addTestCase(64-hash.Size(), options{noPadding: true}) + + // Test with maximal padding at all rotations modulo the hash's block + // size. Our smallest hash (SHA-1 at 64-byte blocks) exceeds our largest + // block cipher (AES at 16-byte blocks), so this is also covers all + // block cipher rotations. This is to ensure full coverage of the + // kVarianceBlocks value in the constant-time logic. + hashBlockSize := hash.New().BlockSize() + for i := 0; i < hashBlockSize; i++ { + fmt.Printf("# Test with maximal padding (%d mod %d).\n", i, hashBlockSize) + addTestCase(hashBlockSize+i, options{maximalPadding: true}) + } + + fmt.Printf("# Test if the unpadded input is too short for a MAC, but not publicly so.\n") + addTestCase(0, options{omitMAC: true, maximalPadding: true}) + + fmt.Printf("# Test that each byte of incorrect padding is noticed.\n") + for i := 0; i < 256; i++ { + addTestCase(64-hash.Size(), options{ + maximalPadding: true, + wrongPadding: true, + wrongPaddingOffset: i, + }) + } + + // Generate long enough of input to cover a non-zero num_starting_blocks + // value in the constant-time CBC logic. + for l := 0; l < 500; l += 5 { + addTestCase(l, options{}) + } +} diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/cipher/test/nist_cavp/make_cavp.go b/naiveproxy/src/third_party/boringssl/src/crypto/cipher/test/nist_cavp/make_cavp.go new file mode 100644 index 0000000000..1bf23a6275 --- /dev/null +++ b/naiveproxy/src/third_party/boringssl/src/crypto/cipher/test/nist_cavp/make_cavp.go @@ -0,0 +1,297 @@ +// Copyright 2017 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// The make_cavp utility generates cipher_test input files from NIST CAVP Known +// Answer Test response (.rsp) files. +package main + +import ( + "bufio" + "flag" + "fmt" + "io" + "log" + "os" + "strings" +) + +var ( + cipher = flag.String("cipher", "", "The name of the cipher/mode (supported: aes, tdes, gcm). Required.") + cmdLineLabelStr = flag.String("extra-labels", "", "Comma-separated list of additional label pairs to add (e.g. 'Cipher=AES-128-CBC,Operation=ENCRYPT')") + swapIVAndPlaintext = flag.Bool("swap-iv-plaintext", false, "When processing CBC vector files for CTR mode, swap IV and plaintext.") +) + +type kvPair struct { + key, value string +} + +// Test generates a FileTest file from a CAVP response file. +type Test struct { + translations map[kvPair]kvPair + transform func(k, v string) []kvPair + defaults map[string]string + // kvDelim is the rune that delimits key-value pairs throughout the file ('=' or ':'). + kvDelim rune +} + +func (t *Test) parseKeyValue(s string) (key, value string) { + if t.kvDelim == 0 { + i := strings.IndexAny(s, "=:") + if i != -1 { + t.kvDelim = rune(s[i]) + } + } + if i := strings.IndexRune(s, t.kvDelim); t.kvDelim != 0 && i != -1 { + key, value = s[:i], s[i+1:] + if trimmed := strings.TrimSpace(value); len(trimmed) != 0 { + value = trimmed + } else { + value = " " + } + } else { + key = s + } + return strings.TrimSpace(key), value +} + +func (t *Test) translateKeyValue(key, value string) (string, string) { + if kv, ok := t.translations[kvPair{key, ""}]; ok { + if len(kv.value) == 0 && len(value) != 0 { + return kv.key, value + } + return kv.key, kv.value + } + if kv, ok := t.translations[kvPair{key, value}]; ok { + return kv.key, kv.value + } + return key, value +} + +func printKeyValue(key, value string) { + if len(value) == 0 { + fmt.Println(key) + } else { + // Omit the value if it is " ", i.e. print "key: ", not "key: ". + value = strings.TrimSpace(value) + fmt.Printf("%s: %s\n", key, value) + } +} + +func (t *Test) generate(r io.Reader, cmdLineLabelStr string) { + s := bufio.NewScanner(r) + + // Label blocks consist of lines of the form "[key]" or "[key = + // value]". |labels| holds keys and values of the most recent block + // of labels. + var labels map[string]string + + // Auxiliary labels passed as a flag. + cmdLineLabels := make(map[string]string) + if len(cmdLineLabelStr) != 0 { + pairs := strings.Split(cmdLineLabelStr, ",") + for _, p := range pairs { + key, value := t.parseKeyValue(p) + cmdLineLabels[key] = value + } + } + + t.kvDelim = 0 // Reset kvDelim for scanning the file. + + // Whether we are in a test or a label section. + inLabels := false + inTest := false + + n := 0 + var currentKv map[string]string + for s.Scan() { + n++ + line := s.Text() + l := strings.TrimSpace(line) + l = strings.SplitN(l, "#", 2)[0] // Trim trailing comments. + + // Blank line. + if len(l) == 0 { + if inTest { + // Fill in missing defaults at the end of a test case. + for k, v := range t.defaults { + if _, ok := currentKv[k]; !ok { + printKeyValue(k, v) + } + } + fmt.Println() + } + inTest = false + currentKv = make(map[string]string) + inLabels = false + continue + } + + // Label section. + if l[0] == '[' { + if l[len(l)-1] != ']' { + log.Fatalf("line #%d invalid: %q", n, line) + } + if !inLabels { + labels = make(map[string]string) + inLabels = true + } + + k, v := t.parseKeyValue(l[1 : len(l)-1]) + k, v = t.translateKeyValue(k, v) + if len(k) != 0 { + labels[k] = v + } + + continue + } + + // Repeat the label map at the beginning of each test section. + if !inTest { + inTest = true + for k, v := range cmdLineLabels { + printKeyValue(k, v) + currentKv[k] = v + } + for k, v := range labels { + printKeyValue(k, v) + currentKv[k] = v + } + } + + // Look up translation and apply transformation (if any). + k, v := t.parseKeyValue(l) + k, v = t.translateKeyValue(k, v) + kvPairs := []kvPair{{k, v}} + if t.transform != nil { + kvPairs = t.transform(k, v) + } + + for _, kv := range kvPairs { + k, v := kv.key, kv.value + if *cipher == "tdes" && k == "Key" { + v += v + v // Key1=Key2=Key3 + } + if len(k) != 0 { + printKeyValue(k, v) + currentKv[k] = v + } + } + } +} + +func usage() { + fmt.Fprintln(os.Stderr, "usage: make_cavp [ ...]") + flag.PrintDefaults() +} + +func maybeSwapIVAndPlaintext(k, v string) []kvPair { + if *swapIVAndPlaintext { + if k == "Plaintext" { + return []kvPair{{"IV", v}} + } else if k == "IV" { + return []kvPair{{"Plaintext", v}} + } + } + return []kvPair{{k, v}} +} + +// Test generator for different values of the -cipher flag. +var testMap = map[string]Test{ + // Generate cipher_test input file from AESVS .rsp file. + "aes": Test{ + translations: map[kvPair]kvPair{ + {"ENCRYPT", ""}: {"Operation", "ENCRYPT"}, + {"DECRYPT", ""}: {"Operation", "DECRYPT"}, + {"COUNT", ""}: {"Count", ""}, + {"KEY", ""}: {"Key", ""}, + {"PLAINTEXT", ""}: {"Plaintext", ""}, + {"CIPHERTEXT", ""}: {"Ciphertext", ""}, + {"COUNT", ""}: {"", ""}, // delete + }, + transform: maybeSwapIVAndPlaintext, + }, + // Generate cipher_test input file from TMOVS .rsp file. + "tdes": Test{ + translations: map[kvPair]kvPair{ + {"ENCRYPT", ""}: {"Operation", "ENCRYPT"}, + {"DECRYPT", ""}: {"Operation", "DECRYPT"}, + {"COUNT", ""}: {"Count", ""}, + {"KEYs", ""}: {"Key", ""}, + {"PLAINTEXT", ""}: {"Plaintext", ""}, + {"CIPHERTEXT", ""}: {"Ciphertext", ""}, + {"COUNT", ""}: {"", ""}, // delete + }, + transform: maybeSwapIVAndPlaintext, + }, + // Generate aead_test input file from GCMVS .rsp file. + "gcm": Test{ + translations: map[kvPair]kvPair{ + {"Keylen", ""}: {"", ""}, // delete + {"IVlen", ""}: {"", ""}, // delete + {"PTlen", ""}: {"", ""}, // delete + {"AADlen", ""}: {"", ""}, // delete + {"Taglen", ""}: {"", ""}, // delete + {"Count", ""}: {"", ""}, // delete + {"Key", ""}: {"KEY", ""}, + {"IV", ""}: {"NONCE", ""}, + {"PT", ""}: {"IN", ""}, + {"AAD", ""}: {"AD", ""}, + {"Tag", ""}: {"TAG", ""}, + {"FAIL", ""}: {"FAILS", " "}, + }, + transform: func(k, v string) []kvPair { + if k == "FAILS" { + // FAIL cases only appear in the decrypt rsp files. Skip encryption for + // these. + return []kvPair{{"FAILS", " "}, {"NO_SEAL", " "}} + } + return []kvPair{{k, v}} + }, + defaults: map[string]string{ + "IN": " ", // FAIL tests don't have IN + }, + }, +} + +func main() { + flag.Usage = usage + flag.Parse() + + if len(flag.Args()) == 0 { + fmt.Fprintf(os.Stderr, "no input files\n\n") + flag.Usage() + os.Exit(1) + } + + test, ok := testMap[*cipher] + if !ok { + fmt.Fprintf(os.Stderr, "invalid cipher: %q\n\n", *cipher) + flag.Usage() + os.Exit(1) + } + + args := append([]string{"make_cavp"}, os.Args[1:]...) + fmt.Printf("# Generated by %q\n\n", strings.Join(args, " ")) + + for i, p := range flag.Args() { + f, err := os.Open(p) + if err != nil { + log.Fatal(err) + } + defer f.Close() + + fmt.Printf("# File %d: %s\n\n", i+1, p) + test.generate(f, *cmdLineLabelStr) + } +} diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/tls_cbc.cc b/naiveproxy/src/third_party/boringssl/src/crypto/cipher/tls_cbc.cc similarity index 96% rename from naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/tls_cbc.cc rename to naiveproxy/src/third_party/boringssl/src/crypto/cipher/tls_cbc.cc index 8f0e243935..d34d2d6edf 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/cipher_extra/tls_cbc.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/cipher/tls_cbc.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2012-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2012-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/conf/conf.cc b/naiveproxy/src/third_party/boringssl/src/crypto/conf/conf.cc index 9b286979dd..02f2be34bd 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/conf/conf.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/conf/conf.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/conf/internal.h b/naiveproxy/src/third_party/boringssl/src/crypto/conf/internal.h index 0f2f1a670e..521d3a4de4 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/conf/internal.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/conf/internal.h @@ -1,16 +1,16 @@ -/* Copyright 2015 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2015 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_CRYPTO_CONF_INTERNAL_H #define OPENSSL_HEADER_CRYPTO_CONF_INTERNAL_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/cpu_aarch64_apple.cc b/naiveproxy/src/third_party/boringssl/src/crypto/cpu_aarch64_apple.cc index 27f4c4be37..d1de9636ab 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/cpu_aarch64_apple.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/cpu_aarch64_apple.cc @@ -1,16 +1,16 @@ -/* Copyright 2021 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2021 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "internal.h" diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/cpu_aarch64_fuchsia.cc b/naiveproxy/src/third_party/boringssl/src/crypto/cpu_aarch64_fuchsia.cc index 91f094face..326d5d8593 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/cpu_aarch64_fuchsia.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/cpu_aarch64_fuchsia.cc @@ -1,16 +1,16 @@ -/* Copyright 2018 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2018 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "internal.h" diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/cpu_aarch64_linux.cc b/naiveproxy/src/third_party/boringssl/src/crypto/cpu_aarch64_linux.cc index 5c196ac410..6201c2e2ad 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/cpu_aarch64_linux.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/cpu_aarch64_linux.cc @@ -1,16 +1,16 @@ -/* Copyright 2016 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2016 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "internal.h" diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/cpu_aarch64_openbsd.cc b/naiveproxy/src/third_party/boringssl/src/crypto/cpu_aarch64_openbsd.cc index ef3d8626d5..69a9e13f39 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/cpu_aarch64_openbsd.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/cpu_aarch64_openbsd.cc @@ -1,16 +1,16 @@ -/* Copyright (c) 2022, Robert Nagy - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright (c) 2022, Robert Nagy +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/cpu_aarch64_sysreg.cc b/naiveproxy/src/third_party/boringssl/src/crypto/cpu_aarch64_sysreg.cc index 10b40fcfdd..2968502363 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/cpu_aarch64_sysreg.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/cpu_aarch64_sysreg.cc @@ -1,16 +1,16 @@ -/* Copyright 2023 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2023 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "internal.h" diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/cpu_aarch64_win.cc b/naiveproxy/src/third_party/boringssl/src/crypto/cpu_aarch64_win.cc index df61b18325..54037b8185 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/cpu_aarch64_win.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/cpu_aarch64_win.cc @@ -1,17 +1,17 @@ -/* Copyright 2018 The BoringSSL Authors - * Copyright (c) 2020, Arm Ltd. - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2018 The BoringSSL Authors +// Copyright (c) 2020, Arm Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "internal.h" diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/cpu_arm_freebsd.cc b/naiveproxy/src/third_party/boringssl/src/crypto/cpu_arm_freebsd.cc index 78e1b07ce6..b9e65c6455 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/cpu_arm_freebsd.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/cpu_arm_freebsd.cc @@ -1,16 +1,16 @@ -/* Copyright 2022 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2022 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "internal.h" diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/cpu_arm_linux.cc b/naiveproxy/src/third_party/boringssl/src/crypto/cpu_arm_linux.cc index f41576015d..0623f80308 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/cpu_arm_linux.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/cpu_arm_linux.cc @@ -1,16 +1,16 @@ -/* Copyright 2016 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2016 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "internal.h" diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/cpu_arm_linux.h b/naiveproxy/src/third_party/boringssl/src/crypto/cpu_arm_linux.h index 2888644a5b..81e37cbc20 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/cpu_arm_linux.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/cpu_arm_linux.h @@ -1,16 +1,16 @@ -/* Copyright 2018 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2018 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_CRYPTO_CPU_ARM_LINUX_H #define OPENSSL_HEADER_CRYPTO_CPU_ARM_LINUX_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/cpu_intel.cc b/naiveproxy/src/third_party/boringssl/src/crypto/cpu_intel.cc index a1efcd84e4..6386df0976 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/cpu_intel.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/cpu_intel.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/crypto.cc b/naiveproxy/src/third_party/boringssl/src/crypto/crypto.cc index ac0928f0eb..eef6062489 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/crypto.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/crypto.cc @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/curve25519/asm/x25519-asm-arm.S b/naiveproxy/src/third_party/boringssl/src/crypto/curve25519/asm/x25519-asm-arm.S index fa137e8b66..5ce26cbe70 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/curve25519/asm/x25519-asm-arm.S +++ b/naiveproxy/src/third_party/boringssl/src/crypto/curve25519/asm/x25519-asm-arm.S @@ -1,20 +1,20 @@ -/* Copyright 2015 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2015 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. /* This file is taken from crypto_scalarmult/curve25519/neon2/scalarmult.s in * SUPERCOP 20141124 (http://bench.cr.yp.to/supercop.html). That code is public - * domain licensed but the standard ISC license is included above to keep + * domain licensed but the standard Apache 2.0 license is included above to keep * licensing simple. */ #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/curve25519/curve25519.cc b/naiveproxy/src/third_party/boringssl/src/crypto/curve25519/curve25519.cc index 8b893f1f12..0a9e83f934 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/curve25519/curve25519.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/curve25519/curve25519.cc @@ -1,16 +1,16 @@ -/* Copyright 2020 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2020 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // Some of this code is taken from the ref10 version of Ed25519 in SUPERCOP // 20141124 (http://bench.cr.yp.to/supercop.html). That code is released as diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/curve25519/curve25519_64_adx.cc b/naiveproxy/src/third_party/boringssl/src/crypto/curve25519/curve25519_64_adx.cc index 63e50dc200..da270c22ba 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/curve25519/curve25519_64_adx.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/curve25519/curve25519_64_adx.cc @@ -1,16 +1,16 @@ -/* Copyright 2023 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2023 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "internal.h" #if defined(BORINGSSL_FE25519_ADX) diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/curve25519/curve25519_tables.h b/naiveproxy/src/third_party/boringssl/src/crypto/curve25519/curve25519_tables.h index f459ed33c8..72caa33783 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/curve25519/curve25519_tables.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/curve25519/curve25519_tables.h @@ -1,16 +1,16 @@ -/* Copyright 2020 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2020 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // This file is generated from // ./make_curve25519_tables.py > curve25519_tables.h diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/curve25519/internal.h b/naiveproxy/src/third_party/boringssl/src/crypto/curve25519/internal.h index cb7da07530..c8797d4331 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/curve25519/internal.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/curve25519/internal.h @@ -1,16 +1,16 @@ -/* Copyright 2020 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2020 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_CURVE25519_INTERNAL_H #define OPENSSL_HEADER_CURVE25519_INTERNAL_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/curve25519/make_curve25519_tables.py b/naiveproxy/src/third_party/boringssl/src/crypto/curve25519/make_curve25519_tables.py index ce7eeab5fe..d12c45f4af 100755 --- a/naiveproxy/src/third_party/boringssl/src/crypto/curve25519/make_curve25519_tables.py +++ b/naiveproxy/src/third_party/boringssl/src/crypto/curve25519/make_curve25519_tables.py @@ -2,17 +2,17 @@ # coding=utf-8 # Copyright 2020 The BoringSSL Authors # -# Permission to use, copy, modify, and/or distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at # -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. from io import StringIO import subprocess @@ -139,19 +139,19 @@ def main(): buf = StringIO() - buf.write("""/* Copyright 2020 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ + buf.write("""// Copyright 2020 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // This file is generated from // ./make_curve25519_tables.py > curve25519_tables.h diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/curve25519/spake25519.cc b/naiveproxy/src/third_party/boringssl/src/crypto/curve25519/spake25519.cc index f31a6b64d7..5b58086d0b 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/curve25519/spake25519.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/curve25519/spake25519.cc @@ -1,16 +1,16 @@ -/* Copyright 2016 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2016 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/des/des.cc b/naiveproxy/src/third_party/boringssl/src/crypto/des/des.cc index 812456df04..a1eba78f4b 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/des/des.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/des/des.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/des/internal.h b/naiveproxy/src/third_party/boringssl/src/crypto/des/internal.h index 530ce75f06..78e193aea5 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/des/internal.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/des/internal.h @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_DES_INTERNAL_H #define OPENSSL_HEADER_DES_INTERNAL_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/dh_extra/dh_asn1.cc b/naiveproxy/src/third_party/boringssl/src/crypto/dh/dh_asn1.cc similarity index 78% rename from naiveproxy/src/third_party/boringssl/src/crypto/dh_extra/dh_asn1.cc rename to naiveproxy/src/third_party/boringssl/src/crypto/dh/dh_asn1.cc index c271d64a86..13bd4fdecd 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/dh_extra/dh_asn1.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/dh/dh_asn1.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/dh_extra/params.cc b/naiveproxy/src/third_party/boringssl/src/crypto/dh/params.cc similarity index 96% rename from naiveproxy/src/third_party/boringssl/src/crypto/dh_extra/params.cc rename to naiveproxy/src/third_party/boringssl/src/crypto/dh/params.cc index c1cbca3f4c..18c585eefe 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/dh_extra/params.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/dh/params.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/digest_extra/digest_extra.cc b/naiveproxy/src/third_party/boringssl/src/crypto/digest/digest_extra.cc similarity index 93% rename from naiveproxy/src/third_party/boringssl/src/crypto/digest_extra/digest_extra.cc rename to naiveproxy/src/third_party/boringssl/src/crypto/digest/digest_extra.cc index 8e26b987b7..f68ede9156 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/digest_extra/digest_extra.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/digest/digest_extra.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/dsa/dsa.cc b/naiveproxy/src/third_party/boringssl/src/crypto/dsa/dsa.cc index 22b2be6408..d1bfdf0f1a 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/dsa/dsa.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/dsa/dsa.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/dsa/dsa_asn1.cc b/naiveproxy/src/third_party/boringssl/src/crypto/dsa/dsa_asn1.cc index 14ddaf885e..a267473c6a 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/dsa/dsa_asn1.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/dsa/dsa_asn1.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/dsa/internal.h b/naiveproxy/src/third_party/boringssl/src/crypto/dsa/internal.h index 493e3fbd31..e9877749e6 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/dsa/internal.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/dsa/internal.h @@ -1,16 +1,16 @@ -/* Copyright 2020 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2020 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_DSA_INTERNAL_H #define OPENSSL_HEADER_DSA_INTERNAL_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/ec_extra/ec_asn1.cc b/naiveproxy/src/third_party/boringssl/src/crypto/ec/ec_asn1.cc similarity index 96% rename from naiveproxy/src/third_party/boringssl/src/crypto/ec_extra/ec_asn1.cc rename to naiveproxy/src/third_party/boringssl/src/crypto/ec/ec_asn1.cc index a3fb6685ca..19d6072d13 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/ec_extra/ec_asn1.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/ec/ec_asn1.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/ec_extra/ec_derive.cc b/naiveproxy/src/third_party/boringssl/src/crypto/ec/ec_derive.cc similarity index 79% rename from naiveproxy/src/third_party/boringssl/src/crypto/ec_extra/ec_derive.cc rename to naiveproxy/src/third_party/boringssl/src/crypto/ec/ec_derive.cc index 6697a220ae..8bea9c995c 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/ec_extra/ec_derive.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/ec/ec_derive.cc @@ -1,16 +1,16 @@ -/* Copyright 2019 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2019 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/ec_extra/hash_to_curve.cc b/naiveproxy/src/third_party/boringssl/src/crypto/ec/hash_to_curve.cc similarity index 96% rename from naiveproxy/src/third_party/boringssl/src/crypto/ec_extra/hash_to_curve.cc rename to naiveproxy/src/third_party/boringssl/src/crypto/ec/hash_to_curve.cc index ca70049925..86c2fc6f75 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/ec_extra/hash_to_curve.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/ec/hash_to_curve.cc @@ -1,16 +1,16 @@ -/* Copyright 2020 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2020 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/ec_extra/internal.h b/naiveproxy/src/third_party/boringssl/src/crypto/ec/internal.h similarity index 77% rename from naiveproxy/src/third_party/boringssl/src/crypto/ec_extra/internal.h rename to naiveproxy/src/third_party/boringssl/src/crypto/ec/internal.h index e93c60f0e6..86e19e2db7 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/ec_extra/internal.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/ec/internal.h @@ -1,16 +1,16 @@ -/* Copyright 2020 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2020 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_EC_EXTRA_INTERNAL_H #define OPENSSL_HEADER_EC_EXTRA_INTERNAL_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/ecdh_extra/ecdh_extra.cc b/naiveproxy/src/third_party/boringssl/src/crypto/ecdh/ecdh.cc similarity index 70% rename from naiveproxy/src/third_party/boringssl/src/crypto/ecdh_extra/ecdh_extra.cc rename to naiveproxy/src/third_party/boringssl/src/crypto/ecdh/ecdh.cc index 0eb1d3d942..7305177f08 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/ecdh_extra/ecdh_extra.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/ecdh/ecdh.cc @@ -1,12 +1,17 @@ -/* - * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. +// Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/ecdsa_extra/ecdsa_asn1.cc b/naiveproxy/src/third_party/boringssl/src/crypto/ecdsa/ecdsa_asn1.cc similarity index 92% rename from naiveproxy/src/third_party/boringssl/src/crypto/ecdsa_extra/ecdsa_asn1.cc rename to naiveproxy/src/third_party/boringssl/src/crypto/ecdsa/ecdsa_asn1.cc index d3d151bb5e..1d86a44505 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/ecdsa_extra/ecdsa_asn1.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/ecdsa/ecdsa_asn1.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include @@ -143,18 +148,12 @@ size_t ECDSA_size(const EC_KEY *key) { return 0; } - size_t group_order_size; - if (key->ecdsa_meth && key->ecdsa_meth->group_order_size) { - group_order_size = key->ecdsa_meth->group_order_size(key); - } else { - const EC_GROUP *group = EC_KEY_get0_group(key); - if (group == NULL) { - return 0; - } - - group_order_size = BN_num_bytes(EC_GROUP_get0_order(group)); + const EC_GROUP *group = EC_KEY_get0_group(key); + if (group == NULL) { + return 0; } + size_t group_order_size = BN_num_bytes(EC_GROUP_get0_order(group)); return ECDSA_SIG_max_len(group_order_size); } diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/engine/engine.cc b/naiveproxy/src/third_party/boringssl/src/crypto/engine/engine.cc index 9d4f5fc054..322c7add24 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/engine/engine.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/engine/engine.cc @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/err/err.cc b/naiveproxy/src/third_party/boringssl/src/crypto/err/err.cc index 670408e8f9..82ba0a618a 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/err/err.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/err/err.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // Ensure we can't call OPENSSL_malloc circularly. #define _BORINGSSL_PROHIBIT_OPENSSL_MALLOC diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/err/internal.h b/naiveproxy/src/third_party/boringssl/src/crypto/err/internal.h index 2c9a79dcac..4ce440a1f6 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/err/internal.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/err/internal.h @@ -1,16 +1,16 @@ -/* Copyright 2017 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2017 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_CRYPTO_ERR_INTERNAL_H #define OPENSSL_HEADER_CRYPTO_ERR_INTERNAL_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/err/pem.errordata b/naiveproxy/src/third_party/boringssl/src/crypto/err/pem.errordata index 2a4b73af2d..0856f74045 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/err/pem.errordata +++ b/naiveproxy/src/third_party/boringssl/src/crypto/err/pem.errordata @@ -13,3 +13,4 @@ PEM,111,READ_KEY PEM,112,SHORT_HEADER PEM,113,UNSUPPORTED_CIPHER PEM,114,UNSUPPORTED_ENCRYPTION +PEM,115,UNSUPPORTED_PROC_TYPE_VERSION diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/err/ssl.errordata b/naiveproxy/src/third_party/boringssl/src/crypto/err/ssl.errordata index 528110cdfe..d8eb3a44e0 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/err/ssl.errordata +++ b/naiveproxy/src/third_party/boringssl/src/crypto/err/ssl.errordata @@ -94,6 +94,7 @@ SSL,320,INVALID_OUTER_EXTENSION SSL,251,INVALID_OUTER_RECORD_TYPE SSL,269,INVALID_SCT_LIST SSL,295,INVALID_SIGNATURE_ALGORITHM +SSL,324,INVALID_SPAKE2PLUSV1_VALUE SSL,160,INVALID_SSL_SESSION SSL,161,INVALID_TICKET_KEYS_LENGTH SSL,302,KEY_USAGE_BIT_INCORRECT @@ -120,6 +121,7 @@ SSL,177,NO_CIPHER_MATCH SSL,253,NO_COMMON_SIGNATURE_ALGORITHMS SSL,178,NO_COMPRESSION_SPECIFIED SSL,265,NO_GROUPS_SPECIFIED +SSL,323,NO_MATCHING_ISSUER SSL,179,NO_METHOD_SPECIFIED SSL,181,NO_PRIVATE_KEY_ASSIGNED SSL,182,NO_RENEGOTIATION @@ -134,10 +136,13 @@ SSL,187,OLD_SESSION_CIPHER_NOT_RETURNED SSL,268,OLD_SESSION_PRF_HASH_MISMATCH SSL,188,OLD_SESSION_VERSION_NOT_RETURNED SSL,189,OUTPUT_ALIASES_INPUT +SSL,1122,PAKE_AND_KEY_SHARE_NOT_ALLOWED +SSL,325,PAKE_EXHAUSTED SSL,190,PARSE_TLSEXT SSL,191,PATH_TOO_LONG SSL,192,PEER_DID_NOT_RETURN_A_CERTIFICATE SSL,193,PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE +SSL,326,PEER_PAKE_MISMATCH SSL,267,PRE_SHARED_KEY_MUST_BE_LAST SSL,287,PRIVATE_KEY_OPERATION_FAILED SSL,194,PROTOCOL_IS_SHUTDOWN @@ -237,6 +242,7 @@ SSL,235,UNKNOWN_STATE SSL,236,UNSAFE_LEGACY_RENEGOTIATION_DISABLED SSL,237,UNSUPPORTED_CIPHER SSL,238,UNSUPPORTED_COMPRESSION_ALGORITHM +SSL,327,UNSUPPORTED_CREDENTIAL_LIST SSL,312,UNSUPPORTED_ECH_SERVER_CONFIG SSL,239,UNSUPPORTED_ELLIPTIC_CURVE SSL,240,UNSUPPORTED_PROTOCOL diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/evp/evp.cc b/naiveproxy/src/third_party/boringssl/src/crypto/evp/evp.cc index d25325e223..7ca5a4ab58 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/evp/evp.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/evp/evp.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include @@ -240,24 +245,20 @@ EVP_PKEY *EVP_PKEY_new_raw_private_key(int type, ENGINE *unused, break; default: OPENSSL_PUT_ERROR(EVP, EVP_R_UNSUPPORTED_ALGORITHM); - return 0; + return nullptr; } - EVP_PKEY *ret = EVP_PKEY_new(); - if (ret == NULL) { - goto err; + bssl::UniquePtr ret(EVP_PKEY_new()); + if (ret == nullptr) { + return nullptr; } - evp_pkey_set_method(ret, method); + evp_pkey_set_method(ret.get(), method); - if (!ret->ameth->set_priv_raw(ret, in, len)) { - goto err; + if (!ret->ameth->set_priv_raw(ret.get(), in, len)) { + return nullptr; } - return ret; - -err: - EVP_PKEY_free(ret); - return NULL; + return ret.release(); } EVP_PKEY *EVP_PKEY_new_raw_public_key(int type, ENGINE *unused, @@ -274,24 +275,20 @@ EVP_PKEY *EVP_PKEY_new_raw_public_key(int type, ENGINE *unused, break; default: OPENSSL_PUT_ERROR(EVP, EVP_R_UNSUPPORTED_ALGORITHM); - return 0; + return nullptr; } - EVP_PKEY *ret = EVP_PKEY_new(); - if (ret == NULL) { - goto err; + bssl::UniquePtr ret(EVP_PKEY_new()); + if (ret == nullptr) { + return nullptr; } - evp_pkey_set_method(ret, method); + evp_pkey_set_method(ret.get(), method); - if (!ret->ameth->set_pub_raw(ret, in, len)) { - goto err; + if (!ret->ameth->set_pub_raw(ret.get(), in, len)) { + return nullptr; } - return ret; - -err: - EVP_PKEY_free(ret); - return NULL; + return ret.release(); } int EVP_PKEY_get_raw_private_key(const EVP_PKEY *pkey, uint8_t *out, diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/evp/evp_asn1.cc b/naiveproxy/src/third_party/boringssl/src/crypto/evp/evp_asn1.cc index c4ae5a3cf5..eeea9637ca 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/evp/evp_asn1.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/evp/evp_asn1.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include @@ -57,42 +62,38 @@ EVP_PKEY *EVP_parse_public_key(CBS *cbs) { !CBS_get_asn1(&spki, &key, CBS_ASN1_BITSTRING) || CBS_len(&spki) != 0) { OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR); - return NULL; + return nullptr; } const EVP_PKEY_ASN1_METHOD *method = parse_key_type(&algorithm); - if (method == NULL) { + if (method == nullptr) { OPENSSL_PUT_ERROR(EVP, EVP_R_UNSUPPORTED_ALGORITHM); - return NULL; + return nullptr; } if (// Every key type defined encodes the key as a byte string with the same // conversion to BIT STRING. !CBS_get_u8(&key, &padding) || padding != 0) { OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR); - return NULL; + return nullptr; } // Set up an |EVP_PKEY| of the appropriate type. - EVP_PKEY *ret = EVP_PKEY_new(); - if (ret == NULL) { - goto err; + bssl::UniquePtr ret(EVP_PKEY_new()); + if (ret == nullptr) { + return nullptr; } - evp_pkey_set_method(ret, method); + evp_pkey_set_method(ret.get(), method); // Call into the type-specific SPKI decoding function. - if (ret->ameth->pub_decode == NULL) { + if (ret->ameth->pub_decode == nullptr) { OPENSSL_PUT_ERROR(EVP, EVP_R_UNSUPPORTED_ALGORITHM); - goto err; + return nullptr; } - if (!ret->ameth->pub_decode(ret, &algorithm, &key)) { - goto err; + if (!ret->ameth->pub_decode(ret.get(), &algorithm, &key)) { + return nullptr; } - return ret; - -err: - EVP_PKEY_free(ret); - return NULL; + return ret.release(); } int EVP_marshal_public_key(CBB *cbb, const EVP_PKEY *key) { @@ -114,37 +115,33 @@ EVP_PKEY *EVP_parse_private_key(CBS *cbs) { !CBS_get_asn1(&pkcs8, &algorithm, CBS_ASN1_SEQUENCE) || !CBS_get_asn1(&pkcs8, &key, CBS_ASN1_OCTETSTRING)) { OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR); - return NULL; + return nullptr; } const EVP_PKEY_ASN1_METHOD *method = parse_key_type(&algorithm); - if (method == NULL) { + if (method == nullptr) { OPENSSL_PUT_ERROR(EVP, EVP_R_UNSUPPORTED_ALGORITHM); - return NULL; + return nullptr; } // A PrivateKeyInfo ends with a SET of Attributes which we ignore. // Set up an |EVP_PKEY| of the appropriate type. - EVP_PKEY *ret = EVP_PKEY_new(); - if (ret == NULL) { - goto err; + bssl::UniquePtr ret(EVP_PKEY_new()); + if (ret == nullptr) { + return nullptr; } - evp_pkey_set_method(ret, method); + evp_pkey_set_method(ret.get(), method); // Call into the type-specific PrivateKeyInfo decoding function. - if (ret->ameth->priv_decode == NULL) { + if (ret->ameth->priv_decode == nullptr) { OPENSSL_PUT_ERROR(EVP, EVP_R_UNSUPPORTED_ALGORITHM); - goto err; + return nullptr; } - if (!ret->ameth->priv_decode(ret, &algorithm, &key)) { - goto err; + if (!ret->ameth->priv_decode(ret.get(), &algorithm, &key)) { + return nullptr; } - return ret; - -err: - EVP_PKEY_free(ret); - return NULL; + return ret.release(); } int EVP_marshal_private_key(CBB *cbb, const EVP_PKEY *key) { @@ -156,79 +153,74 @@ int EVP_marshal_private_key(CBB *cbb, const EVP_PKEY *key) { return key->ameth->priv_encode(cbb, key); } -static EVP_PKEY *old_priv_decode(CBS *cbs, int type) { - EVP_PKEY *ret = EVP_PKEY_new(); - if (ret == NULL) { - return NULL; +static bssl::UniquePtr old_priv_decode(CBS *cbs, int type) { + bssl::UniquePtr ret(EVP_PKEY_new()); + if (ret == nullptr) { + return nullptr; } switch (type) { case EVP_PKEY_EC: { - EC_KEY *ec_key = EC_KEY_parse_private_key(cbs, NULL); - if (ec_key == NULL || !EVP_PKEY_assign_EC_KEY(ret, ec_key)) { - EC_KEY_free(ec_key); - goto err; + bssl::UniquePtr ec_key(EC_KEY_parse_private_key(cbs, nullptr)); + if (ec_key == nullptr) { + return nullptr; } + EVP_PKEY_assign_EC_KEY(ret.get(), ec_key.release()); return ret; } case EVP_PKEY_DSA: { - DSA *dsa = DSA_parse_private_key(cbs); - if (dsa == NULL || !EVP_PKEY_assign_DSA(ret, dsa)) { - DSA_free(dsa); - goto err; + bssl::UniquePtr dsa(DSA_parse_private_key(cbs)); + if (dsa == nullptr) { + return nullptr; } + EVP_PKEY_assign_DSA(ret.get(), dsa.release()); return ret; } case EVP_PKEY_RSA: { - RSA *rsa = RSA_parse_private_key(cbs); - if (rsa == NULL || !EVP_PKEY_assign_RSA(ret, rsa)) { - RSA_free(rsa); - goto err; + bssl::UniquePtr rsa(RSA_parse_private_key(cbs)); + if (rsa == nullptr) { + return nullptr; } + EVP_PKEY_assign_RSA(ret.get(), rsa.release()); return ret; } default: OPENSSL_PUT_ERROR(EVP, EVP_R_UNKNOWN_PUBLIC_KEY_TYPE); - goto err; + return nullptr; } - -err: - EVP_PKEY_free(ret); - return NULL; } EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **out, const uint8_t **inp, long len) { if (len < 0) { OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR); - return NULL; + return nullptr; } // Parse with the legacy format. CBS cbs; CBS_init(&cbs, *inp, (size_t)len); - EVP_PKEY *ret = old_priv_decode(&cbs, type); - if (ret == NULL) { + bssl::UniquePtr ret = old_priv_decode(&cbs, type); + if (ret == nullptr) { // Try again with PKCS#8. ERR_clear_error(); CBS_init(&cbs, *inp, (size_t)len); - ret = EVP_parse_private_key(&cbs); - if (ret == NULL) { - return NULL; + ret.reset(EVP_parse_private_key(&cbs)); + if (ret == nullptr) { + return nullptr; } if (ret->type != type) { OPENSSL_PUT_ERROR(EVP, EVP_R_DIFFERENT_KEY_TYPES); - EVP_PKEY_free(ret); - return NULL; + return nullptr; } } - if (out != NULL) { + if (out != nullptr) { EVP_PKEY_free(*out); - *out = ret; + *out = ret.get(); } *inp = CBS_data(&cbs); - return ret; + return ret.release(); } // num_elements parses one SEQUENCE from |in| and returns the number of elements @@ -302,61 +294,57 @@ int i2d_PublicKey(const EVP_PKEY *key, uint8_t **outp) { EVP_PKEY *d2i_PublicKey(int type, EVP_PKEY **out, const uint8_t **inp, long len) { - EVP_PKEY *ret = EVP_PKEY_new(); - if (ret == NULL) { - return NULL; + bssl::UniquePtr ret(EVP_PKEY_new()); + if (ret == nullptr) { + return nullptr; } CBS cbs; CBS_init(&cbs, *inp, len < 0 ? 0 : (size_t)len); switch (type) { case EVP_PKEY_RSA: { - RSA *rsa = RSA_parse_public_key(&cbs); - if (rsa == NULL || !EVP_PKEY_assign_RSA(ret, rsa)) { - RSA_free(rsa); - goto err; + bssl::UniquePtr rsa(RSA_parse_public_key(&cbs)); + if (rsa == nullptr) { + return nullptr; } + EVP_PKEY_assign_RSA(ret.get(), rsa.release()); break; } // Unlike OpenSSL, we do not support EC keys with this API. The raw EC // public key serialization requires knowing the group. In OpenSSL, calling - // this function with |EVP_PKEY_EC| and setting |out| to NULL does not work. - // It requires |*out| to include a partially-initialized |EVP_PKEY| to + // this function with |EVP_PKEY_EC| and setting |out| to nullptr does not + // work. It requires |*out| to include a partially-initialized |EVP_PKEY| to // extract the group. default: OPENSSL_PUT_ERROR(EVP, EVP_R_UNSUPPORTED_PUBLIC_KEY_TYPE); - goto err; + return nullptr; } *inp = CBS_data(&cbs); - if (out != NULL) { + if (out != nullptr) { EVP_PKEY_free(*out); - *out = ret; + *out = ret.get(); } - return ret; - -err: - EVP_PKEY_free(ret); - return NULL; + return ret.release(); } EVP_PKEY *d2i_PUBKEY(EVP_PKEY **out, const uint8_t **inp, long len) { if (len < 0) { - return NULL; + return nullptr; } CBS cbs; CBS_init(&cbs, *inp, (size_t)len); - EVP_PKEY *ret = EVP_parse_public_key(&cbs); - if (ret == NULL) { - return NULL; + bssl::UniquePtr ret(EVP_parse_public_key(&cbs)); + if (ret == nullptr) { + return nullptr; } - if (out != NULL) { + if (out != nullptr) { EVP_PKEY_free(*out); - *out = ret; + *out = ret.get(); } *inp = CBS_data(&cbs); - return ret; + return ret.release(); } int i2d_PUBKEY(const EVP_PKEY *pkey, uint8_t **outp) { @@ -375,86 +363,74 @@ int i2d_PUBKEY(const EVP_PKEY *pkey, uint8_t **outp) { RSA *d2i_RSA_PUBKEY(RSA **out, const uint8_t **inp, long len) { if (len < 0) { - return NULL; + return nullptr; } CBS cbs; CBS_init(&cbs, *inp, (size_t)len); - EVP_PKEY *pkey = EVP_parse_public_key(&cbs); - if (pkey == NULL) { - return NULL; + bssl::UniquePtr pkey(EVP_parse_public_key(&cbs)); + if (pkey == nullptr) { + return nullptr; } - RSA *rsa = EVP_PKEY_get1_RSA(pkey); - EVP_PKEY_free(pkey); - if (rsa == NULL) { - return NULL; + bssl::UniquePtr rsa(EVP_PKEY_get1_RSA(pkey.get())); + if (rsa == nullptr) { + return nullptr; } - if (out != NULL) { + if (out != nullptr) { RSA_free(*out); - *out = rsa; + *out = rsa.get(); } *inp = CBS_data(&cbs); - return rsa; + return rsa.release(); } int i2d_RSA_PUBKEY(const RSA *rsa, uint8_t **outp) { - if (rsa == NULL) { + if (rsa == nullptr) { return 0; } - int ret = -1; - EVP_PKEY *pkey = EVP_PKEY_new(); - if (pkey == NULL || - !EVP_PKEY_set1_RSA(pkey, (RSA *)rsa)) { - goto err; + bssl::UniquePtr pkey(EVP_PKEY_new()); + if (pkey == nullptr || + !EVP_PKEY_set1_RSA(pkey.get(), const_cast(rsa))) { + return -1; } - ret = i2d_PUBKEY(pkey, outp); - -err: - EVP_PKEY_free(pkey); - return ret; + return i2d_PUBKEY(pkey.get(), outp); } DSA *d2i_DSA_PUBKEY(DSA **out, const uint8_t **inp, long len) { if (len < 0) { - return NULL; + return nullptr; } CBS cbs; CBS_init(&cbs, *inp, (size_t)len); - EVP_PKEY *pkey = EVP_parse_public_key(&cbs); - if (pkey == NULL) { - return NULL; + bssl::UniquePtr pkey(EVP_parse_public_key(&cbs)); + if (pkey == nullptr) { + return nullptr; } - DSA *dsa = EVP_PKEY_get1_DSA(pkey); - EVP_PKEY_free(pkey); - if (dsa == NULL) { - return NULL; + bssl::UniquePtr dsa(EVP_PKEY_get1_DSA(pkey.get())); + if (dsa == nullptr) { + return nullptr; } - if (out != NULL) { + if (out != nullptr) { DSA_free(*out); - *out = dsa; + *out = dsa.get(); } *inp = CBS_data(&cbs); - return dsa; + return dsa.release(); } int i2d_DSA_PUBKEY(const DSA *dsa, uint8_t **outp) { - if (dsa == NULL) { + if (dsa == nullptr) { return 0; } - int ret = -1; - EVP_PKEY *pkey = EVP_PKEY_new(); - if (pkey == NULL || - !EVP_PKEY_set1_DSA(pkey, (DSA *)dsa)) { - goto err; + bssl::UniquePtr pkey(EVP_PKEY_new()); + if (pkey == nullptr || + !EVP_PKEY_set1_DSA(pkey.get(), const_cast(dsa))) { + return -1; } - ret = i2d_PUBKEY(pkey, outp); - -err: - EVP_PKEY_free(pkey); - return ret; + return i2d_PUBKEY(pkey.get(), outp); } EC_KEY *d2i_EC_PUBKEY(EC_KEY **out, const uint8_t **inp, long len) { @@ -485,16 +461,11 @@ int i2d_EC_PUBKEY(const EC_KEY *ec_key, uint8_t **outp) { return 0; } - int ret = -1; - EVP_PKEY *pkey = EVP_PKEY_new(); - if (pkey == NULL || - !EVP_PKEY_set1_EC_KEY(pkey, (EC_KEY *)ec_key)) { - goto err; + bssl::UniquePtr pkey(EVP_PKEY_new()); + if (pkey == nullptr || + !EVP_PKEY_set1_EC_KEY(pkey.get(), const_cast(ec_key))) { + return -1; } - ret = i2d_PUBKEY(pkey, outp); - -err: - EVP_PKEY_free(pkey); - return ret; + return i2d_PUBKEY(pkey.get(), outp); } diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/evp/evp_ctx.cc b/naiveproxy/src/third_party/boringssl/src/crypto/evp/evp_ctx.cc index 1ecb164a5b..e34dfa08c9 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/evp/evp_ctx.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/evp/evp_ctx.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/evp/internal.h b/naiveproxy/src/third_party/boringssl/src/crypto/evp/internal.h index 713b308d6f..da07c2756a 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/evp/internal.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/evp/internal.h @@ -1,11 +1,16 @@ -/* - * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_EVP_INTERNAL_H #define OPENSSL_HEADER_EVP_INTERNAL_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_dh.cc b/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_dh.cc index 200db1de39..ffb2a43afb 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_dh.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_dh.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2006-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2006-2019 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_dh_asn1.cc b/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_dh_asn1.cc index 877b49c5d5..1c035e75e3 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_dh_asn1.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_dh_asn1.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2006-2021 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2006-2021 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_dsa_asn1.cc b/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_dsa_asn1.cc index c04853bc49..aab3f5962d 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_dsa_asn1.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_dsa_asn1.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include @@ -23,41 +28,38 @@ static int dsa_pub_decode(EVP_PKEY *out, CBS *params, CBS *key) { // See RFC 3279, section 2.3.2. // Parameters may or may not be present. - DSA *dsa; + bssl::UniquePtr dsa; if (CBS_len(params) == 0) { - dsa = DSA_new(); - if (dsa == NULL) { + dsa.reset(DSA_new()); + if (dsa == nullptr) { return 0; } } else { - dsa = DSA_parse_parameters(params); - if (dsa == NULL || CBS_len(params) != 0) { + dsa.reset(DSA_parse_parameters(params)); + if (dsa == nullptr || CBS_len(params) != 0) { OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR); - goto err; + return 0; } } dsa->pub_key = BN_new(); - if (dsa->pub_key == NULL) { - goto err; + if (dsa->pub_key == nullptr) { + return 0; } if (!BN_parse_asn1_unsigned(key, dsa->pub_key) || CBS_len(key) != 0) { OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR); - goto err; + return 0; } - EVP_PKEY_assign_DSA(out, dsa); + EVP_PKEY_assign_DSA(out, dsa.release()); return 1; - -err: - DSA_free(dsa); - return 0; } static int dsa_pub_encode(CBB *out, const EVP_PKEY *key) { const DSA *dsa = reinterpret_cast(key->pkey); - const int has_params = dsa->p != NULL && dsa->q != NULL && dsa->g != NULL; + const int has_params = + dsa->p != nullptr && dsa->q != nullptr && dsa->g != nullptr; // See RFC 5480, section 2. CBB spki, algorithm, oid, key_bitstring; @@ -80,52 +82,45 @@ static int dsa_priv_decode(EVP_PKEY *out, CBS *params, CBS *key) { // See PKCS#11, v2.40, section 2.5. // Decode parameters. - BN_CTX *ctx = NULL; - DSA *dsa = DSA_parse_parameters(params); - if (dsa == NULL || CBS_len(params) != 0) { + bssl::UniquePtr dsa(DSA_parse_parameters(params)); + if (dsa == nullptr || CBS_len(params) != 0) { OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR); - goto err; + return 0; } dsa->priv_key = BN_new(); - if (dsa->priv_key == NULL) { - goto err; + if (dsa->priv_key == nullptr) { + return 0; } if (!BN_parse_asn1_unsigned(key, dsa->priv_key) || CBS_len(key) != 0) { OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR); - goto err; + return 0; } // To avoid DoS attacks when importing private keys, check bounds on |dsa|. // This bounds |dsa->priv_key| against |dsa->q| and bounds |dsa->q|'s bit // width. - if (!dsa_check_key(dsa)) { + if (!dsa_check_key(dsa.get())) { OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR); - goto err; + return 0; } // Calculate the public key. - ctx = BN_CTX_new(); + bssl::UniquePtr ctx(BN_CTX_new()); dsa->pub_key = BN_new(); - if (ctx == NULL || dsa->pub_key == NULL || + if (ctx == nullptr || dsa->pub_key == nullptr || !BN_mod_exp_mont_consttime(dsa->pub_key, dsa->g, dsa->priv_key, dsa->p, - ctx, NULL)) { - goto err; + ctx.get(), nullptr)) { + return 0; } - BN_CTX_free(ctx); - EVP_PKEY_assign_DSA(out, dsa); + EVP_PKEY_assign_DSA(out, dsa.release()); return 1; - -err: - BN_CTX_free(ctx); - DSA_free(dsa); - return 0; } static int dsa_priv_encode(CBB *out, const EVP_PKEY *key) { const DSA *dsa = reinterpret_cast(key->pkey); - if (dsa == NULL || dsa->priv_key == NULL) { + if (dsa == nullptr || dsa->priv_key == nullptr) { OPENSSL_PUT_ERROR(EVP, EVP_R_MISSING_PARAMETERS); return 0; } @@ -159,23 +154,20 @@ static int dsa_bits(const EVP_PKEY *pkey) { static int dsa_missing_parameters(const EVP_PKEY *pkey) { const DSA *dsa = reinterpret_cast(pkey->pkey); - if (DSA_get0_p(dsa) == NULL || DSA_get0_q(dsa) == NULL || - DSA_get0_g(dsa) == NULL) { + if (DSA_get0_p(dsa) == nullptr || DSA_get0_q(dsa) == nullptr || + DSA_get0_g(dsa) == nullptr) { return 1; } return 0; } static int dup_bn_into(BIGNUM **out, BIGNUM *src) { - BIGNUM *a; - - a = BN_dup(src); - if (a == NULL) { + bssl::UniquePtr a(BN_dup(src)); + if (a == nullptr) { return 0; } BN_free(*out); - *out = a; - + *out = a.release(); return 1; } @@ -207,7 +199,7 @@ static int dsa_pub_cmp(const EVP_PKEY *a, const EVP_PKEY *b) { static void int_dsa_free(EVP_PKEY *pkey) { DSA_free(reinterpret_cast(pkey->pkey)); - pkey->pkey = NULL; + pkey->pkey = nullptr; } const EVP_PKEY_ASN1_METHOD dsa_asn1_meth = { @@ -216,7 +208,7 @@ const EVP_PKEY_ASN1_METHOD dsa_asn1_meth = { {0x2a, 0x86, 0x48, 0xce, 0x38, 0x04, 0x01}, 7, - /*pkey_method=*/NULL, + /*pkey_method=*/nullptr, dsa_pub_decode, dsa_pub_encode, @@ -225,14 +217,14 @@ const EVP_PKEY_ASN1_METHOD dsa_asn1_meth = { dsa_priv_decode, dsa_priv_encode, - /*set_priv_raw=*/NULL, - /*set_pub_raw=*/NULL, - /*get_priv_raw=*/NULL, - /*get_pub_raw=*/NULL, - /*set1_tls_encodedpoint=*/NULL, - /*get1_tls_encodedpoint=*/NULL, + /*set_priv_raw=*/nullptr, + /*set_pub_raw=*/nullptr, + /*get_priv_raw=*/nullptr, + /*get_pub_raw=*/nullptr, + /*set1_tls_encodedpoint=*/nullptr, + /*get1_tls_encodedpoint=*/nullptr, - /*pkey_opaque=*/NULL, + /*pkey_opaque=*/nullptr, int_dsa_size, dsa_bits, @@ -267,20 +259,20 @@ int EVP_PKEY_set1_DSA(EVP_PKEY *pkey, DSA *key) { int EVP_PKEY_assign_DSA(EVP_PKEY *pkey, DSA *key) { evp_pkey_set_method(pkey, &dsa_asn1_meth); pkey->pkey = key; - return key != NULL; + return key != nullptr; } DSA *EVP_PKEY_get0_DSA(const EVP_PKEY *pkey) { if (pkey->type != EVP_PKEY_DSA) { OPENSSL_PUT_ERROR(EVP, EVP_R_EXPECTING_A_DSA_KEY); - return NULL; + return nullptr; } return reinterpret_cast(pkey->pkey); } DSA *EVP_PKEY_get1_DSA(const EVP_PKEY *pkey) { DSA *dsa = EVP_PKEY_get0_DSA(pkey); - if (dsa != NULL) { + if (dsa != nullptr) { DSA_up_ref(dsa); } return dsa; diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_ec.cc b/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_ec.cc index 8d39258851..927696cc58 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_ec.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_ec.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_ec_asn1.cc b/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_ec_asn1.cc index 8a4981c539..bcf2525a78 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_ec_asn1.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_ec_asn1.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include @@ -47,26 +52,21 @@ static int eckey_pub_decode(EVP_PKEY *out, CBS *params, CBS *key) { // See RFC 5480, section 2. // The parameters are a named curve. - EC_KEY *eckey = NULL; const EC_GROUP *group = EC_KEY_parse_curve_name(params); if (group == NULL || CBS_len(params) != 0) { OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR); - goto err; + return 0; } - eckey = EC_KEY_new(); - if (eckey == NULL || // - !EC_KEY_set_group(eckey, group) || - !EC_KEY_oct2key(eckey, CBS_data(key), CBS_len(key), NULL)) { - goto err; + bssl::UniquePtr eckey(EC_KEY_new()); + if (eckey == nullptr || // + !EC_KEY_set_group(eckey.get(), group) || + !EC_KEY_oct2key(eckey.get(), CBS_data(key), CBS_len(key), nullptr)) { + return 0; } - EVP_PKEY_assign_EC_KEY(out, eckey); + EVP_PKEY_assign_EC_KEY(out, eckey.release()); return 1; - -err: - EC_KEY_free(eckey); - return 0; } static int eckey_pub_cmp(const EVP_PKEY *a, const EVP_PKEY *b) { diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_ed25519.cc b/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_ed25519.cc index 23104b28e3..204133d097 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_ed25519.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_ed25519.cc @@ -1,16 +1,16 @@ -/* Copyright 2017 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2017 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_ed25519_asn1.cc b/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_ed25519_asn1.cc index ff66df690c..45947d8a69 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_ed25519_asn1.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_ed25519_asn1.cc @@ -1,16 +1,16 @@ -/* Copyright 2017 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2017 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_hkdf.cc b/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_hkdf.cc index 8843da8aa6..0f816bb331 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_hkdf.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_hkdf.cc @@ -1,16 +1,16 @@ -/* Copyright 2022 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2022 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_rsa.cc b/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_rsa.cc index 570fdad350..db30f20fd5 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_rsa.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_rsa.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include @@ -21,7 +26,7 @@ #include #include "../internal.h" -#include "../rsa_extra/internal.h" +#include "../rsa/internal.h" #include "internal.h" @@ -184,8 +189,11 @@ static int pkey_rsa_verify(EVP_PKEY_CTX *ctx, const uint8_t *sig, size_t siglen, const size_t key_len = EVP_PKEY_size(ctx->pkey); if (!setup_tbuf(rctx, ctx) || !RSA_verify_raw(rsa, &rslen, rctx->tbuf, key_len, sig, siglen, - rctx->pad_mode) || - rslen != tbslen || CRYPTO_memcmp(tbs, rctx->tbuf, rslen) != 0) { + rctx->pad_mode)) { + return 0; + } + if (rslen != tbslen || CRYPTO_memcmp(tbs, rctx->tbuf, rslen) != 0) { + OPENSSL_PUT_ERROR(RSA, RSA_R_BAD_SIGNATURE); return 0; } diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_rsa_asn1.cc b/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_rsa_asn1.cc index c956b64854..cdcb6b43fb 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_rsa_asn1.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_rsa_asn1.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_x25519.cc b/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_x25519.cc index e31718e076..1186e99c68 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_x25519.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_x25519.cc @@ -1,16 +1,16 @@ -/* Copyright 2019 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2019 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_x25519_asn1.cc b/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_x25519_asn1.cc index 8c71b98d9c..351b788bc6 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_x25519_asn1.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/evp/p_x25519_asn1.cc @@ -1,16 +1,16 @@ -/* Copyright 2019 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2019 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/evp/pbkdf.cc b/naiveproxy/src/third_party/boringssl/src/crypto/evp/pbkdf.cc index 3dca7da243..cce0fd0031 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/evp/pbkdf.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/evp/pbkdf.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include @@ -20,16 +25,13 @@ int PKCS5_PBKDF2_HMAC(const char *password, size_t password_len, const uint8_t *salt, size_t salt_len, uint32_t iterations, const EVP_MD *digest, size_t key_len, uint8_t *out_key) { // See RFC 8018, section 5.2. - int ret = 0; - size_t md_len = EVP_MD_size(digest); - uint32_t i = 1; - HMAC_CTX hctx; - HMAC_CTX_init(&hctx); - - if (!HMAC_Init_ex(&hctx, password, password_len, digest, NULL)) { - goto err; + bssl::ScopedHMAC_CTX hctx; + if (!HMAC_Init_ex(hctx.get(), password, password_len, digest, NULL)) { + return 0; } + uint32_t i = 1; + size_t md_len = EVP_MD_size(digest); while (key_len > 0) { size_t todo = md_len; if (todo > key_len) { @@ -44,20 +46,20 @@ int PKCS5_PBKDF2_HMAC(const char *password, size_t password_len, // Compute U_1. uint8_t digest_tmp[EVP_MAX_MD_SIZE]; - if (!HMAC_Init_ex(&hctx, NULL, 0, NULL, NULL) || - !HMAC_Update(&hctx, salt, salt_len) || - !HMAC_Update(&hctx, i_buf, 4) || - !HMAC_Final(&hctx, digest_tmp, NULL)) { - goto err; + if (!HMAC_Init_ex(hctx.get(), NULL, 0, NULL, NULL) || + !HMAC_Update(hctx.get(), salt, salt_len) || + !HMAC_Update(hctx.get(), i_buf, 4) || + !HMAC_Final(hctx.get(), digest_tmp, NULL)) { + return 0; } OPENSSL_memcpy(out_key, digest_tmp, todo); for (uint32_t j = 1; j < iterations; j++) { // Compute the remaining U_* values and XOR. - if (!HMAC_Init_ex(&hctx, NULL, 0, NULL, NULL) || - !HMAC_Update(&hctx, digest_tmp, md_len) || - !HMAC_Final(&hctx, digest_tmp, NULL)) { - goto err; + if (!HMAC_Init_ex(hctx.get(), NULL, 0, NULL, NULL) || + !HMAC_Update(hctx.get(), digest_tmp, md_len) || + !HMAC_Final(hctx.get(), digest_tmp, NULL)) { + return 0; } for (size_t k = 0; k < todo; k++) { out_key[k] ^= digest_tmp[k]; @@ -81,14 +83,10 @@ int PKCS5_PBKDF2_HMAC(const char *password, size_t password_len, // TODO(eroman): Figure out how to remove this compatibility hack, or change // the default to something more sensible like 2048. if (iterations == 0) { - goto err; + return 0; } - ret = 1; - -err: - HMAC_CTX_cleanup(&hctx); - return ret; + return 1; } int PKCS5_PBKDF2_HMAC_SHA1(const char *password, size_t password_len, diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/evp/print.cc b/naiveproxy/src/third_party/boringssl/src/crypto/evp/print.cc index 51fee73f6e..b4c0cd529e 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/evp/print.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/evp/print.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/evp/scrypt.cc b/naiveproxy/src/third_party/boringssl/src/crypto/evp/scrypt.cc index 4853761f0f..548a3f615e 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/evp/scrypt.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/evp/scrypt.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/evp/sign.cc b/naiveproxy/src/third_party/boringssl/src/crypto/evp/sign.cc index a5dff52e6a..2a7836f65e 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/evp/sign.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/evp/sign.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/ex_data.cc b/naiveproxy/src/third_party/boringssl/src/crypto/ex_data.cc index ec01721aa9..825c35fefa 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/ex_data.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/ex_data.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/aes.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/aes.cc.inc index bcdc4dc8f9..26e60e796b 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/aes.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/aes.cc.inc @@ -1,18 +1,22 @@ -/* - * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include #include "internal.h" -#include "../modes/internal.h" // Be aware that different sets of AES functions use incompatible key diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/aes_nohw.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/aes_nohw.cc.inc index 18b202bd4b..14f46b18dd 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/aes_nohw.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/aes_nohw.cc.inc @@ -1,16 +1,16 @@ -/* Copyright 2019 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2019 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/asm/aes-gcm-avx10-x86_64.pl b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/aes-gcm-avx10-x86_64.pl similarity index 98% rename from naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/asm/aes-gcm-avx10-x86_64.pl rename to naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/aes-gcm-avx10-x86_64.pl index 06ea7e6179..8a099d3c30 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/asm/aes-gcm-avx10-x86_64.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/aes-gcm-avx10-x86_64.pl @@ -1,17 +1,17 @@ #!/usr/bin/env perl # Copyright 2024 The BoringSSL Authors # -# Permission to use, copy, modify, and/or distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at # -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # #------------------------------------------------------------------------------ # @@ -1118,6 +1118,13 @@ ___ .Laes128$local_label_suffix: ___ + # Prefetch the source data 512 bytes ahead into the L1 data cache, to + # improve performance when the hardware prefetcher is disabled. Assumes the + # L1 data cache line size is 64 bytes (de facto standard on x86_64). + for ( my $i = 0 ; $i < 4 * $VL ; $i += 64 ) { + $code .= "prefetcht0 512+$i($SRC)\n"; + } + # Finish the AES encryption of the counter blocks in V0-V3, interleaved # with the GHASH update of the ciphertext blocks in GHASHDATA[0-3]. for my $i ( reverse 1 .. 9 ) { diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/asm/aes-gcm-avx2-x86_64.pl b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/aes-gcm-avx2-x86_64.pl similarity index 97% rename from naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/asm/aes-gcm-avx2-x86_64.pl rename to naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/aes-gcm-avx2-x86_64.pl index 6ea956bc8e..ebbd0dd119 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/asm/aes-gcm-avx2-x86_64.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/aes-gcm-avx2-x86_64.pl @@ -1,17 +1,17 @@ #!/usr/bin/env perl # Copyright 2024 The BoringSSL Authors # -# Permission to use, copy, modify, and/or distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at # -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # #------------------------------------------------------------------------------ # @@ -805,6 +805,12 @@ ___ .Laes128$local_label_suffix: ___ + # Prefetch the source data 512 bytes ahead into the L1 data cache, to + # improve performance when the hardware prefetcher is disabled. Assumes the + # L1 data cache line size is 64 bytes (de facto standard on x86_64). + $code .= "prefetcht0 512($SRC)\n"; + $code .= "prefetcht0 512+64($SRC)\n"; + # Finish the AES encryption of the counter blocks in AESDATA[0-3], # interleaved with the GHASH update of the ciphertext blocks. for my $i ( reverse 1 .. 9 ) { diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/asm/aesni-gcm-x86_64.pl b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/aesni-gcm-x86_64.pl similarity index 98% rename from naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/asm/aesni-gcm-x86_64.pl rename to naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/aesni-gcm-x86_64.pl index eabaa1b967..4ee045e9b2 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/asm/aesni-gcm-x86_64.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/aesni-gcm-x86_64.pl @@ -1,17 +1,22 @@ #! /usr/bin/env perl # Copyright 2013-2016 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # # ==================================================================== # Written by Andy Polyakov for the OpenSSL -# project. The module is, however, dual licensed under OpenSSL and -# CRYPTOGAMS licenses depending on where you obtain it. For further -# details see http://www.openssl.org/~appro/cryptogams/. +# project. # ==================================================================== # # diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/aesni-x86.pl b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/aesni-x86.pl index 077be94e74..e6801c59b3 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/aesni-x86.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/aesni-x86.pl @@ -1,17 +1,22 @@ #! /usr/bin/env perl # Copyright 2009-2016 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # ==================================================================== # Written by Andy Polyakov for the OpenSSL -# project. The module is, however, dual licensed under OpenSSL and -# CRYPTOGAMS licenses depending on where you obtain it. For further -# details see http://www.openssl.org/~appro/cryptogams/. +# project. # ==================================================================== # # This module implements support for Intel AES-NI extension. In diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/aesni-x86_64.pl b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/aesni-x86_64.pl index d111e38495..08df44eca6 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/aesni-x86_64.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/aesni-x86_64.pl @@ -1,17 +1,22 @@ #! /usr/bin/env perl # Copyright 2009-2016 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # # ==================================================================== # Written by Andy Polyakov for the OpenSSL -# project. The module is, however, dual licensed under OpenSSL and -# CRYPTOGAMS licenses depending on where you obtain it. For further -# details see http://www.openssl.org/~appro/cryptogams/. +# project. # ==================================================================== # # This module implements support for Intel AES-NI extension. In diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/aesv8-armx.pl b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/aesv8-armx.pl index 46b98c96b6..d0bb4dc167 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/aesv8-armx.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/aesv8-armx.pl @@ -1,17 +1,22 @@ #! /usr/bin/env perl # Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # # ==================================================================== # Written by Andy Polyakov for the OpenSSL -# project. The module is, however, dual licensed under OpenSSL and -# CRYPTOGAMS licenses depending on where you obtain it. For further -# details see http://www.openssl.org/~appro/cryptogams/. +# project. # ==================================================================== # # This module implements support for ARMv8 AES instructions. The diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/asm/aesv8-gcm-armv8.pl b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/aesv8-gcm-armv8.pl similarity index 99% rename from naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/asm/aesv8-gcm-armv8.pl rename to naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/aesv8-gcm-armv8.pl index 08ea58debb..c25846401f 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/asm/aesv8-gcm-armv8.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/aesv8-gcm-armv8.pl @@ -2,17 +2,17 @@ # Copyright (c) 2022, ARM Inc. # -# Permission to use, copy, modify, and/or distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at # -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. #======================================================================== # Written by Fangming Fang for the OpenSSL project, diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/bsaes-armv7.pl b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/bsaes-armv7.pl index fd6272d916..2cb22134c7 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/bsaes-armv7.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/bsaes-armv7.pl @@ -1,20 +1,25 @@ #! /usr/bin/env perl # Copyright 2012-2016 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # ==================================================================== # Written by Andy Polyakov for the OpenSSL -# project. The module is, however, dual licensed under OpenSSL and -# CRYPTOGAMS licenses depending on where you obtain it. For further -# details see http://www.openssl.org/~appro/cryptogams/. +# project. # # Specific modes and adaptation for Linux kernel by Ard Biesheuvel -# of Linaro. Permission to use under GPL terms is granted. +# of Linaro. # ==================================================================== # Bit-sliced AES for ARM NEON diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/asm/ghash-armv4.pl b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/ghash-armv4.pl similarity index 93% rename from naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/asm/ghash-armv4.pl rename to naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/ghash-armv4.pl index e84063bc17..e3be1ded93 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/asm/ghash-armv4.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/ghash-armv4.pl @@ -1,17 +1,22 @@ #! /usr/bin/env perl # Copyright 2010-2018 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # # ==================================================================== # Written by Andy Polyakov for the OpenSSL -# project. The module is, however, dual licensed under OpenSSL and -# CRYPTOGAMS licenses depending on where you obtain it. For further -# details see http://www.openssl.org/~appro/cryptogams/. +# project. # ==================================================================== # # April 2010 diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/asm/ghash-neon-armv8.pl b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/ghash-neon-armv8.pl similarity index 94% rename from naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/asm/ghash-neon-armv8.pl rename to naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/ghash-neon-armv8.pl index c6a7af6f54..0adbe560a7 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/asm/ghash-neon-armv8.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/ghash-neon-armv8.pl @@ -1,16 +1,21 @@ #! /usr/bin/env perl # Copyright 2010-2016 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # ==================================================================== # Written by Andy Polyakov for the OpenSSL -# project. The module is, however, dual licensed under OpenSSL and -# CRYPTOGAMS licenses depending on where you obtain it. For further -# details see http://www.openssl.org/~appro/cryptogams/. +# project. # ==================================================================== # This file was adapted to AArch64 from the 32-bit version in ghash-armv4.pl. It diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/asm/ghash-ssse3-x86.pl b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/ghash-ssse3-x86.pl similarity index 92% rename from naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/asm/ghash-ssse3-x86.pl rename to naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/ghash-ssse3-x86.pl index 793c94f9cb..c208a4fd58 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/asm/ghash-ssse3-x86.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/ghash-ssse3-x86.pl @@ -1,17 +1,17 @@ #!/usr/bin/env perl # Copyright 2019 The BoringSSL Authors # -# Permission to use, copy, modify, and/or distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at # -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # ghash-ssse3-x86.pl is a constant-time variant of the traditional 4-bit # table-based GHASH implementation. It requires SSSE3 instructions. diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/asm/ghash-ssse3-x86_64.pl b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/ghash-ssse3-x86_64.pl similarity index 93% rename from naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/asm/ghash-ssse3-x86_64.pl rename to naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/ghash-ssse3-x86_64.pl index 20a2abbee4..1322e61fe0 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/asm/ghash-ssse3-x86_64.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/ghash-ssse3-x86_64.pl @@ -1,17 +1,17 @@ #!/usr/bin/env perl # Copyright 2019 The BoringSSL Authors # -# Permission to use, copy, modify, and/or distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at # -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # ghash-ssse3-x86_64.pl is a constant-time variant of the traditional 4-bit # table-based GHASH implementation. It requires SSSE3 instructions. diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/asm/ghash-x86.pl b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/ghash-x86.pl similarity index 97% rename from naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/asm/ghash-x86.pl rename to naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/ghash-x86.pl index 17dbeadb8d..6458dfbf84 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/asm/ghash-x86.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/ghash-x86.pl @@ -1,17 +1,22 @@ #! /usr/bin/env perl # Copyright 2010-2016 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # # ==================================================================== # Written by Andy Polyakov for the OpenSSL -# project. The module is, however, dual licensed under OpenSSL and -# CRYPTOGAMS licenses depending on where you obtain it. For further -# details see http://www.openssl.org/~appro/cryptogams/. +# project. # ==================================================================== # # March, May, June 2010 diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/asm/ghash-x86_64.pl b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/ghash-x86_64.pl similarity index 98% rename from naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/asm/ghash-x86_64.pl rename to naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/ghash-x86_64.pl index c026d8f9df..2e8ce7438e 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/asm/ghash-x86_64.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/ghash-x86_64.pl @@ -1,17 +1,22 @@ #! /usr/bin/env perl # Copyright 2010-2016 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # # ==================================================================== # Written by Andy Polyakov for the OpenSSL -# project. The module is, however, dual licensed under OpenSSL and -# CRYPTOGAMS licenses depending on where you obtain it. For further -# details see http://www.openssl.org/~appro/cryptogams/. +# project. # ==================================================================== # # March, June 2010 diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/asm/ghashv8-armx.pl b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/ghashv8-armx.pl similarity index 97% rename from naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/asm/ghashv8-armx.pl rename to naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/ghashv8-armx.pl index 74f4b9b75c..ac64438175 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/asm/ghashv8-armx.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/ghashv8-armx.pl @@ -1,17 +1,22 @@ #! /usr/bin/env perl # Copyright 2014-2020 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # # ==================================================================== # Written by Andy Polyakov for the OpenSSL -# project. The module is, however, dual licensed under OpenSSL and -# CRYPTOGAMS licenses depending on where you obtain it. For further -# details see http://www.openssl.org/~appro/cryptogams/. +# project. # ==================================================================== # # GHASH for ARMv8 Crypto Extension, 64-bit polynomial multiplication. diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/vpaes-armv7.pl b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/vpaes-armv7.pl index b4f2eb362a..bd291f9f61 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/vpaes-armv7.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/vpaes-armv7.pl @@ -1,10 +1,17 @@ #! /usr/bin/env perl # Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. ###################################################################### diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/vpaes-armv8.pl b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/vpaes-armv8.pl index a39c1e40f2..6a54065d78 100755 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/vpaes-armv8.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/vpaes-armv8.pl @@ -1,10 +1,17 @@ #! /usr/bin/env perl # Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. ###################################################################### diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/vpaes-x86.pl b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/vpaes-x86.pl index d7c090563b..16dbba6888 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/vpaes-x86.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/vpaes-x86.pl @@ -1,10 +1,17 @@ #! /usr/bin/env perl # Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. ###################################################################### diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/vpaes-x86_64.pl b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/vpaes-x86_64.pl index 4d0d38f067..b386ec935e 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/vpaes-x86_64.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/asm/vpaes-x86_64.pl @@ -1,10 +1,17 @@ #! /usr/bin/env perl # Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. ###################################################################### diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/cbc.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/cbc.cc.inc similarity index 82% rename from naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/cbc.cc.inc rename to naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/cbc.cc.inc index 2cbfcffe4a..eec324a4c4 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/cbc.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/cbc.cc.inc @@ -1,11 +1,16 @@ -/* - * Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/cfb.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/cfb.cc.inc similarity index 87% rename from naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/cfb.cc.inc rename to naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/cfb.cc.inc index 42d3aba906..3861322c60 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/cfb.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/cfb.cc.inc @@ -1,11 +1,16 @@ -/* - * Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/ctr.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/ctr.cc.inc similarity index 78% rename from naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/ctr.cc.inc rename to naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/ctr.cc.inc index 364743f3c5..cf9ca18612 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/ctr.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/ctr.cc.inc @@ -1,11 +1,16 @@ -/* - * Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/gcm.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/gcm.cc.inc similarity index 96% rename from naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/gcm.cc.inc rename to naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/gcm.cc.inc index d8ccf0093d..c3c68f26b6 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/gcm.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/gcm.cc.inc @@ -1,11 +1,16 @@ -/* - * Copyright 2010-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2010-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/gcm_nohw.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/gcm_nohw.cc.inc similarity index 93% rename from naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/gcm_nohw.cc.inc rename to naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/gcm_nohw.cc.inc index 3d04459548..39fe7c51b8 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/gcm_nohw.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/gcm_nohw.cc.inc @@ -1,16 +1,16 @@ -/* Copyright 2019 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2019 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/internal.h b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/internal.h index 6d56b11c1e..7bf28b98c7 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/internal.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/internal.h @@ -1,16 +1,16 @@ -/* Copyright 2017 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2017 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_AES_INTERNAL_H #define OPENSSL_HEADER_AES_INTERNAL_H @@ -268,6 +268,335 @@ void aes_nohw_ctr32_encrypt_blocks(const uint8_t *in, uint8_t *out, void aes_nohw_cbc_encrypt(const uint8_t *in, uint8_t *out, size_t len, const AES_KEY *key, uint8_t *ivec, int enc); +// Modes + +inline void CRYPTO_xor16(uint8_t out[16], const uint8_t a[16], + const uint8_t b[16]) { + // TODO(davidben): Ideally we'd leave this to the compiler, which could use + // vector registers, etc. But the compiler doesn't know that |in| and |out| + // cannot partially alias. |restrict| is slightly two strict (we allow exact + // aliasing), but perhaps in-place could be a separate function? + static_assert(16 % sizeof(crypto_word_t) == 0, + "block cannot be evenly divided into words"); + for (size_t i = 0; i < 16; i += sizeof(crypto_word_t)) { + CRYPTO_store_word_le( + out + i, CRYPTO_load_word_le(a + i) ^ CRYPTO_load_word_le(b + i)); + } +} + + +// CTR. + +// CRYPTO_ctr128_encrypt_ctr32 encrypts (or decrypts, it's the same in CTR mode) +// |len| bytes from |in| to |out| using |block| in counter mode. There's no +// requirement that |len| be a multiple of any value and any partial blocks are +// stored in |ecount_buf| and |*num|, which must be zeroed before the initial +// call. The counter is a 128-bit, big-endian value in |ivec| and is +// incremented by this function. If the counter overflows, it wraps around. +// |ctr| must be a function that performs CTR mode but only deals with the lower +// 32 bits of the counter. +void CRYPTO_ctr128_encrypt_ctr32(const uint8_t *in, uint8_t *out, size_t len, + const AES_KEY *key, uint8_t ivec[16], + uint8_t ecount_buf[16], unsigned *num, + ctr128_f ctr); + + +// GCM. +// +// This API differs from the upstream API slightly. The |GCM128_CONTEXT| does +// not have a |key| pointer that points to the key as upstream's version does. +// Instead, every function takes a |key| parameter. This way |GCM128_CONTEXT| +// can be safely copied. Additionally, |gcm_key| is split into a separate +// struct. + +// gcm_impl_t specifies an assembly implementation of AES-GCM. +enum gcm_impl_t { + gcm_separate = 0, // No combined AES-GCM, but may have AES-CTR and GHASH. + gcm_x86_aesni, + gcm_x86_vaes_avx2, + gcm_x86_vaes_avx10_512, + gcm_arm64_aes, +}; + +typedef struct { uint64_t hi,lo; } u128; + +// gmult_func multiplies |Xi| by the GCM key and writes the result back to +// |Xi|. +typedef void (*gmult_func)(uint8_t Xi[16], const u128 Htable[16]); + +// ghash_func repeatedly multiplies |Xi| by the GCM key and adds in blocks from +// |inp|. The result is written back to |Xi| and the |len| argument must be a +// multiple of 16. +typedef void (*ghash_func)(uint8_t Xi[16], const u128 Htable[16], + const uint8_t *inp, size_t len); + +typedef struct gcm128_key_st { + u128 Htable[16]; + gmult_func gmult; + ghash_func ghash; + AES_KEY aes; + + ctr128_f ctr; + block128_f block; + enum gcm_impl_t impl; +} GCM128_KEY; + +// GCM128_CONTEXT contains state for a single GCM operation. The structure +// should be zero-initialized before use. +typedef struct { + // The following 5 names follow names in GCM specification + uint8_t Yi[16]; + uint8_t EKi[16]; + uint8_t EK0[16]; + struct { + uint64_t aad; + uint64_t msg; + } len; + uint8_t Xi[16]; + unsigned mres, ares; +} GCM128_CONTEXT; + +#if defined(OPENSSL_X86) || defined(OPENSSL_X86_64) +// crypto_gcm_clmul_enabled returns one if the CLMUL implementation of GCM is +// used. +int crypto_gcm_clmul_enabled(void); +#endif + +// CRYPTO_ghash_init writes a precomputed table of powers of |gcm_key| to +// |out_table| and sets |*out_mult| and |*out_hash| to (potentially hardware +// accelerated) functions for performing operations in the GHASH field. +void CRYPTO_ghash_init(gmult_func *out_mult, ghash_func *out_hash, + u128 out_table[16], const uint8_t gcm_key[16]); + +// CRYPTO_gcm128_init_aes_key initialises |gcm_key| to with AES key |key|. +void CRYPTO_gcm128_init_aes_key(GCM128_KEY *gcm_key, const uint8_t *key, + size_t key_bytes); + +// CRYPTO_gcm128_init_ctx initializes |ctx| to encrypt with |key| and |iv|. +void CRYPTO_gcm128_init_ctx(const GCM128_KEY *key, GCM128_CONTEXT *ctx, + const uint8_t *iv, size_t iv_len); + +// CRYPTO_gcm128_aad adds to the authenticated data for an instance of GCM. +// This must be called before and data is encrypted. |key| must be the same +// value that was passed to |CRYPTO_gcm128_init_ctx|. It returns one on success +// and zero otherwise. +int CRYPTO_gcm128_aad(const GCM128_KEY *key, GCM128_CONTEXT *ctx, + const uint8_t *aad, size_t aad_len); + +// CRYPTO_gcm128_encrypt encrypts |len| bytes from |in| to |out|. |key| must be +// the same value that was passed to |CRYPTO_gcm128_init_ctx|. It returns one on +// success and zero otherwise. +int CRYPTO_gcm128_encrypt(const GCM128_KEY *key, GCM128_CONTEXT *ctx, + const uint8_t *in, uint8_t *out, size_t len); + +// CRYPTO_gcm128_decrypt decrypts |len| bytes from |in| to |out|. |key| must be +// the same value that was passed to |CRYPTO_gcm128_init_ctx|. It returns one on +// success and zero otherwise. +int CRYPTO_gcm128_decrypt(const GCM128_KEY *key, GCM128_CONTEXT *ctx, + const uint8_t *in, uint8_t *out, size_t len); + +// CRYPTO_gcm128_finish calculates the authenticator and compares it against +// |len| bytes of |tag|. |key| must be the same value that was passed to +// |CRYPTO_gcm128_init_ctx|. It returns one on success and zero otherwise. +int CRYPTO_gcm128_finish(const GCM128_KEY *key, GCM128_CONTEXT *ctx, + const uint8_t *tag, size_t len); + +// CRYPTO_gcm128_tag calculates the authenticator and copies it into |tag|. +// The minimum of |len| and 16 bytes are copied into |tag|. |key| must be the +// same value that was passed to |CRYPTO_gcm128_init_ctx|. +void CRYPTO_gcm128_tag(const GCM128_KEY *key, GCM128_CONTEXT *ctx, uint8_t *tag, + size_t len); + + +// GCM assembly. + +void gcm_init_nohw(u128 Htable[16], const uint64_t H[2]); +void gcm_gmult_nohw(uint8_t Xi[16], const u128 Htable[16]); +void gcm_ghash_nohw(uint8_t Xi[16], const u128 Htable[16], const uint8_t *inp, + size_t len); + +#if !defined(OPENSSL_NO_ASM) + +#if defined(OPENSSL_X86) || defined(OPENSSL_X86_64) +#define GCM_FUNCREF +void gcm_init_clmul(u128 Htable[16], const uint64_t Xi[2]); +void gcm_gmult_clmul(uint8_t Xi[16], const u128 Htable[16]); +void gcm_ghash_clmul(uint8_t Xi[16], const u128 Htable[16], const uint8_t *inp, + size_t len); + +void gcm_init_ssse3(u128 Htable[16], const uint64_t Xi[2]); +void gcm_gmult_ssse3(uint8_t Xi[16], const u128 Htable[16]); +void gcm_ghash_ssse3(uint8_t Xi[16], const u128 Htable[16], const uint8_t *in, + size_t len); + +#if defined(OPENSSL_X86_64) +#define GHASH_ASM_X86_64 +void gcm_init_avx(u128 Htable[16], const uint64_t Xi[2]); +void gcm_gmult_avx(uint8_t Xi[16], const u128 Htable[16]); +void gcm_ghash_avx(uint8_t Xi[16], const u128 Htable[16], const uint8_t *in, + size_t len); + +#define HW_GCM +size_t aesni_gcm_encrypt(const uint8_t *in, uint8_t *out, size_t len, + const AES_KEY *key, uint8_t ivec[16], + const u128 Htable[16], uint8_t Xi[16]); +size_t aesni_gcm_decrypt(const uint8_t *in, uint8_t *out, size_t len, + const AES_KEY *key, uint8_t ivec[16], + const u128 Htable[16], uint8_t Xi[16]); + +void gcm_init_vpclmulqdq_avx2(u128 Htable[16], const uint64_t H[2]); +void gcm_gmult_vpclmulqdq_avx2(uint8_t Xi[16], const u128 Htable[16]); +void gcm_ghash_vpclmulqdq_avx2(uint8_t Xi[16], const u128 Htable[16], + const uint8_t *in, size_t len); +void aes_gcm_enc_update_vaes_avx2(const uint8_t *in, uint8_t *out, size_t len, + const AES_KEY *key, const uint8_t ivec[16], + const u128 Htable[16], uint8_t Xi[16]); +void aes_gcm_dec_update_vaes_avx2(const uint8_t *in, uint8_t *out, size_t len, + const AES_KEY *key, const uint8_t ivec[16], + const u128 Htable[16], uint8_t Xi[16]); + +void gcm_init_vpclmulqdq_avx10_512(u128 Htable[16], const uint64_t H[2]); +void gcm_gmult_vpclmulqdq_avx10(uint8_t Xi[16], const u128 Htable[16]); +void gcm_ghash_vpclmulqdq_avx10_512(uint8_t Xi[16], const u128 Htable[16], + const uint8_t *in, size_t len); +void aes_gcm_enc_update_vaes_avx10_512(const uint8_t *in, uint8_t *out, + size_t len, const AES_KEY *key, + const uint8_t ivec[16], + const u128 Htable[16], uint8_t Xi[16]); +void aes_gcm_dec_update_vaes_avx10_512(const uint8_t *in, uint8_t *out, + size_t len, const AES_KEY *key, + const uint8_t ivec[16], + const u128 Htable[16], uint8_t Xi[16]); + +#endif // OPENSSL_X86_64 + +#if defined(OPENSSL_X86) +#define GHASH_ASM_X86 +#endif // OPENSSL_X86 + +#elif defined(OPENSSL_ARM) || defined(OPENSSL_AARCH64) + +#define GHASH_ASM_ARM +#define GCM_FUNCREF + +inline int gcm_pmull_capable(void) { return CRYPTO_is_ARMv8_PMULL_capable(); } + +void gcm_init_v8(u128 Htable[16], const uint64_t H[2]); +void gcm_gmult_v8(uint8_t Xi[16], const u128 Htable[16]); +void gcm_ghash_v8(uint8_t Xi[16], const u128 Htable[16], const uint8_t *inp, + size_t len); + +inline int gcm_neon_capable(void) { return CRYPTO_is_NEON_capable(); } + +void gcm_init_neon(u128 Htable[16], const uint64_t H[2]); +void gcm_gmult_neon(uint8_t Xi[16], const u128 Htable[16]); +void gcm_ghash_neon(uint8_t Xi[16], const u128 Htable[16], const uint8_t *inp, + size_t len); + +#if defined(OPENSSL_AARCH64) +#define HW_GCM +// These functions are defined in aesv8-gcm-armv8.pl. +void aes_gcm_enc_kernel(const uint8_t *in, uint64_t in_bits, void *out, + void *Xi, uint8_t *ivec, const AES_KEY *key, + const u128 Htable[16]); +void aes_gcm_dec_kernel(const uint8_t *in, uint64_t in_bits, void *out, + void *Xi, uint8_t *ivec, const AES_KEY *key, + const u128 Htable[16]); +#endif + +#endif +#endif // OPENSSL_NO_ASM + + +// CBC. + +// cbc128_f is the type of a function that performs CBC-mode encryption. +typedef void (*cbc128_f)(const uint8_t *in, uint8_t *out, size_t len, + const AES_KEY *key, uint8_t ivec[16], int enc); + +// CRYPTO_cbc128_encrypt encrypts |len| bytes from |in| to |out| using the +// given IV and block cipher in CBC mode. The input need not be a multiple of +// 128 bits long, but the output will round up to the nearest 128 bit multiple, +// zero padding the input if needed. The IV will be updated on return. +void CRYPTO_cbc128_encrypt(const uint8_t *in, uint8_t *out, size_t len, + const AES_KEY *key, uint8_t ivec[16], + block128_f block); + +// CRYPTO_cbc128_decrypt decrypts |len| bytes from |in| to |out| using the +// given IV and block cipher in CBC mode. If |len| is not a multiple of 128 +// bits then only that many bytes will be written, but a multiple of 128 bits +// is always read from |in|. The IV will be updated on return. +void CRYPTO_cbc128_decrypt(const uint8_t *in, uint8_t *out, size_t len, + const AES_KEY *key, uint8_t ivec[16], + block128_f block); + + +// OFB. + +// CRYPTO_ofb128_encrypt encrypts (or decrypts, it's the same with OFB mode) +// |len| bytes from |in| to |out| using |block| in OFB mode. There's no +// requirement that |len| be a multiple of any value and any partial blocks are +// stored in |ivec| and |*num|, the latter must be zero before the initial +// call. +void CRYPTO_ofb128_encrypt(const uint8_t *in, uint8_t *out, size_t len, + const AES_KEY *key, uint8_t ivec[16], unsigned *num, + block128_f block); + + +// CFB. + +// CRYPTO_cfb128_encrypt encrypts (or decrypts, if |enc| is zero) |len| bytes +// from |in| to |out| using |block| in CFB mode. There's no requirement that +// |len| be a multiple of any value and any partial blocks are stored in |ivec| +// and |*num|, the latter must be zero before the initial call. +void CRYPTO_cfb128_encrypt(const uint8_t *in, uint8_t *out, size_t len, + const AES_KEY *key, uint8_t ivec[16], unsigned *num, + int enc, block128_f block); + +// CRYPTO_cfb128_8_encrypt encrypts (or decrypts, if |enc| is zero) |len| bytes +// from |in| to |out| using |block| in CFB-8 mode. Prior to the first call +// |num| should be set to zero. +void CRYPTO_cfb128_8_encrypt(const uint8_t *in, uint8_t *out, size_t len, + const AES_KEY *key, uint8_t ivec[16], + unsigned *num, int enc, block128_f block); + +// CRYPTO_cfb128_1_encrypt encrypts (or decrypts, if |enc| is zero) |len| bytes +// from |in| to |out| using |block| in CFB-1 mode. Prior to the first call +// |num| should be set to zero. +void CRYPTO_cfb128_1_encrypt(const uint8_t *in, uint8_t *out, size_t bits, + const AES_KEY *key, uint8_t ivec[16], + unsigned *num, int enc, block128_f block); + +size_t CRYPTO_cts128_encrypt_block(const uint8_t *in, uint8_t *out, size_t len, + const AES_KEY *key, uint8_t ivec[16], + block128_f block); + + +// POLYVAL. +// +// POLYVAL is a polynomial authenticator that operates over a field very +// similar to the one that GHASH uses. See +// https://www.rfc-editor.org/rfc/rfc8452.html#section-3. + +struct polyval_ctx { + uint8_t S[16]; + u128 Htable[16]; + gmult_func gmult; + ghash_func ghash; +}; + +// CRYPTO_POLYVAL_init initialises |ctx| using |key|. +void CRYPTO_POLYVAL_init(struct polyval_ctx *ctx, const uint8_t key[16]); + +// CRYPTO_POLYVAL_update_blocks updates the accumulator in |ctx| given the +// blocks from |in|. Only a whole number of blocks can be processed so |in_len| +// must be a multiple of 16. +void CRYPTO_POLYVAL_update_blocks(struct polyval_ctx *ctx, const uint8_t *in, + size_t in_len); + +// CRYPTO_POLYVAL_finish writes the accumulator from |ctx| to |out|. +void CRYPTO_POLYVAL_finish(const struct polyval_ctx *ctx, uint8_t out[16]); + } // extern C diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/key_wrap.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/key_wrap.cc.inc index ab5ff38c0a..99c2450692 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/key_wrap.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/key_wrap.cc.inc @@ -1,11 +1,16 @@ -/* - * Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/mode_wrappers.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/mode_wrappers.cc.inc index cc1fd8adba..be5fba9e5b 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/mode_wrappers.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/mode_wrappers.cc.inc @@ -1,18 +1,22 @@ -/* - * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include #include "../aes/internal.h" -#include "../modes/internal.h" #include "../service_indicator/internal.h" diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/ofb.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/ofb.cc.inc similarity index 57% rename from naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/ofb.cc.inc rename to naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/ofb.cc.inc index 38e8795f15..7a6834ac66 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/ofb.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/ofb.cc.inc @@ -1,11 +1,16 @@ -/* - * Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/polyval.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/polyval.cc.inc similarity index 73% rename from naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/polyval.cc.inc rename to naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/polyval.cc.inc index 46d66c200f..c824cee86b 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/polyval.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/aes/polyval.cc.inc @@ -1,16 +1,16 @@ -/* Copyright 2016 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2016 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bcm.cc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bcm.cc index d791da5017..a23d31209a 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bcm.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bcm.cc @@ -1,16 +1,16 @@ -/* Copyright 2017 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2017 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #if !defined(_GNU_SOURCE) #define _GNU_SOURCE // needed for syscall() on Linux. @@ -36,8 +36,15 @@ // separate compilation units again. #include "aes/aes.cc.inc" #include "aes/aes_nohw.cc.inc" +#include "aes/cbc.cc.inc" +#include "aes/cfb.cc.inc" +#include "aes/ctr.cc.inc" +#include "aes/gcm.cc.inc" +#include "aes/gcm_nohw.cc.inc" #include "aes/key_wrap.cc.inc" #include "aes/mode_wrappers.cc.inc" +#include "aes/ofb.cc.inc" +#include "aes/polyval.cc.inc" #include "bn/add.cc.inc" #include "bn/asm/x86_64-gcc.cc.inc" #include "bn/bn.cc.inc" @@ -89,13 +96,6 @@ #include "keccak/keccak.cc.inc" #include "mldsa/mldsa.cc.inc" #include "mlkem/mlkem.cc.inc" -#include "modes/cbc.cc.inc" -#include "modes/cfb.cc.inc" -#include "modes/ctr.cc.inc" -#include "modes/gcm.cc.inc" -#include "modes/gcm_nohw.cc.inc" -#include "modes/ofb.cc.inc" -#include "modes/polyval.cc.inc" #include "rand/ctrdrbg.cc.inc" #include "rand/rand.cc.inc" #include "rsa/blinding.cc.inc" diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bcm_interface.h b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bcm_interface.h index 31faed0b43..065eec0527 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bcm_interface.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bcm_interface.h @@ -1,16 +1,16 @@ -/* Copyright 2024 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2024 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_CRYPTO_BCM_INTERFACE_H #define OPENSSL_HEADER_CRYPTO_BCM_INTERFACE_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/add.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/add.cc.inc index e4b0b384d6..0fa3048b8b 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/add.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/add.cc.inc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/asm/armv4-mont.pl b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/asm/armv4-mont.pl index 491cc84d20..2b9a773aea 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/asm/armv4-mont.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/asm/armv4-mont.pl @@ -1,17 +1,22 @@ #! /usr/bin/env perl # Copyright 2007-2016 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # ==================================================================== # Written by Andy Polyakov for the OpenSSL -# project. The module is, however, dual licensed under OpenSSL and -# CRYPTOGAMS licenses depending on where you obtain it. For further -# details see http://www.openssl.org/~appro/cryptogams/. +# project. # ==================================================================== # January 2007. diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/asm/armv8-mont.pl b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/asm/armv8-mont.pl index aa65ffde9e..e47f6a1fb3 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/asm/armv8-mont.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/asm/armv8-mont.pl @@ -1,17 +1,22 @@ #! /usr/bin/env perl # Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # ==================================================================== # Written by Andy Polyakov for the OpenSSL -# project. The module is, however, dual licensed under OpenSSL and -# CRYPTOGAMS licenses depending on where you obtain it. For further -# details see http://www.openssl.org/~appro/cryptogams/. +# project. # ==================================================================== # March 2015 diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/asm/bn-586.pl b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/asm/bn-586.pl index e4fc0f9806..7e3decff6b 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/asm/bn-586.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/asm/bn-586.pl @@ -1,10 +1,17 @@ #! /usr/bin/env perl # Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/asm/bn-armv8.pl b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/asm/bn-armv8.pl index 10eff2431b..6aa1bb4063 100755 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/asm/bn-armv8.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/asm/bn-armv8.pl @@ -1,17 +1,17 @@ #!/usr/bin/env perl # Copyright 2023 The BoringSSL Authors # -# Permission to use, copy, modify, and/or distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at # -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. use strict; diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/asm/co-586.pl b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/asm/co-586.pl index 458db33aa7..c3f4e52deb 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/asm/co-586.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/asm/co-586.pl @@ -1,10 +1,17 @@ #! /usr/bin/env perl # Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; push(@INC,"${dir}","${dir}../../../perlasm"); diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/asm/rsaz-avx2.pl b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/asm/rsaz-avx2.pl index 733722c7ad..da4aef3eef 100755 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/asm/rsaz-avx2.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/asm/rsaz-avx2.pl @@ -2,10 +2,17 @@ # Copyright 2013-2016 The OpenSSL Project Authors. All Rights Reserved. # Copyright (c) 2012, Intel Corporation. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # # Originally written by Shay Gueron (1, 2), and Vlad Krasnov (1) # (1) Intel Corporation, Israel Development Center, Haifa, Israel diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/asm/x86-mont.pl b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/asm/x86-mont.pl index 7b7cca751d..3de17a4bc0 100755 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/asm/x86-mont.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/asm/x86-mont.pl @@ -1,17 +1,22 @@ #! /usr/bin/env perl # Copyright 2005-2016 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # ==================================================================== # Written by Andy Polyakov for the OpenSSL -# project. The module is, however, dual licensed under OpenSSL and -# CRYPTOGAMS licenses depending on where you obtain it. For further -# details see http://www.openssl.org/~appro/cryptogams/. +# project. # ==================================================================== # October 2005 diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/asm/x86_64-gcc.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/asm/x86_64-gcc.cc.inc index efdff48104..c1f0fe9fe5 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/asm/x86_64-gcc.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/asm/x86_64-gcc.cc.inc @@ -1,11 +1,16 @@ -/* - * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. /* x86_64 BIGNUM accelerator version 0.1, December 2002. * @@ -13,8 +18,7 @@ * project. * * Rights for redistribution and usage in source and binary forms are - * granted according to the OpenSSL license. Warranty of any kind is - * disclaimed. + * granted according to the License. Warranty of any kind is disclaimed. * * Q. Version 0.1? It doesn't sound like Andy, he used to assign real * versions, like 1.0... diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/asm/x86_64-mont.pl b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/asm/x86_64-mont.pl index d76b68bc82..537b0283d5 100755 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/asm/x86_64-mont.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/asm/x86_64-mont.pl @@ -1,17 +1,22 @@ #! /usr/bin/env perl # Copyright 2005-2016 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # ==================================================================== # Written by Andy Polyakov for the OpenSSL -# project. The module is, however, dual licensed under OpenSSL and -# CRYPTOGAMS licenses depending on where you obtain it. For further -# details see http://www.openssl.org/~appro/cryptogams/. +# project. # ==================================================================== # October 2005. diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/asm/x86_64-mont5.pl b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/asm/x86_64-mont5.pl index a944739fe7..43b9400448 100755 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/asm/x86_64-mont5.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/asm/x86_64-mont5.pl @@ -1,17 +1,22 @@ #! /usr/bin/env perl # Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # ==================================================================== # Written by Andy Polyakov for the OpenSSL -# project. The module is, however, dual licensed under OpenSSL and -# CRYPTOGAMS licenses depending on where you obtain it. For further -# details see http://www.openssl.org/~appro/cryptogams/. +# project. # ==================================================================== # August 2011. diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/bn.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/bn.cc.inc index b957b02f75..83ee8337e1 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/bn.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/bn.cc.inc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/bytes.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/bytes.cc.inc index f5025d74b1..b5066ea07b 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/bytes.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/bytes.cc.inc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/check_bn_tests.go b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/check_bn_tests.go index e51f960e32..3541e60e07 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/check_bn_tests.go +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/check_bn_tests.go @@ -1,16 +1,16 @@ // Copyright 2016 The BoringSSL Authors // -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at // -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. //go:build ignore diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/cmp.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/cmp.cc.inc index a49530a01f..d60becae14 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/cmp.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/cmp.cc.inc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/ctx.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/ctx.cc.inc index 8ddcf10185..7cc7c9bd6b 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/ctx.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/ctx.cc.inc @@ -1,11 +1,16 @@ -/* - * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/div.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/div.cc.inc index a15666ba78..b09f9fea5d 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/div.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/div.cc.inc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/div_extra.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/div_extra.cc.inc index bb18ebb4a7..ebdc2ab1da 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/div_extra.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/div_extra.cc.inc @@ -1,16 +1,16 @@ -/* Copyright 2018 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2018 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/exponentiation.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/exponentiation.cc.inc index f193e55300..6c3d44826b 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/exponentiation.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/exponentiation.cc.inc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/gcd.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/gcd.cc.inc index ad29af2e86..6e3cc0602a 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/gcd.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/gcd.cc.inc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/gcd_extra.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/gcd_extra.cc.inc index 24acfc9a0b..d8642cdda6 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/gcd_extra.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/gcd_extra.cc.inc @@ -1,16 +1,16 @@ -/* Copyright 2018 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2018 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/generic.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/generic.cc.inc index 0c89020570..9cbbd855bf 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/generic.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/generic.cc.inc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/internal.h b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/internal.h index 3f2e364424..0a9997de41 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/internal.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/internal.h @@ -1,12 +1,17 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_BN_INTERNAL_H #define OPENSSL_HEADER_BN_INTERNAL_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/jacobi.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/jacobi.cc.inc index dd3b0c09da..0ac6f675e3 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/jacobi.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/jacobi.cc.inc @@ -1,11 +1,16 @@ -/* - * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/montgomery.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/montgomery.cc.inc index 9cf42f1a17..e73f80561b 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/montgomery.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/montgomery.cc.inc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/montgomery_inv.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/montgomery_inv.cc.inc index 499665a5fb..b2fa839089 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/montgomery_inv.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/montgomery_inv.cc.inc @@ -1,16 +1,16 @@ -/* Copyright 2016 Brian Smith. - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2016 Brian Smith. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/mul.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/mul.cc.inc index 392e8d6717..6dc8d52018 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/mul.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/mul.cc.inc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/prime.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/prime.cc.inc index 238cc4307f..047124631c 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/prime.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/prime.cc.inc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/random.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/random.cc.inc index b9a6bef110..20993355f1 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/random.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/random.cc.inc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/rsaz_exp.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/rsaz_exp.cc.inc index 436055e9b1..720a43bc46 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/rsaz_exp.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/rsaz_exp.cc.inc @@ -1,16 +1,21 @@ -/* - * Copyright 2013-2016 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2012, Intel Corporation. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - * - * Originally written by Shay Gueron (1, 2), and Vlad Krasnov (1) - * (1) Intel Corporation, Israel Development Center, Haifa, Israel - * (2) University of Haifa, Israel - */ +// Copyright 2013-2016 The OpenSSL Project Authors. All Rights Reserved. +// Copyright (c) 2012, Intel Corporation. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Originally written by Shay Gueron (1, 2), and Vlad Krasnov (1) +// (1) Intel Corporation, Israel Development Center, Haifa, Israel +// (2) University of Haifa, Israel #include "rsaz_exp.h" diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/rsaz_exp.h b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/rsaz_exp.h index 8028b1623c..e0e9aa2acf 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/rsaz_exp.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/rsaz_exp.h @@ -1,16 +1,21 @@ -/* - * Copyright 2013-2016 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2012, Intel Corporation. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - * - * Originally written by Shay Gueron (1, 2), and Vlad Krasnov (1) - * (1) Intel Corporation, Israel Development Center, Haifa, Israel - * (2) University of Haifa, Israel - */ +// Copyright 2013-2016 The OpenSSL Project Authors. All Rights Reserved. +// Copyright (c) 2012, Intel Corporation. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Originally written by Shay Gueron (1, 2), and Vlad Krasnov (1) +// (1) Intel Corporation, Israel Development Center, Haifa, Israel +// (2) University of Haifa, Israel #ifndef OPENSSL_HEADER_BN_RSAZ_EXP_H #define OPENSSL_HEADER_BN_RSAZ_EXP_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/shift.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/shift.cc.inc index 39146b80cc..2739c5a35e 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/shift.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/shift.cc.inc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/sqrt.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/sqrt.cc.inc index 1da0e9f2bc..cb70f196c8 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/sqrt.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/bn/sqrt.cc.inc @@ -1,11 +1,16 @@ -/* - * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/cipher/aead.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/cipher/aead.cc.inc index 9c9b35f2bb..50a218da01 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/cipher/aead.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/cipher/aead.cc.inc @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/cipher/cipher.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/cipher/cipher.cc.inc index 9898262dcc..fb351721fc 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/cipher/cipher.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/cipher/cipher.cc.inc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/cipher/e_aes.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/cipher/e_aes.cc.inc index 1f264181c2..3ee6c7b6cb 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/cipher/e_aes.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/cipher/e_aes.cc.inc @@ -1,11 +1,16 @@ -/* - * Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include @@ -22,7 +27,6 @@ #include "../aes/internal.h" #include "../bcm_interface.h" #include "../delocate.h" -#include "../modes/internal.h" #include "../service_indicator/internal.h" #include "internal.h" diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/cipher/e_aesccm.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/cipher/e_aesccm.cc.inc index a5d324ef0e..b45ecdd4c5 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/cipher/e_aesccm.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/cipher/e_aesccm.cc.inc @@ -1,11 +1,16 @@ -/* - * Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include @@ -17,7 +22,6 @@ #include "../aes/internal.h" #include "../delocate.h" -#include "../modes/internal.h" #include "../service_indicator/internal.h" #include "internal.h" diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/cipher/internal.h b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/cipher/internal.h index 9aa0ac525c..d4a06f720b 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/cipher/internal.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/cipher/internal.h @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_CIPHER_INTERNAL_H #define OPENSSL_HEADER_CIPHER_INTERNAL_H @@ -16,7 +21,7 @@ #include #include "../../internal.h" -#include "../modes/internal.h" +#include "../aes/internal.h" #if defined(__cplusplus) extern "C" { diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/cmac/cmac.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/cmac/cmac.cc.inc index 0a16ee9fb7..c05be09363 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/cmac/cmac.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/cmac/cmac.cc.inc @@ -1,11 +1,16 @@ -/* - * Copyright 2010-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2010-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/delocate.h b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/delocate.h index fba1a4cc0d..26d3d417e2 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/delocate.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/delocate.h @@ -1,16 +1,16 @@ -/* Copyright 2017 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2017 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_FIPSMODULE_DELOCATE_H #define OPENSSL_HEADER_FIPSMODULE_DELOCATE_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/dh/check.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/dh/check.cc.inc index 14e2b49905..19beb31f88 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/dh/check.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/dh/check.cc.inc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/dh/dh.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/dh/dh.cc.inc index 77df858817..6f1267fe47 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/dh/dh.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/dh/dh.cc.inc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/dh/internal.h b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/dh/internal.h index df477f4cc9..9fc30cac39 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/dh/internal.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/dh/internal.h @@ -1,16 +1,16 @@ -/* Copyright 2022 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2022 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_CRYPTO_FIPSMODULE_DH_INTERNAL_H #define OPENSSL_HEADER_CRYPTO_FIPSMODULE_DH_INTERNAL_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/digest/digest.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/digest/digest.cc.inc index 973b8fe18c..dc22ad47e8 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/digest/digest.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/digest/digest.cc.inc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/digest/digests.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/digest/digests.cc.inc index 61dc524d4a..3c1bfac504 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/digest/digests.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/digest/digests.cc.inc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/digest/internal.h b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/digest/internal.h index b111c2e13e..0cef38ed0d 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/digest/internal.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/digest/internal.h @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_DIGEST_INTERNAL_H #define OPENSSL_HEADER_DIGEST_INTERNAL_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/digest/md32_common.h b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/digest/md32_common.h index 8617b73ced..6cba40af4c 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/digest/md32_common.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/digest/md32_common.h @@ -1,11 +1,16 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_DIGEST_MD32_COMMON_H #define OPENSSL_HEADER_DIGEST_MD32_COMMON_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/digestsign/digestsign.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/digestsign/digestsign.cc.inc index 8e77d48e15..ced1fd8482 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/digestsign/digestsign.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/digestsign/digestsign.cc.inc @@ -1,11 +1,16 @@ -/* - * Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/asm/p256-armv8-asm.pl b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/asm/p256-armv8-asm.pl index 95dc4c8881..372fd3a7de 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/asm/p256-armv8-asm.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/asm/p256-armv8-asm.pl @@ -1,17 +1,22 @@ #! /usr/bin/env perl # Copyright 2015-2020 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # ==================================================================== # Written by Andy Polyakov for the OpenSSL -# project. The module is, however, dual licensed under OpenSSL and -# CRYPTOGAMS licenses depending on where you obtain it. For further -# details see http://www.openssl.org/~appro/cryptogams/. +# project. # ==================================================================== # # ECP_NISTZ256 module for ARMv8. diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/asm/p256-x86_64-asm.pl b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/asm/p256-x86_64-asm.pl index e3f034ef84..24efdc0b04 100755 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/asm/p256-x86_64-asm.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/asm/p256-x86_64-asm.pl @@ -3,10 +3,17 @@ # Copyright (c) 2014, Intel Corporation. All Rights Reserved. # Copyright (c) 2015 CloudFlare, Inc. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # # Originally written by Shay Gueron (1, 2), and Vlad Krasnov (1, 3) # (1) Intel Corporation, Israel Development Center, Haifa, Israel diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/asm/p256_beeu-armv8-asm.pl b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/asm/p256_beeu-armv8-asm.pl index e259aeff38..8dfb488e7c 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/asm/p256_beeu-armv8-asm.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/asm/p256_beeu-armv8-asm.pl @@ -1,16 +1,16 @@ # Copyright Amazon.com Inc. or its affiliates. All Rights Reserved. # -# Permission to use, copy, modify, and/or distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at # -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # # # This code is based on p256_beeu-x86_64-asm.pl (which is based on BN_mod_inverse_odd). diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/asm/p256_beeu-x86_64-asm.pl b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/asm/p256_beeu-x86_64-asm.pl index 1600d4ca50..fb6a7ea4b7 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/asm/p256_beeu-x86_64-asm.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/asm/p256_beeu-x86_64-asm.pl @@ -1,16 +1,16 @@ # Copyright (c) 2018, Amazon Inc. # -# Permission to use, copy, modify, and/or distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at # -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # # Written by Nir Drucker, and Shay Gueron # AWS Cryptographic Algorithms Group diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/builtin_curves.h b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/builtin_curves.h index b5fdabcda0..bc5cbb473d 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/builtin_curves.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/builtin_curves.h @@ -1,16 +1,16 @@ -/* Copyright 2023 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2023 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // This file is generated by make_tables.go. diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/ec.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/ec.cc.inc index 8261052710..f741840db3 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/ec.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/ec.cc.inc @@ -1,12 +1,17 @@ -/* - * Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. +// Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/ec_key.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/ec_key.cc.inc index 6de67e64d7..8c402f4ec8 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/ec_key.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/ec_key.cc.inc @@ -1,12 +1,17 @@ -/* - * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. +// Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include @@ -277,12 +282,6 @@ int EC_KEY_check_fips(const EC_KEY *key) { int ret = 0; FIPS_service_indicator_lock_state(); - if (EC_KEY_is_opaque(key)) { - // Opaque keys can't be checked. - OPENSSL_PUT_ERROR(EC, EC_R_PUBLIC_KEY_VALIDATION_FAILED); - goto end; - } - if (!EC_KEY_check_key(key)) { goto end; } diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/ec_montgomery.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/ec_montgomery.cc.inc index bb8eeddd64..a5205fb298 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/ec_montgomery.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/ec_montgomery.cc.inc @@ -1,12 +1,17 @@ -/* - * Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. +// Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/felem.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/felem.cc.inc index f0372354bf..567856fe1b 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/felem.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/felem.cc.inc @@ -1,16 +1,16 @@ -/* Copyright 2018 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2018 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/internal.h b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/internal.h index 5c37605506..4599c3ca76 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/internal.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/internal.h @@ -1,12 +1,17 @@ -/* - * Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. +// Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_EC_INTERNAL_H #define OPENSSL_HEADER_EC_INTERNAL_H @@ -73,6 +78,11 @@ OPENSSL_EXPORT int ec_scalar_from_bytes(const EC_GROUP *group, EC_SCALAR *out, void ec_scalar_reduce(const EC_GROUP *group, EC_SCALAR *out, const BN_ULONG *words, size_t num); +// ec_random_nonzero_scalar sets |out| to a uniformly selected random value from +// zero to |group->order| - 1. It returns one on success and zero on error. +int ec_random_scalar(const EC_GROUP *group, EC_SCALAR *out, + const uint8_t additional_data[32]); + // ec_random_nonzero_scalar sets |out| to a uniformly selected random value from // 1 to |group->order| - 1. It returns one on success and zero on error. int ec_random_nonzero_scalar(const EC_GROUP *group, EC_SCALAR *out, diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/make_ec_scalar_base_mult_tests.go b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/make_ec_scalar_base_mult_tests.go index 8517cdcad0..bf9936f41c 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/make_ec_scalar_base_mult_tests.go +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/make_ec_scalar_base_mult_tests.go @@ -1,16 +1,16 @@ // Copyright 2018 The BoringSSL Authors // -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at // -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. //go:build ignore diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/make_p256-nistz-tests.go b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/make_p256-nistz-tests.go index 659a7f2db5..75b149f4df 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/make_p256-nistz-tests.go +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/make_p256-nistz-tests.go @@ -1,16 +1,16 @@ // Copyright 2018 The BoringSSL Authors // -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at // -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. //go:build ignore diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/make_tables.go b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/make_tables.go index 4491664e2d..323bf4df8b 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/make_tables.go +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/make_tables.go @@ -1,16 +1,16 @@ // Copyright 2020 The BoringSSL Authors // -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at // -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. //go:build ignore @@ -51,19 +51,19 @@ func writeBuiltinCurves(path string) error { defer f.Close() w := &columnWriter{w: f} - const fileHeader = `/* Copyright 2023 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ + const fileHeader = `// Copyright 2023 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // This file is generated by make_tables.go. ` @@ -172,15 +172,20 @@ func writeP256NistzTable(path string) error { defer f.Close() w := &columnWriter{w: f} - const fileHeader = `/* - * Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2015, Intel Inc. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ + const fileHeader = `// Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. +// Copyright (c) 2015, Intel Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // This is the precomputed constant time access table for the code in // p256-nistz.c, for the default generator. The table consists of 37 @@ -224,19 +229,19 @@ func writeP256Table(path string) error { defer f.Close() w := &columnWriter{w: f} - const fileHeader = `/* Copyright 2020 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ + const fileHeader = `// Copyright 2020 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // This file is generated by make_tables.go. diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/oct.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/oct.cc.inc index b73cee4235..15c3a2f948 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/oct.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/oct.cc.inc @@ -1,12 +1,17 @@ -/* - * Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved. +// Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/p224-64.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/p224-64.cc.inc index b87cb8f565..f36929fefb 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/p224-64.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/p224-64.cc.inc @@ -1,16 +1,16 @@ -/* Copyright 2015 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2015 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // A 64-bit implementation of the NIST P-224 elliptic curve point multiplication // diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/p256-nistz-table.h b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/p256-nistz-table.h index bfe977fadc..89739db447 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/p256-nistz-table.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/p256-nistz-table.h @@ -1,12 +1,17 @@ -/* - * Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2015, Intel Inc. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. +// Copyright (c) 2015, Intel Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // This is the precomputed constant time access table for the code in // p256-nistz.c, for the default generator. The table consists of 37 diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/p256-nistz.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/p256-nistz.cc.inc index b6a3f9a844..e640712a63 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/p256-nistz.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/p256-nistz.cc.inc @@ -1,20 +1,25 @@ -/* - * Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2014, Intel Corporation. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - * - * Originally written by Shay Gueron (1, 2), and Vlad Krasnov (1) - * (1) Intel Corporation, Israel Development Center, Haifa, Israel - * (2) University of Haifa, Israel - * - * Reference: - * S.Gueron and V.Krasnov, "Fast Prime Field Elliptic Curve Cryptography with - * 256 Bit Primes" - */ +// Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. +// Copyright (c) 2014, Intel Corporation. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Originally written by Shay Gueron (1, 2), and Vlad Krasnov (1) +// (1) Intel Corporation, Israel Development Center, Haifa, Israel +// (2) University of Haifa, Israel +// +// Reference: +// S.Gueron and V.Krasnov, "Fast Prime Field Elliptic Curve Cryptography with +// 256 Bit Primes" #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/p256-nistz.h b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/p256-nistz.h index f676bb3976..be6b5ec3ae 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/p256-nistz.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/p256-nistz.h @@ -1,20 +1,25 @@ -/* - * Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2014, Intel Corporation. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - * - * Originally written by Shay Gueron (1, 2), and Vlad Krasnov (1) - * (1) Intel Corporation, Israel Development Center, Haifa, Israel - * (2) University of Haifa, Israel - * - * Reference: - * S.Gueron and V.Krasnov, "Fast Prime Field Elliptic Curve Cryptography with - * 256 Bit Primes" - */ +// Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. +// Copyright (c) 2014, Intel Corporation. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Originally written by Shay Gueron (1, 2), and Vlad Krasnov (1) +// (1) Intel Corporation, Israel Development Center, Haifa, Israel +// (2) University of Haifa, Israel +// +// Reference: +// S.Gueron and V.Krasnov, "Fast Prime Field Elliptic Curve Cryptography with +// 256 Bit Primes" #ifndef OPENSSL_HEADER_EC_P256_X86_64_H #define OPENSSL_HEADER_EC_P256_X86_64_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/p256.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/p256.cc.inc index 8e463498c1..6a5f2d3a5a 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/p256.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/p256.cc.inc @@ -1,16 +1,16 @@ -/* Copyright 2020 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2020 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // An implementation of the NIST P-256 elliptic curve point multiplication. // 256-bit Montgomery form for 64 and 32-bit. Field operations are generated by diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/p256_table.h b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/p256_table.h index 04f8adb922..e16eabaa73 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/p256_table.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/p256_table.h @@ -1,16 +1,16 @@ -/* Copyright 2020 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2020 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // This file is generated by make_tables.go. diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/scalar.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/scalar.cc.inc index 4cf6d1fe5d..7ebb488c94 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/scalar.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/scalar.cc.inc @@ -1,24 +1,24 @@ -/* Copyright 2018 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2018 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include #include -#include "internal.h" -#include "../bn/internal.h" #include "../../internal.h" +#include "../bn/internal.h" +#include "internal.h" int ec_bignum_to_scalar(const EC_GROUP *group, EC_SCALAR *out, @@ -49,6 +49,12 @@ int ec_scalar_is_zero(const EC_GROUP *group, const EC_SCALAR *a) { return mask == 0; } +int ec_random_scalar(const EC_GROUP *group, EC_SCALAR *out, + const uint8_t additional_data[32]) { + return bn_rand_range_words(out->words, 0, group->order.N.d, + group->order.N.width, additional_data); +} + int ec_random_nonzero_scalar(const EC_GROUP *group, EC_SCALAR *out, const uint8_t additional_data[32]) { return bn_rand_range_words(out->words, 1, group->order.N.d, diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/simple.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/simple.cc.inc index fc7caf908c..f053ea1a1f 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/simple.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/simple.cc.inc @@ -1,12 +1,17 @@ -/* - * Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. +// Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/simple_mul.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/simple_mul.cc.inc index d179dcbc1c..36288a7013 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/simple_mul.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/simple_mul.cc.inc @@ -1,16 +1,16 @@ -/* Copyright 2018 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2018 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/util.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/util.cc.inc index 5fe240b37e..89feb24ded 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/util.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/util.cc.inc @@ -1,16 +1,16 @@ -/* Copyright 2015 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2015 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/wnaf.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/wnaf.cc.inc index b84cee2099..faa6a3acf3 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/wnaf.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ec/wnaf.cc.inc @@ -1,12 +1,17 @@ -/* - * Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. +// Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ecdh/ecdh.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ecdh/ecdh.cc.inc index af61d7efab..3c3832ce93 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ecdh/ecdh.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ecdh/ecdh.cc.inc @@ -1,12 +1,17 @@ -/* - * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. +// Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ecdsa/ecdsa.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ecdsa/ecdsa.cc.inc index 58b848b60e..24b8f49008 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ecdsa/ecdsa.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ecdsa/ecdsa.cc.inc @@ -1,11 +1,16 @@ -/* - * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ecdsa/internal.h b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ecdsa/internal.h index 6a2a25dc22..232d3e8787 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ecdsa/internal.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/ecdsa/internal.h @@ -1,16 +1,16 @@ -/* Copyright 2021 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2021 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_CRYPTO_FIPSMODULE_ECDSA_INTERNAL_H #define OPENSSL_HEADER_CRYPTO_FIPSMODULE_ECDSA_INTERNAL_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/fips_shared_support.cc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/fips_shared_support.cc index 0f396e9247..f1f9d99f22 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/fips_shared_support.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/fips_shared_support.cc @@ -1,16 +1,16 @@ -/* Copyright 2019 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2019 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/hkdf/hkdf.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/hkdf/hkdf.cc.inc index 2dc7a44841..ee04818d63 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/hkdf/hkdf.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/hkdf/hkdf.cc.inc @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/hmac/hmac.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/hmac/hmac.cc.inc index af87eaeff3..fb0805d24d 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/hmac/hmac.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/hmac/hmac.cc.inc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/keccak/internal.h b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/keccak/internal.h index cfae40304d..f5a15f5e6a 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/keccak/internal.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/keccak/internal.h @@ -1,16 +1,16 @@ -/* Copyright 2023 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2023 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_CRYPTO_KECCAK_INTERNAL_H #define OPENSSL_HEADER_CRYPTO_KECCAK_INTERNAL_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/keccak/keccak.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/keccak/keccak.cc.inc index 2d8567f46f..0bb8f08f87 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/keccak/keccak.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/keccak/keccak.cc.inc @@ -1,16 +1,16 @@ -/* Copyright 2023 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2023 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/mldsa/mldsa.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/mldsa/mldsa.cc.inc index 2495a3eb2b..0024010f7d 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/mldsa/mldsa.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/mldsa/mldsa.cc.inc @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/mlkem/mlkem.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/mlkem/mlkem.cc.inc index b74d9a3203..c543f3ce95 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/mlkem/mlkem.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/mlkem/mlkem.cc.inc @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/internal.h b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/internal.h deleted file mode 100644 index 7a6e9aa3c6..0000000000 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/modes/internal.h +++ /dev/null @@ -1,361 +0,0 @@ -/* - * Copyright 2010-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef OPENSSL_HEADER_MODES_INTERNAL_H -#define OPENSSL_HEADER_MODES_INTERNAL_H - -#include - -#include - -#include -#include -#include - -#include "../../internal.h" -#include "../aes/internal.h" - -#if defined(__cplusplus) -extern "C" { -#endif - - -inline void CRYPTO_xor16(uint8_t out[16], const uint8_t a[16], - const uint8_t b[16]) { - // TODO(davidben): Ideally we'd leave this to the compiler, which could use - // vector registers, etc. But the compiler doesn't know that |in| and |out| - // cannot partially alias. |restrict| is slightly two strict (we allow exact - // aliasing), but perhaps in-place could be a separate function? - static_assert(16 % sizeof(crypto_word_t) == 0, - "block cannot be evenly divided into words"); - for (size_t i = 0; i < 16; i += sizeof(crypto_word_t)) { - CRYPTO_store_word_le( - out + i, CRYPTO_load_word_le(a + i) ^ CRYPTO_load_word_le(b + i)); - } -} - - -// CTR. - -// CRYPTO_ctr128_encrypt_ctr32 encrypts (or decrypts, it's the same in CTR mode) -// |len| bytes from |in| to |out| using |block| in counter mode. There's no -// requirement that |len| be a multiple of any value and any partial blocks are -// stored in |ecount_buf| and |*num|, which must be zeroed before the initial -// call. The counter is a 128-bit, big-endian value in |ivec| and is -// incremented by this function. If the counter overflows, it wraps around. -// |ctr| must be a function that performs CTR mode but only deals with the lower -// 32 bits of the counter. -void CRYPTO_ctr128_encrypt_ctr32(const uint8_t *in, uint8_t *out, size_t len, - const AES_KEY *key, uint8_t ivec[16], - uint8_t ecount_buf[16], unsigned *num, - ctr128_f ctr); - - -// GCM. -// -// This API differs from the upstream API slightly. The |GCM128_CONTEXT| does -// not have a |key| pointer that points to the key as upstream's version does. -// Instead, every function takes a |key| parameter. This way |GCM128_CONTEXT| -// can be safely copied. Additionally, |gcm_key| is split into a separate -// struct. - -// gcm_impl_t specifies an assembly implementation of AES-GCM. -enum gcm_impl_t { - gcm_separate = 0, // No combined AES-GCM, but may have AES-CTR and GHASH. - gcm_x86_aesni, - gcm_x86_vaes_avx2, - gcm_x86_vaes_avx10_512, - gcm_arm64_aes, -}; - -typedef struct { uint64_t hi,lo; } u128; - -// gmult_func multiplies |Xi| by the GCM key and writes the result back to -// |Xi|. -typedef void (*gmult_func)(uint8_t Xi[16], const u128 Htable[16]); - -// ghash_func repeatedly multiplies |Xi| by the GCM key and adds in blocks from -// |inp|. The result is written back to |Xi| and the |len| argument must be a -// multiple of 16. -typedef void (*ghash_func)(uint8_t Xi[16], const u128 Htable[16], - const uint8_t *inp, size_t len); - -typedef struct gcm128_key_st { - u128 Htable[16]; - gmult_func gmult; - ghash_func ghash; - AES_KEY aes; - - ctr128_f ctr; - block128_f block; - enum gcm_impl_t impl; -} GCM128_KEY; - -// GCM128_CONTEXT contains state for a single GCM operation. The structure -// should be zero-initialized before use. -typedef struct { - // The following 5 names follow names in GCM specification - uint8_t Yi[16]; - uint8_t EKi[16]; - uint8_t EK0[16]; - struct { - uint64_t aad; - uint64_t msg; - } len; - uint8_t Xi[16]; - unsigned mres, ares; -} GCM128_CONTEXT; - -#if defined(OPENSSL_X86) || defined(OPENSSL_X86_64) -// crypto_gcm_clmul_enabled returns one if the CLMUL implementation of GCM is -// used. -int crypto_gcm_clmul_enabled(void); -#endif - -// CRYPTO_ghash_init writes a precomputed table of powers of |gcm_key| to -// |out_table| and sets |*out_mult| and |*out_hash| to (potentially hardware -// accelerated) functions for performing operations in the GHASH field. -void CRYPTO_ghash_init(gmult_func *out_mult, ghash_func *out_hash, - u128 out_table[16], const uint8_t gcm_key[16]); - -// CRYPTO_gcm128_init_aes_key initialises |gcm_key| to with AES key |key|. -void CRYPTO_gcm128_init_aes_key(GCM128_KEY *gcm_key, const uint8_t *key, - size_t key_bytes); - -// CRYPTO_gcm128_init_ctx initializes |ctx| to encrypt with |key| and |iv|. -void CRYPTO_gcm128_init_ctx(const GCM128_KEY *key, GCM128_CONTEXT *ctx, - const uint8_t *iv, size_t iv_len); - -// CRYPTO_gcm128_aad adds to the authenticated data for an instance of GCM. -// This must be called before and data is encrypted. |key| must be the same -// value that was passed to |CRYPTO_gcm128_init_ctx|. It returns one on success -// and zero otherwise. -int CRYPTO_gcm128_aad(const GCM128_KEY *key, GCM128_CONTEXT *ctx, - const uint8_t *aad, size_t aad_len); - -// CRYPTO_gcm128_encrypt encrypts |len| bytes from |in| to |out|. |key| must be -// the same value that was passed to |CRYPTO_gcm128_init_ctx|. It returns one on -// success and zero otherwise. -int CRYPTO_gcm128_encrypt(const GCM128_KEY *key, GCM128_CONTEXT *ctx, - const uint8_t *in, uint8_t *out, size_t len); - -// CRYPTO_gcm128_decrypt decrypts |len| bytes from |in| to |out|. |key| must be -// the same value that was passed to |CRYPTO_gcm128_init_ctx|. It returns one on -// success and zero otherwise. -int CRYPTO_gcm128_decrypt(const GCM128_KEY *key, GCM128_CONTEXT *ctx, - const uint8_t *in, uint8_t *out, size_t len); - -// CRYPTO_gcm128_finish calculates the authenticator and compares it against -// |len| bytes of |tag|. |key| must be the same value that was passed to -// |CRYPTO_gcm128_init_ctx|. It returns one on success and zero otherwise. -int CRYPTO_gcm128_finish(const GCM128_KEY *key, GCM128_CONTEXT *ctx, - const uint8_t *tag, size_t len); - -// CRYPTO_gcm128_tag calculates the authenticator and copies it into |tag|. -// The minimum of |len| and 16 bytes are copied into |tag|. |key| must be the -// same value that was passed to |CRYPTO_gcm128_init_ctx|. -void CRYPTO_gcm128_tag(const GCM128_KEY *key, GCM128_CONTEXT *ctx, uint8_t *tag, - size_t len); - - -// GCM assembly. - -void gcm_init_nohw(u128 Htable[16], const uint64_t H[2]); -void gcm_gmult_nohw(uint8_t Xi[16], const u128 Htable[16]); -void gcm_ghash_nohw(uint8_t Xi[16], const u128 Htable[16], const uint8_t *inp, - size_t len); - -#if !defined(OPENSSL_NO_ASM) - -#if defined(OPENSSL_X86) || defined(OPENSSL_X86_64) -#define GCM_FUNCREF -void gcm_init_clmul(u128 Htable[16], const uint64_t Xi[2]); -void gcm_gmult_clmul(uint8_t Xi[16], const u128 Htable[16]); -void gcm_ghash_clmul(uint8_t Xi[16], const u128 Htable[16], const uint8_t *inp, - size_t len); - -void gcm_init_ssse3(u128 Htable[16], const uint64_t Xi[2]); -void gcm_gmult_ssse3(uint8_t Xi[16], const u128 Htable[16]); -void gcm_ghash_ssse3(uint8_t Xi[16], const u128 Htable[16], const uint8_t *in, - size_t len); - -#if defined(OPENSSL_X86_64) -#define GHASH_ASM_X86_64 -void gcm_init_avx(u128 Htable[16], const uint64_t Xi[2]); -void gcm_gmult_avx(uint8_t Xi[16], const u128 Htable[16]); -void gcm_ghash_avx(uint8_t Xi[16], const u128 Htable[16], const uint8_t *in, - size_t len); - -#define HW_GCM -size_t aesni_gcm_encrypt(const uint8_t *in, uint8_t *out, size_t len, - const AES_KEY *key, uint8_t ivec[16], - const u128 Htable[16], uint8_t Xi[16]); -size_t aesni_gcm_decrypt(const uint8_t *in, uint8_t *out, size_t len, - const AES_KEY *key, uint8_t ivec[16], - const u128 Htable[16], uint8_t Xi[16]); - -void gcm_init_vpclmulqdq_avx2(u128 Htable[16], const uint64_t H[2]); -void gcm_gmult_vpclmulqdq_avx2(uint8_t Xi[16], const u128 Htable[16]); -void gcm_ghash_vpclmulqdq_avx2(uint8_t Xi[16], const u128 Htable[16], - const uint8_t *in, size_t len); -void aes_gcm_enc_update_vaes_avx2(const uint8_t *in, uint8_t *out, size_t len, - const AES_KEY *key, const uint8_t ivec[16], - const u128 Htable[16], uint8_t Xi[16]); -void aes_gcm_dec_update_vaes_avx2(const uint8_t *in, uint8_t *out, size_t len, - const AES_KEY *key, const uint8_t ivec[16], - const u128 Htable[16], uint8_t Xi[16]); - -void gcm_init_vpclmulqdq_avx10_512(u128 Htable[16], const uint64_t H[2]); -void gcm_gmult_vpclmulqdq_avx10(uint8_t Xi[16], const u128 Htable[16]); -void gcm_ghash_vpclmulqdq_avx10_512(uint8_t Xi[16], const u128 Htable[16], - const uint8_t *in, size_t len); -void aes_gcm_enc_update_vaes_avx10_512(const uint8_t *in, uint8_t *out, - size_t len, const AES_KEY *key, - const uint8_t ivec[16], - const u128 Htable[16], uint8_t Xi[16]); -void aes_gcm_dec_update_vaes_avx10_512(const uint8_t *in, uint8_t *out, - size_t len, const AES_KEY *key, - const uint8_t ivec[16], - const u128 Htable[16], uint8_t Xi[16]); - -#endif // OPENSSL_X86_64 - -#if defined(OPENSSL_X86) -#define GHASH_ASM_X86 -#endif // OPENSSL_X86 - -#elif defined(OPENSSL_ARM) || defined(OPENSSL_AARCH64) - -#define GHASH_ASM_ARM -#define GCM_FUNCREF - -inline int gcm_pmull_capable(void) { return CRYPTO_is_ARMv8_PMULL_capable(); } - -void gcm_init_v8(u128 Htable[16], const uint64_t H[2]); -void gcm_gmult_v8(uint8_t Xi[16], const u128 Htable[16]); -void gcm_ghash_v8(uint8_t Xi[16], const u128 Htable[16], const uint8_t *inp, - size_t len); - -inline int gcm_neon_capable(void) { return CRYPTO_is_NEON_capable(); } - -void gcm_init_neon(u128 Htable[16], const uint64_t H[2]); -void gcm_gmult_neon(uint8_t Xi[16], const u128 Htable[16]); -void gcm_ghash_neon(uint8_t Xi[16], const u128 Htable[16], const uint8_t *inp, - size_t len); - -#if defined(OPENSSL_AARCH64) -#define HW_GCM -// These functions are defined in aesv8-gcm-armv8.pl. -void aes_gcm_enc_kernel(const uint8_t *in, uint64_t in_bits, void *out, - void *Xi, uint8_t *ivec, const AES_KEY *key, - const u128 Htable[16]); -void aes_gcm_dec_kernel(const uint8_t *in, uint64_t in_bits, void *out, - void *Xi, uint8_t *ivec, const AES_KEY *key, - const u128 Htable[16]); -#endif - -#endif -#endif // OPENSSL_NO_ASM - - -// CBC. - -// cbc128_f is the type of a function that performs CBC-mode encryption. -typedef void (*cbc128_f)(const uint8_t *in, uint8_t *out, size_t len, - const AES_KEY *key, uint8_t ivec[16], int enc); - -// CRYPTO_cbc128_encrypt encrypts |len| bytes from |in| to |out| using the -// given IV and block cipher in CBC mode. The input need not be a multiple of -// 128 bits long, but the output will round up to the nearest 128 bit multiple, -// zero padding the input if needed. The IV will be updated on return. -void CRYPTO_cbc128_encrypt(const uint8_t *in, uint8_t *out, size_t len, - const AES_KEY *key, uint8_t ivec[16], - block128_f block); - -// CRYPTO_cbc128_decrypt decrypts |len| bytes from |in| to |out| using the -// given IV and block cipher in CBC mode. If |len| is not a multiple of 128 -// bits then only that many bytes will be written, but a multiple of 128 bits -// is always read from |in|. The IV will be updated on return. -void CRYPTO_cbc128_decrypt(const uint8_t *in, uint8_t *out, size_t len, - const AES_KEY *key, uint8_t ivec[16], - block128_f block); - - -// OFB. - -// CRYPTO_ofb128_encrypt encrypts (or decrypts, it's the same with OFB mode) -// |len| bytes from |in| to |out| using |block| in OFB mode. There's no -// requirement that |len| be a multiple of any value and any partial blocks are -// stored in |ivec| and |*num|, the latter must be zero before the initial -// call. -void CRYPTO_ofb128_encrypt(const uint8_t *in, uint8_t *out, size_t len, - const AES_KEY *key, uint8_t ivec[16], unsigned *num, - block128_f block); - - -// CFB. - -// CRYPTO_cfb128_encrypt encrypts (or decrypts, if |enc| is zero) |len| bytes -// from |in| to |out| using |block| in CFB mode. There's no requirement that -// |len| be a multiple of any value and any partial blocks are stored in |ivec| -// and |*num|, the latter must be zero before the initial call. -void CRYPTO_cfb128_encrypt(const uint8_t *in, uint8_t *out, size_t len, - const AES_KEY *key, uint8_t ivec[16], unsigned *num, - int enc, block128_f block); - -// CRYPTO_cfb128_8_encrypt encrypts (or decrypts, if |enc| is zero) |len| bytes -// from |in| to |out| using |block| in CFB-8 mode. Prior to the first call -// |num| should be set to zero. -void CRYPTO_cfb128_8_encrypt(const uint8_t *in, uint8_t *out, size_t len, - const AES_KEY *key, uint8_t ivec[16], - unsigned *num, int enc, block128_f block); - -// CRYPTO_cfb128_1_encrypt encrypts (or decrypts, if |enc| is zero) |len| bytes -// from |in| to |out| using |block| in CFB-1 mode. Prior to the first call -// |num| should be set to zero. -void CRYPTO_cfb128_1_encrypt(const uint8_t *in, uint8_t *out, size_t bits, - const AES_KEY *key, uint8_t ivec[16], - unsigned *num, int enc, block128_f block); - -size_t CRYPTO_cts128_encrypt_block(const uint8_t *in, uint8_t *out, size_t len, - const AES_KEY *key, uint8_t ivec[16], - block128_f block); - - -// POLYVAL. -// -// POLYVAL is a polynomial authenticator that operates over a field very -// similar to the one that GHASH uses. See -// https://www.rfc-editor.org/rfc/rfc8452.html#section-3. - -struct polyval_ctx { - uint8_t S[16]; - u128 Htable[16]; - gmult_func gmult; - ghash_func ghash; -}; - -// CRYPTO_POLYVAL_init initialises |ctx| using |key|. -void CRYPTO_POLYVAL_init(struct polyval_ctx *ctx, const uint8_t key[16]); - -// CRYPTO_POLYVAL_update_blocks updates the accumulator in |ctx| given the -// blocks from |in|. Only a whole number of blocks can be processed so |in_len| -// must be a multiple of 16. -void CRYPTO_POLYVAL_update_blocks(struct polyval_ctx *ctx, const uint8_t *in, - size_t in_len); - -// CRYPTO_POLYVAL_finish writes the accumulator from |ctx| to |out|. -void CRYPTO_POLYVAL_finish(const struct polyval_ctx *ctx, uint8_t out[16]); - - -#if defined(__cplusplus) -} // extern C -#endif - -#endif // OPENSSL_HEADER_MODES_INTERNAL_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/rand/asm/rdrand-x86_64.pl b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/rand/asm/rdrand-x86_64.pl index dde3e4695f..be16c76230 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/rand/asm/rdrand-x86_64.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/rand/asm/rdrand-x86_64.pl @@ -2,17 +2,17 @@ # Copyright 2015 The BoringSSL Authors # -# Permission to use, copy, modify, and/or distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at # -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. use strict; diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/rand/ctrdrbg.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/rand/ctrdrbg.cc.inc index 0f10a21926..e9f471286c 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/rand/ctrdrbg.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/rand/ctrdrbg.cc.inc @@ -1,16 +1,16 @@ -/* Copyright 2017 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2017 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/rand/internal.h b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/rand/internal.h index ce2f63c6ad..7ffe617a49 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/rand/internal.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/rand/internal.h @@ -1,16 +1,16 @@ -/* Copyright 2015 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2015 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_CRYPTO_RAND_INTERNAL_H #define OPENSSL_HEADER_CRYPTO_RAND_INTERNAL_H @@ -19,7 +19,7 @@ #include #include "../../bcm_support.h" -#include "../modes/internal.h" +#include "../aes/internal.h" #if defined(__cplusplus) extern "C" { diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/rand/rand.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/rand/rand.cc.inc index cd6a091776..0200fa5a4f 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/rand/rand.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/rand/rand.cc.inc @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/rsa/blinding.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/rsa/blinding.cc.inc index 12ae91e898..b3bf4dab58 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/rsa/blinding.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/rsa/blinding.cc.inc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/rsa/internal.h b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/rsa/internal.h index f424023f5f..66361049a8 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/rsa/internal.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/rsa/internal.h @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_RSA_INTERNAL_H #define OPENSSL_HEADER_RSA_INTERNAL_H @@ -82,7 +87,6 @@ struct rsa_st { const RSA_METHOD *RSA_default_method(void); -size_t rsa_default_size(const RSA *rsa); int rsa_default_sign_raw(RSA *rsa, size_t *out_len, uint8_t *out, size_t max_out, const uint8_t *in, size_t in_len, int padding); diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/rsa/padding.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/rsa/padding.cc.inc index b1bb584a71..b6713821e2 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/rsa/padding.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/rsa/padding.cc.inc @@ -1,11 +1,16 @@ -/* - * Copyright 2005-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2005-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/rsa/rsa.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/rsa/rsa.cc.inc index 5e26e43cd2..0240e8a740 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/rsa/rsa.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/rsa/rsa.cc.inc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include @@ -374,14 +379,7 @@ int RSA_sign_raw(RSA *rsa, size_t *out_len, uint8_t *out, size_t max_out, padding); } -unsigned RSA_size(const RSA *rsa) { - size_t ret = rsa->meth->size ? rsa->meth->size(rsa) : rsa_default_size(rsa); - // RSA modulus sizes are bounded by |BIGNUM|, which must fit in |unsigned|. - // - // TODO(https://crbug.com/boringssl/516): Should we make this return |size_t|? - assert(ret < UINT_MAX); - return (unsigned)ret; -} +unsigned RSA_size(const RSA *rsa) { return BN_num_bytes(rsa->n); } int RSA_is_opaque(const RSA *rsa) { return rsa->meth && (rsa->meth->flags & RSA_FLAG_OPAQUE); @@ -738,11 +736,6 @@ int RSA_check_key(const RSA *key) { // https://crbug.com/boringssl/316. As a result, we inconsistently check RSA // invariants. We should fix this and integrate that logic. - if (RSA_is_opaque(key)) { - // Opaque keys can't be checked. - return 1; - } - if (!rsa_check_public_key(key)) { return 0; } @@ -893,12 +886,6 @@ DEFINE_LOCAL_DATA(BIGNUM, g_small_factors) { } int RSA_check_fips(RSA *key) { - if (RSA_is_opaque(key)) { - // Opaque keys can't be checked. - OPENSSL_PUT_ERROR(RSA, RSA_R_PUBLIC_KEY_VALIDATION_FAILED); - return 0; - } - if (!RSA_check_key(key)) { return 0; } @@ -919,8 +906,11 @@ int RSA_check_fips(RSA *key) { // match. This is only a plausibility test and we expect the value to be // composite, so too few iterations will cause us to reject the key, not use // an implausible one. + // + // |key->e| may be nullptr if created with |RSA_new_private_key_no_e|. enum bn_primality_result_t primality_result; - if (BN_num_bits(key->e) <= 16 || // + if (key->e == nullptr || // + BN_num_bits(key->e) <= 16 || // BN_num_bits(key->e) > 256 || // !BN_is_odd(key->n) || // !BN_is_odd(key->e) || @@ -991,5 +981,3 @@ int rsa_private_transform(RSA *rsa, uint8_t *out, const uint8_t *in, int RSA_flags(const RSA *rsa) { return rsa->flags; } int RSA_test_flags(const RSA *rsa, int flags) { return rsa->flags & flags; } - -int RSA_blinding_on(RSA *rsa, BN_CTX *ctx) { return 1; } diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/rsa/rsa_impl.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/rsa/rsa_impl.cc.inc index 0b9729d70e..79e2789c33 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/rsa/rsa_impl.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/rsa/rsa_impl.cc.inc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include @@ -170,7 +175,6 @@ static int freeze_private_key(RSA *rsa, BN_CTX *ctx) { goto err; } } - const BIGNUM *p_fixed = &rsa->mont_p->N; if (rsa->mont_q == NULL) { rsa->mont_q = BN_MONT_CTX_new_consttime(rsa->q, ctx); @@ -178,22 +182,12 @@ static int freeze_private_key(RSA *rsa, BN_CTX *ctx) { goto err; } } - const BIGNUM *q_fixed = &rsa->mont_q->N; - - if (rsa->dmp1 != NULL && rsa->dmq1 != NULL) { - // Key generation relies on this function to compute |iqmp|. - if (rsa->iqmp == NULL) { - BIGNUM *iqmp = BN_new(); - if (iqmp == NULL || !bn_mod_inverse_secret_prime(iqmp, rsa->q, rsa->p, - ctx, rsa->mont_p)) { - BN_free(iqmp); - goto err; - } - rsa->iqmp = iqmp; - } + if (rsa->dmp1 != NULL && rsa->dmq1 != NULL && rsa->iqmp != NULL) { // CRT components are only publicly bounded by their corresponding // moduli's bit lengths. + const BIGNUM *p_fixed = &rsa->mont_p->N; + const BIGNUM *q_fixed = &rsa->mont_q->N; if (!ensure_fixed_copy(&rsa->dmp1_fixed, rsa->dmp1, p_fixed->width) || !ensure_fixed_copy(&rsa->dmq1_fixed, rsa->dmq1, q_fixed->width)) { goto err; @@ -252,8 +246,6 @@ void rsa_invalidate_key(RSA *rsa) { rsa->blinding_fork_generation = 0; } -size_t rsa_default_size(const RSA *rsa) { return BN_num_bytes(rsa->n); } - // MAX_BLINDINGS_PER_RSA defines the maximum number of cached BN_BLINDINGs per // RSA*. Then this limit is exceeded, BN_BLINDING objects will be created and // destroyed as needed. @@ -435,7 +427,7 @@ err: } -static int mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx); +static int rsa_mod_exp_crt(BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx); int rsa_verify_raw_no_self_test(RSA *rsa, size_t *out_len, uint8_t *out, size_t max_out, const uint8_t *in, @@ -620,7 +612,7 @@ int rsa_default_private_transform(RSA *rsa, uint8_t *out, const uint8_t *in, // but it is true for keys generated by us and all common implementations. bn_less_than_montgomery_R(rsa->q, rsa->mont_p) && bn_less_than_montgomery_R(rsa->p, rsa->mont_q)) { - if (!mod_exp(result, f, rsa, ctx)) { + if (!rsa_mod_exp_crt(result, f, rsa, ctx)) { goto err; } } else if (!BN_mod_exp_mont_consttime(result, f, rsa->d_fixed, rsa->n, ctx, @@ -709,7 +701,7 @@ static int mod_montgomery(BIGNUM *r, const BIGNUM *I, const BIGNUM *p, return 1; } -static int mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx) { +static int rsa_mod_exp_crt(BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx) { assert(ctx != NULL); assert(rsa->n != NULL); @@ -732,10 +724,6 @@ static int mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx) { goto err; } - if (!freeze_private_key(rsa, ctx)) { - goto err; - } - // Use the minimal-width versions of |n|, |p|, and |q|. Either works, but if // someone gives us non-minimal values, these will be slightly more efficient // on the non-Montgomery operations. @@ -1060,10 +1048,14 @@ static int rsa_generate_key_impl(RSA *rsa, int bits, const BIGNUM *e_value, } // We need the RSA components non-NULL. - if (!ensure_bignum(&rsa->n) || !ensure_bignum(&rsa->d) || - !ensure_bignum(&rsa->e) || !ensure_bignum(&rsa->p) || - !ensure_bignum(&rsa->q) || !ensure_bignum(&rsa->dmp1) || - !ensure_bignum(&rsa->dmq1)) { + if (!ensure_bignum(&rsa->n) || // + !ensure_bignum(&rsa->d) || // + !ensure_bignum(&rsa->e) || // + !ensure_bignum(&rsa->p) || // + !ensure_bignum(&rsa->q) || // + !ensure_bignum(&rsa->dmp1) || // + !ensure_bignum(&rsa->dmq1) || // + !ensure_bignum(&rsa->iqmp)) { goto bn_err; } @@ -1149,6 +1141,14 @@ static int rsa_generate_key_impl(RSA *rsa, int bits, const BIGNUM *e_value, // |rsa->n| is computed from the private key, but is public. bn_declassify(rsa->n); + // Calculate q^-1 mod p. + rsa->mont_p = BN_MONT_CTX_new_consttime(rsa->p, ctx); + if (rsa->mont_p == NULL || // + !bn_mod_inverse_secret_prime(rsa->iqmp, rsa->q, rsa->p, ctx, + rsa->mont_p)) { + goto bn_err; + } + // Sanity-check that |rsa->n| has the specified size. This is implied by // |generate_prime|'s bounds. if (BN_num_bits(rsa->n) != (unsigned)bits) { @@ -1156,16 +1156,11 @@ static int rsa_generate_key_impl(RSA *rsa, int bits, const BIGNUM *e_value, goto err; } - // Call |freeze_private_key| to compute the inverse of q mod p, by way of - // |rsa->mont_p|. - if (!freeze_private_key(rsa, ctx)) { - goto bn_err; - } - // The key generation process is complex and thus error-prone. It could be // disastrous to generate and then use a bad key so double-check that the key - // makes sense. - if (!RSA_check_key(rsa)) { + // makes sense. Also, while |rsa| is mutable, fill in the cached components. + if (!RSA_check_key(rsa) || + !freeze_private_key(rsa, ctx)) { OPENSSL_PUT_ERROR(RSA, RSA_R_INTERNAL_ERROR); goto err; } diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/self_check/fips.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/self_check/fips.cc.inc index 884ee5720b..d51983c7a3 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/self_check/fips.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/self_check/fips.cc.inc @@ -1,16 +1,16 @@ -/* Copyright 2017 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2017 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/self_check/self_check.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/self_check/self_check.cc.inc index 5efba013ec..15a68b5850 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/self_check/self_check.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/self_check/self_check.cc.inc @@ -1,16 +1,16 @@ -/* Copyright 2017 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2017 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/service_indicator/internal.h b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/service_indicator/internal.h index b86504b222..182aefc910 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/service_indicator/internal.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/service_indicator/internal.h @@ -1,16 +1,16 @@ -/* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_SERVICE_INDICATOR_INTERNAL_H #define OPENSSL_HEADER_SERVICE_INDICATOR_INTERNAL_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/service_indicator/service_indicator.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/service_indicator/service_indicator.cc.inc index 6620c05b7e..c83b6bd6ee 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/service_indicator/service_indicator.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/service_indicator/service_indicator.cc.inc @@ -1,16 +1,16 @@ -/* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/asm/sha1-586.pl b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/asm/sha1-586.pl index 4be06e7cd2..0dbd3c3428 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/asm/sha1-586.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/asm/sha1-586.pl @@ -1,17 +1,22 @@ #! /usr/bin/env perl # Copyright 1998-2016 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # ==================================================================== # [Re]written by Andy Polyakov for the OpenSSL -# project. The module is, however, dual licensed under OpenSSL and -# CRYPTOGAMS licenses depending on where you obtain it. For further -# details see http://www.openssl.org/~appro/cryptogams/. +# project. # ==================================================================== # "[Re]written" was achieved in two major overhauls. In 2004 BODY_* diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/asm/sha1-armv4-large.pl b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/asm/sha1-armv4-large.pl index 532a81b0b4..ac49b5b055 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/asm/sha1-armv4-large.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/asm/sha1-armv4-large.pl @@ -1,17 +1,22 @@ #! /usr/bin/env perl # Copyright 2007-2016 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # ==================================================================== # Written by Andy Polyakov for the OpenSSL -# project. The module is, however, dual licensed under OpenSSL and -# CRYPTOGAMS licenses depending on where you obtain it. For further -# details see http://www.openssl.org/~appro/cryptogams/. +# project. # ==================================================================== # sha1_block procedure for ARMv4. diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/asm/sha1-armv8.pl b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/asm/sha1-armv8.pl index 2eccfb7321..497321ec11 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/asm/sha1-armv8.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/asm/sha1-armv8.pl @@ -1,17 +1,22 @@ #! /usr/bin/env perl # Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # # ==================================================================== # Written by Andy Polyakov for the OpenSSL -# project. The module is, however, dual licensed under OpenSSL and -# CRYPTOGAMS licenses depending on where you obtain it. For further -# details see http://www.openssl.org/~appro/cryptogams/. +# project. # ==================================================================== # # SHA1 for ARMv8. diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/asm/sha1-x86_64.pl b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/asm/sha1-x86_64.pl index 886f5cf543..2dc24f24b6 100755 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/asm/sha1-x86_64.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/asm/sha1-x86_64.pl @@ -1,17 +1,22 @@ #! /usr/bin/env perl # Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # # ==================================================================== # Written by Andy Polyakov for the OpenSSL -# project. The module is, however, dual licensed under OpenSSL and -# CRYPTOGAMS licenses depending on where you obtain it. For further -# details see http://www.openssl.org/~appro/cryptogams/. +# project. # ==================================================================== # # sha1_block procedure for x86_64. diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/asm/sha256-586.pl b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/asm/sha256-586.pl index ad6afa29ce..bd3c4da877 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/asm/sha256-586.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/asm/sha256-586.pl @@ -1,17 +1,22 @@ #! /usr/bin/env perl # Copyright 2007-2016 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # # ==================================================================== # Written by Andy Polyakov for the OpenSSL -# project. The module is, however, dual licensed under OpenSSL and -# CRYPTOGAMS licenses depending on where you obtain it. For further -# details see http://www.openssl.org/~appro/cryptogams/. +# project. # ==================================================================== # # SHA256 block transform for x86. September 2007. diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/asm/sha256-armv4.pl b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/asm/sha256-armv4.pl index 99b8b2a79f..8e2502561b 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/asm/sha256-armv4.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/asm/sha256-armv4.pl @@ -1,19 +1,22 @@ #! /usr/bin/env perl # Copyright 2007-2016 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # ==================================================================== # Written by Andy Polyakov for the OpenSSL -# project. The module is, however, dual licensed under OpenSSL and -# CRYPTOGAMS licenses depending on where you obtain it. For further -# details see http://www.openssl.org/~appro/cryptogams/. -# -# Permission to use under GPL terms is granted. +# project. # ==================================================================== # SHA256 block procedure for ARMv4. May 2007. @@ -485,7 +488,7 @@ sha256_block_data_order_neon: @ TODO(davidben): adrl would avoid a load, but clang-assembler does not @ support it. We might be able to emulate it with a macro, but Android's @ did not work when I tried it. - @ https://android.googlesource.com/platform/ndk/+/refs/heads/master/docs/ClangMigration.md#arm + @ https://android.googlesource.com/platform/ndk/+/refs/heads/main/docs/ClangMigration.md#arm ldr $Ktbl,.LK256_shortcut_neon .LK256_add_neon: add $Ktbl,pc,$Ktbl diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/asm/sha512-586.pl b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/asm/sha512-586.pl index 7f12ec5ff4..faa9d2234d 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/asm/sha512-586.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/asm/sha512-586.pl @@ -1,17 +1,22 @@ #! /usr/bin/env perl # Copyright 2007-2016 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # # ==================================================================== # Written by Andy Polyakov for the OpenSSL -# project. The module is, however, dual licensed under OpenSSL and -# CRYPTOGAMS licenses depending on where you obtain it. For further -# details see http://www.openssl.org/~appro/cryptogams/. +# project. # ==================================================================== # # SHA512 block transform for x86. September 2007. diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/asm/sha512-armv4.pl b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/asm/sha512-armv4.pl index f2d1d22fa5..0add8aab0a 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/asm/sha512-armv4.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/asm/sha512-armv4.pl @@ -1,19 +1,22 @@ #! /usr/bin/env perl # Copyright 2007-2016 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # ==================================================================== # Written by Andy Polyakov for the OpenSSL -# project. The module is, however, dual licensed under OpenSSL and -# CRYPTOGAMS licenses depending on where you obtain it. For further -# details see http://www.openssl.org/~appro/cryptogams/. -# -# Permission to use under GPL terms is granted. +# project. # ==================================================================== # SHA512 block procedure for ARMv4. September 2007. diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/asm/sha512-armv8.pl b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/asm/sha512-armv8.pl index 0ec0f5132f..e078e9b4fa 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/asm/sha512-armv8.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/asm/sha512-armv8.pl @@ -1,18 +1,21 @@ #! /usr/bin/env perl # Copyright 2014-2020 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # ==================================================================== # Written by Andy Polyakov for the OpenSSL -# project. The module is, however, dual licensed under OpenSSL and -# CRYPTOGAMS licenses depending on where you obtain it. For further -# details see http://www.openssl.org/~appro/cryptogams/. -# -# Permission to use under GPLv2 terms is granted. +# project. # ==================================================================== # # SHA256/512 for ARMv8. diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/asm/sha512-x86_64.pl b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/asm/sha512-x86_64.pl index 45bb81ccb3..3a31a1624c 100755 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/asm/sha512-x86_64.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/asm/sha512-x86_64.pl @@ -1,16 +1,23 @@ #! /usr/bin/env perl # Copyright 2005-2016 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # # ==================================================================== # Written by Andy Polyakov for the OpenSSL # project. Rights for redistribution and usage in source and binary -# forms are granted according to the OpenSSL license. +# forms are granted according to the License. # ==================================================================== # # sha256/512_block procedure for x86_64. diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/internal.h b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/internal.h index 4f820118c9..0e6bd0d2be 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/internal.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/internal.h @@ -1,16 +1,16 @@ -/* Copyright 2018 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2018 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_SHA_INTERNAL_H #define OPENSSL_HEADER_SHA_INTERNAL_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/sha1.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/sha1.cc.inc index 5e6e7efaac..ca591fdf8d 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/sha1.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/sha1.cc.inc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/sha256.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/sha256.cc.inc index 52f1605910..1ce42102d5 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/sha256.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/sha256.cc.inc @@ -1,11 +1,16 @@ -/* - * Copyright 2004-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2004-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/sha512.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/sha512.cc.inc index 28b2b3ffe4..4254f23f0d 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/sha512.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/sha/sha512.cc.inc @@ -1,11 +1,16 @@ -/* - * Copyright 2004-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2004-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/address.h b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/address.h index dd2fe67790..ab94497a37 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/address.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/address.h @@ -1,16 +1,16 @@ -/* Copyright 2024 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2024 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_CRYPTO_FIPSMODULE_SLHDSA_ADDRESS_H #define OPENSSL_HEADER_CRYPTO_FIPSMODULE_SLHDSA_ADDRESS_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/fors.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/fors.cc.inc index 58f7a396b2..21790fef1c 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/fors.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/fors.cc.inc @@ -1,16 +1,16 @@ -/* Copyright 2024 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2024 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/fors.h b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/fors.h index 03882c27ad..a7ecd2eb5e 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/fors.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/fors.h @@ -1,16 +1,16 @@ -/* Copyright 2024 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2024 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_CRYPTO_FIPSMODULE_SLHDSA_FORS_H #define OPENSSL_HEADER_CRYPTO_FIPSMODULE_SLHDSA_FORS_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/merkle.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/merkle.cc.inc index c46ef4f969..ffc8f4a918 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/merkle.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/merkle.cc.inc @@ -1,16 +1,16 @@ -/* Copyright 2024 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2024 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/merkle.h b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/merkle.h index 373525ae7d..74cdb4eb82 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/merkle.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/merkle.h @@ -1,16 +1,16 @@ -/* Copyright 2024 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2024 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_CRYPTO_FIPSMODULE_SLHDSA_MERKLE_H #define OPENSSL_HEADER_CRYPTO_FIPSMODULE_SLHDSA_MERKLE_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/params.h b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/params.h index 5271f32ac2..479fb9efc6 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/params.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/params.h @@ -1,16 +1,16 @@ -/* Copyright 2024 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2024 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_CRYPTO_FIPSMODULE_SLHDSA_PARAMS_H #define OPENSSL_HEADER_CRYPTO_FIPSMODULE_SLHDSA_PARAMS_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/slhdsa.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/slhdsa.cc.inc index 960836e0ba..40bf75b472 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/slhdsa.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/slhdsa.cc.inc @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/thash.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/thash.cc.inc index 4952102b17..6aa3d4d13b 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/thash.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/thash.cc.inc @@ -1,16 +1,16 @@ -/* Copyright 2024 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2024 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/thash.h b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/thash.h index b861de5602..fe9fd371f4 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/thash.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/thash.h @@ -1,16 +1,16 @@ -/* Copyright 2024 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2024 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_CRYPTO_FIPSMODULE_SLHDSA_THASH_H #define OPENSSL_HEADER_CRYPTO_FIPSMODULE_SLHDSA_THASH_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/wots.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/wots.cc.inc index 3944e35e02..c97ba324eb 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/wots.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/wots.cc.inc @@ -1,16 +1,16 @@ -/* Copyright 2024 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2024 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/wots.h b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/wots.h index 29a72ec614..4c3ab245a5 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/wots.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/slhdsa/wots.h @@ -1,16 +1,16 @@ -/* Copyright 2024 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2024 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_CRYPTO_FIPSMODULE_SLHDSA_WOTS_H #define OPENSSL_HEADER_CRYPTO_FIPSMODULE_SLHDSA_WOTS_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/tls/internal.h b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/tls/internal.h index 9df17942c9..ebcd96fa3d 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/tls/internal.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/tls/internal.h @@ -1,16 +1,16 @@ -/* Copyright 2018 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2018 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_CRYPTO_FIPSMODULE_TLS_INTERNAL_H #define OPENSSL_HEADER_CRYPTO_FIPSMODULE_TLS_INTERNAL_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/tls/kdf.cc.inc b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/tls/kdf.cc.inc index a2942deb12..d29695e1a1 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/tls/kdf.cc.inc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/fipsmodule/tls/kdf.cc.inc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/hpke/hpke.cc b/naiveproxy/src/third_party/boringssl/src/crypto/hpke/hpke.cc index e82afe8a9b..bd10775d95 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/hpke/hpke.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/hpke/hpke.cc @@ -1,16 +1,16 @@ -/* Copyright 2020 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2020 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/hpke/translate_test_vectors.py b/naiveproxy/src/third_party/boringssl/src/crypto/hpke/translate_test_vectors.py index 14d3365c7b..8a9d2879e5 100755 --- a/naiveproxy/src/third_party/boringssl/src/crypto/hpke/translate_test_vectors.py +++ b/naiveproxy/src/third_party/boringssl/src/crypto/hpke/translate_test_vectors.py @@ -2,17 +2,17 @@ # coding=utf-8 # Copyright 2020 The BoringSSL Authors # -# Permission to use, copy, modify, and/or distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at # -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. """This script translates JSON test vectors to BoringSSL's "FileTest" format. diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/hrss/asm/poly_rq_mul.S b/naiveproxy/src/third_party/boringssl/src/crypto/hrss/asm/poly_rq_mul.S index 5241953ece..2b99d0edaf 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/hrss/asm/poly_rq_mul.S +++ b/naiveproxy/src/third_party/boringssl/src/crypto/hrss/asm/poly_rq_mul.S @@ -1,16 +1,16 @@ // Copyright (c) 2017, the HRSS authors. // -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at // -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/hrss/hrss.cc b/naiveproxy/src/third_party/boringssl/src/crypto/hrss/hrss.cc index 5e5b207b9a..e035ff5ddc 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/hrss/hrss.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/hrss/hrss.cc @@ -1,16 +1,16 @@ -/* Copyright 2018 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2018 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/hrss/internal.h b/naiveproxy/src/third_party/boringssl/src/crypto/hrss/internal.h index 29545be801..44066cfdc8 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/hrss/internal.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/hrss/internal.h @@ -1,16 +1,16 @@ -/* Copyright 2018 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2018 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_HRSS_INTERNAL_H #define OPENSSL_HEADER_HRSS_INTERNAL_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/internal.h b/naiveproxy/src/third_party/boringssl/src/crypto/internal.h index 5ebfaff895..bdbe82a8a5 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/internal.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/internal.h @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_CRYPTO_INTERNAL_H #define OPENSSL_HEADER_CRYPTO_INTERNAL_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/kyber/internal.h b/naiveproxy/src/third_party/boringssl/src/crypto/kyber/internal.h index 9e7431c624..59c80f7156 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/kyber/internal.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/kyber/internal.h @@ -1,16 +1,16 @@ -/* Copyright 2023 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2023 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_CRYPTO_KYBER_INTERNAL_H #define OPENSSL_HEADER_CRYPTO_KYBER_INTERNAL_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/kyber/kyber.cc b/naiveproxy/src/third_party/boringssl/src/crypto/kyber/kyber.cc index 6caa701d80..bfbfd2b8ba 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/kyber/kyber.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/kyber/kyber.cc @@ -1,16 +1,16 @@ -/* Copyright 2023 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2023 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #define OPENSSL_UNSTABLE_EXPERIMENTAL_KYBER #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/lhash/internal.h b/naiveproxy/src/third_party/boringssl/src/crypto/lhash/internal.h index 7aa1ac0db0..9208d586d9 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/lhash/internal.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/lhash/internal.h @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_LHASH_INTERNAL_H #define OPENSSL_HEADER_LHASH_INTERNAL_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/lhash/lhash.cc b/naiveproxy/src/third_party/boringssl/src/crypto/lhash/lhash.cc index 25fe8df2e7..1af8df7ee9 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/lhash/lhash.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/lhash/lhash.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/md4/md4.cc b/naiveproxy/src/third_party/boringssl/src/crypto/md4/md4.cc index 423ef0f478..ae6dea84df 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/md4/md4.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/md4/md4.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/md5/asm/md5-586.pl b/naiveproxy/src/third_party/boringssl/src/crypto/md5/asm/md5-586.pl index d020f67d29..060078878b 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/md5/asm/md5-586.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/md5/asm/md5-586.pl @@ -1,10 +1,17 @@ #! /usr/bin/env perl # Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # Normal is the diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/md5/asm/md5-x86_64.pl b/naiveproxy/src/third_party/boringssl/src/crypto/md5/asm/md5-x86_64.pl index 80e2d3fd93..3e5b27a6df 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/md5/asm/md5-x86_64.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/md5/asm/md5-x86_64.pl @@ -2,10 +2,17 @@ # Author: Marc Bevand # Copyright 2005-2016 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # MD5 optimized for AMD64. diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/md5/internal.h b/naiveproxy/src/third_party/boringssl/src/crypto/md5/internal.h index e8bd37af51..501b3890e9 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/md5/internal.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/md5/internal.h @@ -1,16 +1,16 @@ -/* Copyright 2018 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2018 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_MD5_INTERNAL_H #define OPENSSL_HEADER_MD5_INTERNAL_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/md5/md5.cc b/naiveproxy/src/third_party/boringssl/src/crypto/md5/md5.cc index d1f8ddef80..89444e9aae 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/md5/md5.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/md5/md5.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/mem.cc b/naiveproxy/src/third_party/boringssl/src/crypto/mem.cc index 53e76d15ad..aed60a8145 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/mem.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/mem.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/mldsa/mldsa.cc b/naiveproxy/src/third_party/boringssl/src/crypto/mldsa/mldsa.cc index 21f7288d09..418e3f65b8 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/mldsa/mldsa.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/mldsa/mldsa.cc @@ -1,16 +1,16 @@ -/* Copyright 2024 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2024 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/mlkem/mlkem.cc b/naiveproxy/src/third_party/boringssl/src/crypto/mlkem/mlkem.cc index 56a86233cf..f1a67953fe 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/mlkem/mlkem.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/mlkem/mlkem.cc @@ -1,16 +1,16 @@ -/* Copyright 2024 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2024 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/obj/obj.cc b/naiveproxy/src/third_party/boringssl/src/crypto/obj/obj.cc index 720ca6b329..ffc12ff17a 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/obj/obj.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/obj/obj.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/obj/obj_dat.h b/naiveproxy/src/third_party/boringssl/src/crypto/obj/obj_dat.h index de5c4a54cd..a857d535cb 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/obj/obj_dat.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/obj/obj_dat.h @@ -1,13 +1,18 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. -/* This file is generated by crypto/obj/objects.go. */ +// This file is generated by crypto/obj/objects.go. #define NUM_NID 966 diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/obj/obj_xref.cc b/naiveproxy/src/third_party/boringssl/src/crypto/obj/obj_xref.cc index 8e5e486b2a..0095deaf33 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/obj/obj_xref.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/obj/obj_xref.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/obj/objects.go b/naiveproxy/src/third_party/boringssl/src/crypto/obj/objects.go index e6f163b3dc..dacc1361d1 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/obj/objects.go +++ b/naiveproxy/src/third_party/boringssl/src/crypto/obj/objects.go @@ -1,16 +1,16 @@ // Copyright 2016 The BoringSSL Authors // -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at // -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. //go:build ignore @@ -388,16 +388,21 @@ func clangFormat(input string) (string, error) { func writeHeader(path string, objs *objects) error { var b bytes.Buffer - fmt.Fprintf(&b, `/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ + fmt.Fprintf(&b, `// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. -/* This file is generated by crypto/obj/objects.go. */ +// This file is generated by crypto/obj/objects.go. #ifndef OPENSSL_HEADER_NID_H #define OPENSSL_HEADER_NID_H @@ -409,18 +414,18 @@ extern "C" { #endif -/* The nid library provides numbered values for ASN.1 object identifiers and - * other symbols. These values are used by other libraries to identify - * cryptographic primitives. - * - * A separate objects library, obj.h, provides functions for converting between - * nids and object identifiers. However it depends on large internal tables with - * the encodings of every nid defined. Consumers concerned with binary size - * should instead embed the encodings of the few consumed OIDs and compare - * against those. - * - * These values should not be used outside of a single process; they are not - * stable identifiers. */ +// The nid library provides numbered values for ASN.1 object identifiers and +// other symbols. These values are used by other libraries to identify +// cryptographic primitives. +// +// A separate objects library, obj.h, provides functions for converting between +// nids and object identifiers. However it depends on large internal tables with +// the encodings of every nid defined. Consumers concerned with binary size +// should instead embed the encodings of the few consumed OIDs and compare +// against those. +// +// These values should not be used outside of a single process; they are not +// stable identifiers. `) @@ -481,16 +486,21 @@ func sortNIDs(nids []int, objs *objects, cmp func(a, b object) bool) { func writeData(path string, objs *objects) error { var b bytes.Buffer - fmt.Fprintf(&b, `/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ + fmt.Fprintf(&b, `// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. -/* This file is generated by crypto/obj/objects.go. */ +// This file is generated by crypto/obj/objects.go. `) diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/pem/internal.h b/naiveproxy/src/third_party/boringssl/src/crypto/pem/internal.h index 9fe9a5bba4..bda89a6514 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/pem/internal.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/pem/internal.h @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_PEM_INTERNAL_H #define OPENSSL_HEADER_PEM_INTERNAL_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/pem/pem_all.cc b/naiveproxy/src/third_party/boringssl/src/crypto/pem/pem_all.cc index f2f363f665..acd3b25bc7 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/pem/pem_all.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/pem/pem_all.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/pem/pem_info.cc b/naiveproxy/src/third_party/boringssl/src/crypto/pem/pem_info.cc index 27d4edc501..edc97f4587 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/pem/pem_info.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/pem/pem_info.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include @@ -168,7 +173,8 @@ STACK_OF(X509_INFO) *PEM_X509_INFO_read_bio(BIO *bp, STACK_OF(X509_INFO) *sk, key_type = EVP_PKEY_EC; } - // If a private key has a header, assume it is encrypted. + // If a private key has a header, assume it is encrypted. This function does + // not decrypt private keys. if (key_type != EVP_PKEY_NONE && strlen(header) > 10) { if (info->x_pkey != NULL) { if (!sk_X509_INFO_push(ret, info)) { @@ -179,7 +185,7 @@ STACK_OF(X509_INFO) *PEM_X509_INFO_read_bio(BIO *bp, STACK_OF(X509_INFO) *sk, goto err; } } - // Historically, raw entries pushed an empty key. + // Use an empty key as a placeholder. info->x_pkey = X509_PKEY_new(); if (info->x_pkey == NULL || !PEM_get_EVP_CIPHER_INFO(header, &info->enc_cipher)) { diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/pem/pem_lib.cc b/naiveproxy/src/third_party/boringssl/src/crypto/pem/pem_lib.cc index 61ab5510e1..854af77741 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/pem/pem_lib.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/pem/pem_lib.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include @@ -391,14 +396,11 @@ int PEM_get_EVP_CIPHER_INFO(const char *header, EVP_CIPHER_INFO *cipher) { return 0; } header += 11; - if (*header != '4') { + if (header[0] != '4' || header[1] != ',') { + OPENSSL_PUT_ERROR(PEM, PEM_R_UNSUPPORTED_PROC_TYPE_VERSION); return 0; } - header++; - if (*header != ',') { - return 0; - } - header++; + header += 2; if (strncmp(header, "ENCRYPTED", 9) != 0) { OPENSSL_PUT_ERROR(PEM, PEM_R_NOT_ENCRYPTED); return 0; diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/pem/pem_oth.cc b/naiveproxy/src/third_party/boringssl/src/crypto/pem/pem_oth.cc index 171b2f5941..86ab947c9c 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/pem/pem_oth.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/pem/pem_oth.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/pem/pem_pk8.cc b/naiveproxy/src/third_party/boringssl/src/crypto/pem/pem_pk8.cc index 37636ec455..fb09f62666 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/pem/pem_pk8.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/pem/pem_pk8.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/pem/pem_pkey.cc b/naiveproxy/src/third_party/boringssl/src/crypto/pem/pem_pkey.cc index 72dfc74dce..c40bba4430 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/pem/pem_pkey.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/pem/pem_pkey.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/pem/pem_x509.cc b/naiveproxy/src/third_party/boringssl/src/crypto/pem/pem_x509.cc index 23482fd392..e33991446e 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/pem/pem_x509.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/pem/pem_x509.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/pem/pem_xaux.cc b/naiveproxy/src/third_party/boringssl/src/crypto/pem/pem_xaux.cc index 343e450194..56a2b1e54d 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/pem/pem_xaux.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/pem/pem_xaux.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/perlasm/arm-xlate.pl b/naiveproxy/src/third_party/boringssl/src/crypto/perlasm/arm-xlate.pl index 546f77e09e..a3c7a96d54 100755 --- a/naiveproxy/src/third_party/boringssl/src/crypto/perlasm/arm-xlate.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/perlasm/arm-xlate.pl @@ -1,10 +1,17 @@ #! /usr/bin/env perl # Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. use strict; diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/perlasm/x86_64-xlate.pl b/naiveproxy/src/third_party/boringssl/src/crypto/perlasm/x86_64-xlate.pl index 3011c91530..a0bade3c12 100755 --- a/naiveproxy/src/third_party/boringssl/src/crypto/perlasm/x86_64-xlate.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/perlasm/x86_64-xlate.pl @@ -1,10 +1,17 @@ #! /usr/bin/env perl # Copyright 2005-2016 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # Ascetic x86_64 AT&T to MASM/NASM assembler translator by . diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/perlasm/x86asm.pl b/naiveproxy/src/third_party/boringssl/src/crypto/perlasm/x86asm.pl index b10eaf6be6..70007a054e 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/perlasm/x86asm.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/perlasm/x86asm.pl @@ -1,10 +1,17 @@ #! /usr/bin/env perl # Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # require 'x86asm.pl'; diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/perlasm/x86gas.pl b/naiveproxy/src/third_party/boringssl/src/crypto/perlasm/x86gas.pl index 7d0c00f252..62a5710a8f 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/perlasm/x86gas.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/perlasm/x86gas.pl @@ -1,10 +1,17 @@ #! /usr/bin/env perl # Copyright 2007-2016 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. package x86gas; diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/perlasm/x86masm.pl b/naiveproxy/src/third_party/boringssl/src/crypto/perlasm/x86masm.pl index 50f8aed7a6..a32483c8a0 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/perlasm/x86masm.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/perlasm/x86masm.pl @@ -1,10 +1,17 @@ #! /usr/bin/env perl # Copyright 2007-2016 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. package x86masm; diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/perlasm/x86nasm.pl b/naiveproxy/src/third_party/boringssl/src/crypto/perlasm/x86nasm.pl index 96883ffe4a..61c70f48a1 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/perlasm/x86nasm.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/perlasm/x86nasm.pl @@ -1,10 +1,17 @@ #! /usr/bin/env perl # Copyright 1999-2018 The OpenSSL Project Authors. All Rights Reserved. # -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. package x86nasm; diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/pkcs7/internal.h b/naiveproxy/src/third_party/boringssl/src/crypto/pkcs7/internal.h index 71684c8a4d..7505e331b7 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/pkcs7/internal.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/pkcs7/internal.h @@ -1,16 +1,16 @@ -/* Copyright 2017 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2017 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_PKCS7_INTERNAL_H #define OPENSSL_HEADER_PKCS7_INTERNAL_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/pkcs7/pkcs7.cc b/naiveproxy/src/third_party/boringssl/src/crypto/pkcs7/pkcs7.cc index a682193038..4d6c05f08d 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/pkcs7/pkcs7.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/pkcs7/pkcs7.cc @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/pkcs7/pkcs7_x509.cc b/naiveproxy/src/third_party/boringssl/src/crypto/pkcs7/pkcs7_x509.cc index 8d175e6d35..8484c38bd5 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/pkcs7/pkcs7_x509.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/pkcs7/pkcs7_x509.cc @@ -1,16 +1,16 @@ -/* Copyright 2017 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2017 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/pkcs8/internal.h b/naiveproxy/src/third_party/boringssl/src/crypto/pkcs8/internal.h index 175db44d87..0c729470d9 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/pkcs8/internal.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/pkcs8/internal.h @@ -1,11 +1,16 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_PKCS8_INTERNAL_H #define OPENSSL_HEADER_PKCS8_INTERNAL_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/pkcs8/p5_pbev2.cc b/naiveproxy/src/third_party/boringssl/src/crypto/pkcs8/p5_pbev2.cc index 65736f0d06..bd0868b37c 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/pkcs8/p5_pbev2.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/pkcs8/p5_pbev2.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/pkcs8/pkcs8.cc b/naiveproxy/src/third_party/boringssl/src/crypto/pkcs8/pkcs8.cc index 91131a222f..525b7eacff 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/pkcs8/pkcs8.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/pkcs8/pkcs8.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/pkcs8/pkcs8_x509.cc b/naiveproxy/src/third_party/boringssl/src/crypto/pkcs8/pkcs8_x509.cc index d719049372..1e20e7643d 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/pkcs8/pkcs8_x509.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/pkcs8/pkcs8_x509.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/poly1305/internal.h b/naiveproxy/src/third_party/boringssl/src/crypto/poly1305/internal.h index d7e57715b8..0ef2a9c35c 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/poly1305/internal.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/poly1305/internal.h @@ -1,16 +1,16 @@ -/* Copyright 2016 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2016 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_POLY1305_INTERNAL_H #define OPENSSL_HEADER_POLY1305_INTERNAL_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/poly1305/poly1305.cc b/naiveproxy/src/third_party/boringssl/src/crypto/poly1305/poly1305.cc index a8e23c7ece..8386072c69 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/poly1305/poly1305.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/poly1305/poly1305.cc @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // This implementation of poly1305 is by Andrew Moon // (https://github.com/floodyberry/poly1305-donna) and released as public diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/poly1305/poly1305_arm.cc b/naiveproxy/src/third_party/boringssl/src/crypto/poly1305/poly1305_arm.cc index ab399165d9..dc03285e82 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/poly1305/poly1305_arm.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/poly1305/poly1305_arm.cc @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // This implementation was taken from the public domain, neon2 version in // SUPERCOP by D. J. Bernstein and Peter Schwabe. diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/poly1305/poly1305_vec.cc b/naiveproxy/src/third_party/boringssl/src/crypto/poly1305/poly1305_vec.cc index 397ade9aaf..74f144e879 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/poly1305/poly1305_vec.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/poly1305/poly1305_vec.cc @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // This implementation of poly1305 is by Andrew Moon // (https://github.com/floodyberry/poly1305-donna) and released as public diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/pool/internal.h b/naiveproxy/src/third_party/boringssl/src/crypto/pool/internal.h index 788255381f..bb119b1098 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/pool/internal.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/pool/internal.h @@ -1,16 +1,16 @@ -/* Copyright 2016 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2016 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_POOL_INTERNAL_H #define OPENSSL_HEADER_POOL_INTERNAL_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/pool/pool.cc b/naiveproxy/src/third_party/boringssl/src/crypto/pool/pool.cc index f72488d12b..8a8c03d12e 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/pool/pool.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/pool/pool.cc @@ -1,16 +1,16 @@ -/* Copyright 2016 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2016 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/rand_extra/deterministic.cc b/naiveproxy/src/third_party/boringssl/src/crypto/rand/deterministic.cc similarity index 63% rename from naiveproxy/src/third_party/boringssl/src/crypto/rand_extra/deterministic.cc rename to naiveproxy/src/third_party/boringssl/src/crypto/rand/deterministic.cc index d8a1ebf7f0..ab9bcf1cdf 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/rand_extra/deterministic.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/rand/deterministic.cc @@ -1,16 +1,16 @@ -/* Copyright 2016 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2016 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/rand_extra/fork_detect.cc b/naiveproxy/src/third_party/boringssl/src/crypto/rand/fork_detect.cc similarity index 88% rename from naiveproxy/src/third_party/boringssl/src/crypto/rand_extra/fork_detect.cc rename to naiveproxy/src/third_party/boringssl/src/crypto/rand/fork_detect.cc index 537f828547..d7e482b3fa 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/rand_extra/fork_detect.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/rand/fork_detect.cc @@ -1,16 +1,16 @@ -/* Copyright 2020 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2020 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #if !defined(_GNU_SOURCE) #define _GNU_SOURCE // needed for madvise() and MAP_ANONYMOUS on Linux. diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/rand/forkunsafe.cc b/naiveproxy/src/third_party/boringssl/src/crypto/rand/forkunsafe.cc new file mode 100644 index 0000000000..87c5be0b2c --- /dev/null +++ b/naiveproxy/src/third_party/boringssl/src/crypto/rand/forkunsafe.cc @@ -0,0 +1,44 @@ +// Copyright 2017 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include + +#include + +#include "../fipsmodule/rand/internal.h" +#include "../internal.h" + + +// g_buffering_enabled is one if fork-unsafe buffering has been enabled and zero +// otherwise. +static CRYPTO_atomic_u32 g_buffering_enabled; + +#if !defined(OPENSSL_WINDOWS) +void RAND_enable_fork_unsafe_buffering(int fd) { + // We no longer support setting the file-descriptor with this function. + if (fd != -1) { + abort(); + } + + CRYPTO_atomic_store_u32(&g_buffering_enabled, 1); +} + +void RAND_disable_fork_unsafe_buffering(void) { + CRYPTO_atomic_store_u32(&g_buffering_enabled, 0); +} +#endif + +int rand_fork_unsafe_buffering_enabled(void) { + return CRYPTO_atomic_load_u32(&g_buffering_enabled) != 0; +} diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/rand_extra/getentropy.cc b/naiveproxy/src/third_party/boringssl/src/crypto/rand/getentropy.cc similarity index 57% rename from naiveproxy/src/third_party/boringssl/src/crypto/rand_extra/getentropy.cc rename to naiveproxy/src/third_party/boringssl/src/crypto/rand/getentropy.cc index def1b2558a..1bbb3f90b0 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/rand_extra/getentropy.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/rand/getentropy.cc @@ -1,16 +1,16 @@ -/* Copyright 2023 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2023 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #if !defined(_DEFAULT_SOURCE) #define _DEFAULT_SOURCE // Needed for getentropy on musl and glibc diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/rand_extra/getrandom_fillin.h b/naiveproxy/src/third_party/boringssl/src/crypto/rand/getrandom_fillin.h similarity index 57% rename from naiveproxy/src/third_party/boringssl/src/crypto/rand_extra/getrandom_fillin.h rename to naiveproxy/src/third_party/boringssl/src/crypto/rand/getrandom_fillin.h index de18347b52..daaba2aa92 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/rand_extra/getrandom_fillin.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/rand/getrandom_fillin.h @@ -1,16 +1,16 @@ -/* Copyright 2020 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2020 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_CRYPTO_RAND_GETRANDOM_FILLIN_H #define OPENSSL_HEADER_CRYPTO_RAND_GETRANDOM_FILLIN_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/rand/ios.cc b/naiveproxy/src/third_party/boringssl/src/crypto/rand/ios.cc new file mode 100644 index 0000000000..be13f1bfeb --- /dev/null +++ b/naiveproxy/src/third_party/boringssl/src/crypto/rand/ios.cc @@ -0,0 +1,42 @@ +// Copyright 2023 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include + +#include "../bcm_support.h" +#include "sysrand_internal.h" + +#if defined(OPENSSL_RAND_IOS) +#include + +#include + +void CRYPTO_init_sysrand(void) {} + +void CRYPTO_sysrand(uint8_t *out, size_t requested) { + if (CCRandomGenerateBytes(out, requested) != kCCSuccess) { + abort(); + } +} + +int CRYPTO_sysrand_if_available(uint8_t *buf, size_t len) { + CRYPTO_sysrand(buf, len); + return 1; +} + +void CRYPTO_sysrand_for_seed(uint8_t *out, size_t requested) { + CRYPTO_sysrand(out, requested); +} + +#endif // OPENSSL_RAND_IOS diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/rand_extra/passive.cc b/naiveproxy/src/third_party/boringssl/src/crypto/rand/passive.cc similarity index 86% rename from naiveproxy/src/third_party/boringssl/src/crypto/rand_extra/passive.cc rename to naiveproxy/src/third_party/boringssl/src/crypto/rand/passive.cc index 12e8ffd766..b216d6b873 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/rand_extra/passive.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/rand/passive.cc @@ -1,16 +1,16 @@ -/* Copyright 2020 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2020 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/rand_extra/rand_extra.cc b/naiveproxy/src/third_party/boringssl/src/crypto/rand/rand.cc similarity index 66% rename from naiveproxy/src/third_party/boringssl/src/crypto/rand_extra/rand_extra.cc rename to naiveproxy/src/third_party/boringssl/src/crypto/rand/rand.cc index 9223962741..fd82bbc76c 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/rand_extra/rand_extra.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/rand/rand.cc @@ -1,16 +1,16 @@ -/* Copyright 2017 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2017 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/rand/sysrand_internal.h b/naiveproxy/src/third_party/boringssl/src/crypto/rand/sysrand_internal.h new file mode 100644 index 0000000000..90931a2310 --- /dev/null +++ b/naiveproxy/src/third_party/boringssl/src/crypto/rand/sysrand_internal.h @@ -0,0 +1,37 @@ +// Copyright 2024 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef OPENSSL_HEADER_CRYPTO_SYSRAND_INTERNAL_H +#define OPENSSL_HEADER_CRYPTO_SYSRAND_INTERNAL_H + +#include + +#if defined(BORINGSSL_UNSAFE_DETERMINISTIC_MODE) +#define OPENSSL_RAND_DETERMINISTIC +#elif defined(OPENSSL_TRUSTY) +#define OPENSSL_RAND_TRUSTY +#elif defined(OPENSSL_WINDOWS) +#define OPENSSL_RAND_WINDOWS +#elif defined(OPENSSL_LINUX) +#define OPENSSL_RAND_URANDOM +#elif defined(OPENSSL_APPLE) && !defined(OPENSSL_MACOS) +// Unlike macOS, iOS and similar hide away getentropy(). +#define OPENSSL_RAND_IOS +#else +// By default if you are integrating BoringSSL we expect you to +// provide getentropy from the header file. +#define OPENSSL_RAND_GETENTROPY +#endif + +#endif // OPENSSL_HEADER_CRYPTO__SYSRAND_INTERNAL_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/rand/trusty.cc b/naiveproxy/src/third_party/boringssl/src/crypto/rand/trusty.cc new file mode 100644 index 0000000000..9ddf024824 --- /dev/null +++ b/naiveproxy/src/third_party/boringssl/src/crypto/rand/trusty.cc @@ -0,0 +1,46 @@ +// Copyright 2023 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include + +#include "../bcm_support.h" +#include "sysrand_internal.h" + +#if defined(OPENSSL_RAND_TRUSTY) +#include +#include + +#include +#include + +#include + +void CRYPTO_init_sysrand(void) {} + +void CRYPTO_sysrand(uint8_t *out, size_t requested) { + if (trusty_rng_hw_rand(out, requested) != NO_ERROR) { + abort(); + } +} + +int CRYPTO_sysrand_if_available(uint8_t *buf, size_t len) { + CRYPTO_sysrand(buf, len); + return 1; +} + +void CRYPTO_sysrand_for_seed(uint8_t *out, size_t requested) { + CRYPTO_sysrand(out, requested); +} + +#endif // OPENSSL_RAND_TRUSTY diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/rand_extra/urandom.cc b/naiveproxy/src/third_party/boringssl/src/crypto/rand/urandom.cc similarity index 91% rename from naiveproxy/src/third_party/boringssl/src/crypto/rand_extra/urandom.cc rename to naiveproxy/src/third_party/boringssl/src/crypto/rand/urandom.cc index 7e8244f4e9..ce862b5a9e 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/rand_extra/urandom.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/rand/urandom.cc @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #if !defined(_GNU_SOURCE) #define _GNU_SOURCE // needed for syscall() on Linux. diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/rand_extra/windows.cc b/naiveproxy/src/third_party/boringssl/src/crypto/rand/windows.cc similarity index 75% rename from naiveproxy/src/third_party/boringssl/src/crypto/rand_extra/windows.cc rename to naiveproxy/src/third_party/boringssl/src/crypto/rand/windows.cc index 81f2b4baa6..884d7891ed 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/rand_extra/windows.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/rand/windows.cc @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/rand_extra/forkunsafe.cc b/naiveproxy/src/third_party/boringssl/src/crypto/rand_extra/forkunsafe.cc deleted file mode 100644 index b94760b0bf..0000000000 --- a/naiveproxy/src/third_party/boringssl/src/crypto/rand_extra/forkunsafe.cc +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright 2017 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ - -#include - -#include - -#include "../fipsmodule/rand/internal.h" -#include "../internal.h" - - -// g_buffering_enabled is one if fork-unsafe buffering has been enabled and zero -// otherwise. -static CRYPTO_atomic_u32 g_buffering_enabled; - -#if !defined(OPENSSL_WINDOWS) -void RAND_enable_fork_unsafe_buffering(int fd) { - // We no longer support setting the file-descriptor with this function. - if (fd != -1) { - abort(); - } - - CRYPTO_atomic_store_u32(&g_buffering_enabled, 1); -} - -void RAND_disable_fork_unsafe_buffering(void) { - CRYPTO_atomic_store_u32(&g_buffering_enabled, 0); -} -#endif - -int rand_fork_unsafe_buffering_enabled(void) { - return CRYPTO_atomic_load_u32(&g_buffering_enabled) != 0; -} diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/rand_extra/ios.cc b/naiveproxy/src/third_party/boringssl/src/crypto/rand_extra/ios.cc deleted file mode 100644 index d4cffa56bc..0000000000 --- a/naiveproxy/src/third_party/boringssl/src/crypto/rand_extra/ios.cc +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright 2023 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ - -#include - -#include "../bcm_support.h" -#include "sysrand_internal.h" - -#if defined(OPENSSL_RAND_IOS) -#include - -#include - -void CRYPTO_init_sysrand(void) {} - -void CRYPTO_sysrand(uint8_t *out, size_t requested) { - if (CCRandomGenerateBytes(out, requested) != kCCSuccess) { - abort(); - } -} - -int CRYPTO_sysrand_if_available(uint8_t *buf, size_t len) { - CRYPTO_sysrand(buf, len); - return 1; -} - -void CRYPTO_sysrand_for_seed(uint8_t *out, size_t requested) { - CRYPTO_sysrand(out, requested); -} - -#endif // OPENSSL_RAND_IOS diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/rand_extra/sysrand_internal.h b/naiveproxy/src/third_party/boringssl/src/crypto/rand_extra/sysrand_internal.h deleted file mode 100644 index d0e16dc7a7..0000000000 --- a/naiveproxy/src/third_party/boringssl/src/crypto/rand_extra/sysrand_internal.h +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright 2024 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ - -#ifndef OPENSSL_HEADER_CRYPTO_SYSRAND_INTERNAL_H -#define OPENSSL_HEADER_CRYPTO_SYSRAND_INTERNAL_H - -#include - -#if defined(BORINGSSL_UNSAFE_DETERMINISTIC_MODE) -#define OPENSSL_RAND_DETERMINISTIC -#elif defined(OPENSSL_TRUSTY) -#define OPENSSL_RAND_TRUSTY -#elif defined(OPENSSL_WINDOWS) -#define OPENSSL_RAND_WINDOWS -#elif defined(OPENSSL_LINUX) -#define OPENSSL_RAND_URANDOM -#elif defined(OPENSSL_APPLE) && !defined(OPENSSL_MACOS) -// Unlike macOS, iOS and similar hide away getentropy(). -#define OPENSSL_RAND_IOS -#else -// By default if you are integrating BoringSSL we expect you to -// provide getentropy from the header file. -#define OPENSSL_RAND_GETENTROPY -#endif - -#endif // OPENSSL_HEADER_CRYPTO__SYSRAND_INTERNAL_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/rand_extra/trusty.cc b/naiveproxy/src/third_party/boringssl/src/crypto/rand_extra/trusty.cc deleted file mode 100644 index 070a293534..0000000000 --- a/naiveproxy/src/third_party/boringssl/src/crypto/rand_extra/trusty.cc +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright 2023 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ - -#include - -#include "../bcm_support.h" -#include "sysrand_internal.h" - -#if defined(OPENSSL_RAND_TRUSTY) -#include -#include - -#include -#include - -#include - -void CRYPTO_init_sysrand(void) {} - -void CRYPTO_sysrand(uint8_t *out, size_t requested) { - if (trusty_rng_hw_rand(out, requested) != NO_ERROR) { - abort(); - } -} - -int CRYPTO_sysrand_if_available(uint8_t *buf, size_t len) { - CRYPTO_sysrand(buf, len); - return 1; -} - -void CRYPTO_sysrand_for_seed(uint8_t *out, size_t requested) { - CRYPTO_sysrand(out, requested); -} - -#endif // OPENSSL_RAND_TRUSTY diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/rc4/rc4.cc b/naiveproxy/src/third_party/boringssl/src/crypto/rc4/rc4.cc index 090d1cee06..1c8971fc73 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/rc4/rc4.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/rc4/rc4.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/refcount.cc b/naiveproxy/src/third_party/boringssl/src/crypto/refcount.cc index 9cfa28432b..d481fba499 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/refcount.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/refcount.cc @@ -1,16 +1,16 @@ -/* Copyright 2015 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2015 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "internal.h" diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/rsa_extra/internal.h b/naiveproxy/src/third_party/boringssl/src/crypto/rsa/internal.h similarity index 50% rename from naiveproxy/src/third_party/boringssl/src/crypto/rsa_extra/internal.h rename to naiveproxy/src/third_party/boringssl/src/crypto/rsa/internal.h index 8104e97271..4e88afde61 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/rsa_extra/internal.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/rsa/internal.h @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_RSA_EXTRA_INTERNAL_H #define OPENSSL_HEADER_RSA_EXTRA_INTERNAL_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/rsa_extra/rsa_asn1.cc b/naiveproxy/src/third_party/boringssl/src/crypto/rsa/rsa_asn1.cc similarity index 90% rename from naiveproxy/src/third_party/boringssl/src/crypto/rsa_extra/rsa_asn1.cc rename to naiveproxy/src/third_party/boringssl/src/crypto/rsa/rsa_asn1.cc index 68df87741f..a71cc3a462 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/rsa_extra/rsa_asn1.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/rsa/rsa_asn1.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/rsa_extra/rsa_crypt.cc b/naiveproxy/src/third_party/boringssl/src/crypto/rsa/rsa_crypt.cc similarity index 95% rename from naiveproxy/src/third_party/boringssl/src/crypto/rsa_extra/rsa_crypt.cc rename to naiveproxy/src/third_party/boringssl/src/crypto/rsa/rsa_crypt.cc index 6869dc9451..acf207ed62 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/rsa_extra/rsa_crypt.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/rsa/rsa_crypt.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/rsa/rsa_extra.cc b/naiveproxy/src/third_party/boringssl/src/crypto/rsa/rsa_extra.cc new file mode 100644 index 0000000000..1563720b25 --- /dev/null +++ b/naiveproxy/src/third_party/boringssl/src/crypto/rsa/rsa_extra.cc @@ -0,0 +1,19 @@ +// Copyright 2024 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include + +int RSA_blinding_on(RSA *rsa, BN_CTX *ctx) { return 1; } + +void RSA_blinding_off(RSA *rsa) {} diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/rsa/rsa_print.cc b/naiveproxy/src/third_party/boringssl/src/crypto/rsa/rsa_print.cc new file mode 100644 index 0000000000..50dc3dd650 --- /dev/null +++ b/naiveproxy/src/third_party/boringssl/src/crypto/rsa/rsa_print.cc @@ -0,0 +1,27 @@ +// Copyright 2006-2017 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include + +#include + + +int RSA_print(BIO *bio, const RSA *rsa, int indent) { + EVP_PKEY *pkey = EVP_PKEY_new(); + int ret = pkey != NULL && + EVP_PKEY_set1_RSA(pkey, (RSA *)rsa) && + EVP_PKEY_print_private(bio, pkey, indent, NULL); + EVP_PKEY_free(pkey); + return ret; +} diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/rsa_extra/rsa_extra.cc b/naiveproxy/src/third_party/boringssl/src/crypto/rsa_extra/rsa_extra.cc deleted file mode 100644 index a76db3f148..0000000000 --- a/naiveproxy/src/third_party/boringssl/src/crypto/rsa_extra/rsa_extra.cc +++ /dev/null @@ -1,17 +0,0 @@ -/* Copyright 2024 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ - -#include - -void RSA_blinding_off(RSA *rsa) {} diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/rsa_extra/rsa_print.cc b/naiveproxy/src/third_party/boringssl/src/crypto/rsa_extra/rsa_print.cc deleted file mode 100644 index 71970b8ea9..0000000000 --- a/naiveproxy/src/third_party/boringssl/src/crypto/rsa_extra/rsa_print.cc +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright 2006-2017 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#include - -#include - - -int RSA_print(BIO *bio, const RSA *rsa, int indent) { - EVP_PKEY *pkey = EVP_PKEY_new(); - int ret = pkey != NULL && - EVP_PKEY_set1_RSA(pkey, (RSA *)rsa) && - EVP_PKEY_print_private(bio, pkey, indent, NULL); - EVP_PKEY_free(pkey); - return ret; -} diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/sha/sha1.cc b/naiveproxy/src/third_party/boringssl/src/crypto/sha/sha1.cc index f840c92580..c2c9494603 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/sha/sha1.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/sha/sha1.cc @@ -1,16 +1,16 @@ -/* Copyright 2024 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2024 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/sha/sha256.cc b/naiveproxy/src/third_party/boringssl/src/crypto/sha/sha256.cc index 33f252c6ff..9a0b6cb1cb 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/sha/sha256.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/sha/sha256.cc @@ -1,16 +1,16 @@ -/* Copyright 2024 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2024 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/sha/sha512.cc b/naiveproxy/src/third_party/boringssl/src/crypto/sha/sha512.cc index bbf9c587f7..40a2a797bd 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/sha/sha512.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/sha/sha512.cc @@ -1,16 +1,16 @@ -/* Copyright 2024 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2024 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/siphash/siphash.cc b/naiveproxy/src/third_party/boringssl/src/crypto/siphash/siphash.cc index aa2dd57378..d578798404 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/siphash/siphash.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/siphash/siphash.cc @@ -1,16 +1,16 @@ -/* Copyright 2019 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2019 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/slhdsa/slhdsa.cc b/naiveproxy/src/third_party/boringssl/src/crypto/slhdsa/slhdsa.cc index 1ccac9a1f5..b1f5b39379 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/slhdsa/slhdsa.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/slhdsa/slhdsa.cc @@ -1,16 +1,16 @@ -/* Copyright 2024 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2024 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/spake2plus/internal.h b/naiveproxy/src/third_party/boringssl/src/crypto/spake2plus/internal.h new file mode 100644 index 0000000000..49a8a28d35 --- /dev/null +++ b/naiveproxy/src/third_party/boringssl/src/crypto/spake2plus/internal.h @@ -0,0 +1,204 @@ +// Copyright 2024 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef OPENSSL_HEADER_SPAKE2PLUS_INTERNAL_H +#define OPENSSL_HEADER_SPAKE2PLUS_INTERNAL_H + +#include + +#include + +#include +#include + +#include "../fipsmodule/ec/internal.h" + + +BSSL_NAMESPACE_BEGIN + +// SPAKE2+. +// +// SPAKE2+ is an augmented password-authenticated key-exchange. It allows +// two parties, a prover and verifier, to derive a strong shared key with no +// risk of disclosing the password, known only to the prover, to the verifier. +// (But note that the verifier can still attempt an offline, brute-force attack +// to recover the password.) +// +// This is an implementation of SPAKE2+ using P-256 as the group, SHA-256 as +// the hash function, HKDF-SHA256 as the key derivation function, and +// HMAC-SHA256 as the message authentication code. +// +// See https://www.rfc-editor.org/rfc/rfc9383.html + +namespace spake2plus { + +// kShareSize is the size of a SPAKE2+ key share. +constexpr size_t kShareSize = 65; + +// kConfirmSize is the size of a SPAKE2+ key confirmation message. +constexpr size_t kConfirmSize = 32; + +// kVerifierSize is the size of the w0 and w1 values in the SPAKE2+ protocol. +constexpr size_t kVerifierSize = 32; + +// kRegistrationRecordSize is the number of bytes in a registration record, +// which is provided to the verifier. +constexpr size_t kRegistrationRecordSize = 65; + +// kSecretSize is the number of bytes of shared secret that the SPAKE2+ protocol +// generates. +constexpr size_t kSecretSize = 32; + +// Register computes the values needed in the offline registration +// step of the SPAKE2+ protocol. See the following for more details: +// https://www.rfc-editor.org/rfc/rfc9383.html#section-3.2 +// +// The |password| argument is the mandatory prover password. The |out_w0|, +// |out_w1|, and |out_registration_record| arguments are where the password +// verifiers (w0 and w1) and registration record (L) are stored, respectively. +// The prover is given |out_w0| and |out_w1| while the verifier is given +// |out_w0| and |out_registration_record|. +// +// To ensure success, |out_w0| and |out_w1| must be of length |kVerifierSize|, +// and |out_registration_record| of size |kRegistrationRecordSize|. +[[nodiscard]] OPENSSL_EXPORT bool Register( + Span out_w0, Span out_w1, + Span out_registration_record, Span password, + Span id_prover, Span id_verifier); + +class OPENSSL_EXPORT Prover { + public: + static constexpr bool kAllowUniquePtr = true; + + Prover(); + ~Prover(); + + // Init creates a new prover, which can only be used for a single execution of + // the protocol. + // + // The |context| argument is an application-specific value meant to constrain + // the protocol execution. The |w0| and |w1| arguments are password verifier + // values computed during the offline registration phase of the protocol. The + // |id_prover| and |id_verifier| arguments allow optional, opaque names to be + // bound into the protocol. See the following for more information about how + // these identities may be chosen: + // https://www.rfc-editor.org/rfc/rfc9383.html#name-definition-of-spake2 + [[nodiscard]] bool Init(Span context, + Span id_prover, + Span id_verifier, + Span w0, Span w1, + Span x = Span()); + + // GenerateShare computes a SPAKE2+ share and writes it to |out_share|. + // + // This function can only be called once for a given |Prover|. To ensure + // success, |out_share| must be |kShareSize| bytes. + [[nodiscard]] bool GenerateShare(Span out_share); + + // ComputeConfirmation computes a SPAKE2+ key confirmation + // message and writes it to |out_confirm|. It also computes the shared secret + // and writes it to |out_secret|. + // + // This function can only be called once for a given |Prover|. + // + // To ensure success, |out_confirm| must be |kConfirmSize| bytes + // and |out_secret| must be |kSecretSize| bytes. + [[nodiscard]] bool ComputeConfirmation(Span out_confirm, + Span out_secret, + Span peer_share, + Span peer_confirm); + + private: + enum class State { + kInit, + kShareGenerated, + kConfirmGenerated, + kDone, + }; + + State state_ = State::kInit; + SHA256_CTX transcript_hash_; + EC_SCALAR w0_; + EC_SCALAR w1_; + EC_SCALAR x_; + EC_AFFINE X_; + uint8_t share_[kShareSize]; +}; + +class OPENSSL_EXPORT Verifier { + public: + static constexpr bool kAllowUniquePtr = true; + + Verifier(); + ~Verifier(); + + // Init creates a new verifier, which can only be used for a single execution + // of the protocol. + // + // The |context| argument is an application-specific value meant to constrain + // the protocol execution. The |w0| and |registration_record| arguments are + // required, and are computed by the prover via |Register|. Only the prover + // can produce |w0| and |registration_record|, as they require + // knowledge of the password. The prover must securely transmit this to the + // verifier out-of-band. The |id_prover| and |id_verifier| arguments allow + // optional, opaque names to be bound into the protocol. See the following for + // more information about how these identities may be chosen: + // https://www.rfc-editor.org/rfc/rfc9383.html#name-definition-of-spake2 + [[nodiscard]] bool Init(Span context, + Span id_prover, + Span id_verifier, + Span w0, + Span registration_record, + Span y = Span()); + + // ProcessProverShare computes a SPAKE2+ share from an input share, + // |prover_share|, and writes it to |out_share|. It also computes the key + // confirmation message and writes it to |out_confirm|. Finally, it computes + // the shared secret and writes it to |out_secret|. + // + // This function can only be called once for a given |Verifier|. + // + // To ensure success, |out_share| must be |kShareSize| bytes, |out_confirm| + // must be |kConfirmSize| bytes, and |out_secret| must be |kSecretSize| bytes. + [[nodiscard]] bool ProcessProverShare(Span out_share, + Span out_confirm, + Span out_secret, + Span prover_share); + + // VerifyProverConfirmation verifies a SPAKE2+ key confirmation message, + // |prover_confirm|. + // + // This function can only be called once for a given |Verifier|. + [[nodiscard]] bool VerifyProverConfirmation(Span peer_confirm); + + private: + enum class State { + kInit, + kProverShareSeen, + kDone, + }; + + State state_ = State::kInit; + SHA256_CTX transcript_hash_; + EC_SCALAR w0_; + EC_AFFINE L_; + EC_SCALAR y_; + uint8_t confirm_[kConfirmSize]; +}; + +} // namespace spake2plus + +BSSL_NAMESPACE_END + +#endif // OPENSSL_HEADER_SPAKE2PLUS_INTERNAL_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/spake2plus/spake2plus.cc b/naiveproxy/src/third_party/boringssl/src/crypto/spake2plus/spake2plus.cc new file mode 100644 index 0000000000..25dcc2d61d --- /dev/null +++ b/naiveproxy/src/third_party/boringssl/src/crypto/spake2plus/spake2plus.cc @@ -0,0 +1,501 @@ +// Copyright 2024 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../fipsmodule/bn/internal.h" +#include "../fipsmodule/ec/internal.h" +#include "../internal.h" +#include "./internal.h" +#include "openssl/err.h" + +BSSL_NAMESPACE_BEGIN +namespace spake2plus { +namespace { + +const uint8_t kDefaultAdditionalData[32] = {0}; + +// https://www.rfc-editor.org/rfc/rfc9383.html#appendix-B +// seed: 1.2.840.10045.3.1.7 point generation seed (M) +// M = +// 02886e2f97ace46e55ba9dd7242579f2993b64e16ef3dcab95afd497333d8fa12f +// +// `M` is interpreted as a X9.62-format compressed point. This is then the +// uncompressed form: +const uint8_t kM_bytes[] = { + 0x04, 0x88, 0x6e, 0x2f, 0x97, 0xac, 0xe4, 0x6e, 0x55, 0xba, 0x9d, + 0xd7, 0x24, 0x25, 0x79, 0xf2, 0x99, 0x3b, 0x64, 0xe1, 0x6e, 0xf3, + 0xdc, 0xab, 0x95, 0xaf, 0xd4, 0x97, 0x33, 0x3d, 0x8f, 0xa1, 0x2f, + 0x5f, 0xf3, 0x55, 0x16, 0x3e, 0x43, 0xce, 0x22, 0x4e, 0x0b, 0x0e, + 0x65, 0xff, 0x02, 0xac, 0x8e, 0x5c, 0x7b, 0xe0, 0x94, 0x19, 0xc7, + 0x85, 0xe0, 0xca, 0x54, 0x7d, 0x55, 0xa1, 0x2e, 0x2d, 0x20}; + +// https://www.rfc-editor.org/rfc/rfc9383.html#appendix-B +// seed: 1.2.840.10045.3.1.7 point generation seed (N) +// N = +// 03d8bbd6c639c62937b04d997f38c3770719c629d7014d49a24b4f98baa1292b49 +// +// `N` is interpreted as a X9.62-format compressed point. This is then the +// uncompressed form: +const uint8_t kN_bytes[] = { + 0x04, 0xd8, 0xbb, 0xd6, 0xc6, 0x39, 0xc6, 0x29, 0x37, 0xb0, 0x4d, + 0x99, 0x7f, 0x38, 0xc3, 0x77, 0x07, 0x19, 0xc6, 0x29, 0xd7, 0x01, + 0x4d, 0x49, 0xa2, 0x4b, 0x4f, 0x98, 0xba, 0xa1, 0x29, 0x2b, 0x49, + 0x07, 0xd6, 0x0a, 0xa6, 0xbf, 0xad, 0xe4, 0x50, 0x08, 0xa6, 0x36, + 0x33, 0x7f, 0x51, 0x68, 0xc6, 0x4d, 0x9b, 0xd3, 0x60, 0x34, 0x80, + 0x8c, 0xd5, 0x64, 0x49, 0x0b, 0x1e, 0x65, 0x6e, 0xdb, 0xe7}; + +void UpdateWithLengthPrefix(SHA256_CTX *sha, Span data) { + uint8_t len_le[8]; + CRYPTO_store_u64_le(len_le, data.size()); + SHA256_Update(sha, len_le, sizeof(len_le)); + SHA256_Update(sha, data.data(), data.size()); +} + +void ConstantToJacobian(const EC_GROUP *group, EC_JACOBIAN *out, + bssl::Span in) { + EC_AFFINE point; + BSSL_CHECK(ec_point_from_uncompressed(group, &point, in.data(), in.size())); + ec_affine_to_jacobian(group, out, &point); +} + +void ScalarToSizedBuffer(const EC_GROUP *group, const EC_SCALAR *s, + Span out_buf) { + size_t out_bytes; + ec_scalar_to_bytes(group, out_buf.data(), &out_bytes, s); + BSSL_CHECK(out_bytes == out_buf.size()); +} + +bool AddLengthPrefixed(CBB *cbb, Span bytes) { + return CBB_add_u64le(cbb, bytes.size()) && + CBB_add_bytes(cbb, bytes.data(), bytes.size()); +} + +void InitTranscriptHash(SHA256_CTX *sha, Span context, + Span id_prover, + Span id_verifier) { + SHA256_Init(sha); + UpdateWithLengthPrefix(sha, context); + UpdateWithLengthPrefix(sha, id_prover); + UpdateWithLengthPrefix(sha, id_verifier); + UpdateWithLengthPrefix(sha, kM_bytes); + UpdateWithLengthPrefix(sha, kN_bytes); +} + +bool ComputeTranscript(uint8_t out_prover_confirm[kConfirmSize], + uint8_t out_verifier_confirm[kConfirmSize], + uint8_t out_secret[kSecretSize], + const uint8_t prover_share[kShareSize], + const uint8_t verifier_share[kShareSize], + SHA256_CTX *sha, const EC_AFFINE *Z, const EC_AFFINE *V, + const EC_SCALAR *w0) { + const EC_GROUP *group = EC_group_p256(); + + uint8_t Z_enc[kShareSize]; + size_t Z_enc_len = ec_point_to_bytes(group, Z, POINT_CONVERSION_UNCOMPRESSED, + Z_enc, sizeof(Z_enc)); + BSSL_CHECK(Z_enc_len == sizeof(Z_enc)); + + uint8_t V_enc[kShareSize]; + size_t V_enc_len = ec_point_to_bytes(group, V, POINT_CONVERSION_UNCOMPRESSED, + V_enc, sizeof(V_enc)); + BSSL_CHECK(V_enc_len == sizeof(V_enc)); + + uint8_t w0_enc[kVerifierSize]; + ScalarToSizedBuffer(group, w0, w0_enc); + + uint8_t K_main[SHA256_DIGEST_LENGTH]; + UpdateWithLengthPrefix(sha, Span(prover_share, kShareSize)); + UpdateWithLengthPrefix(sha, Span(verifier_share, kShareSize)); + UpdateWithLengthPrefix(sha, Z_enc); + UpdateWithLengthPrefix(sha, V_enc); + UpdateWithLengthPrefix(sha, w0_enc); + SHA256_Final(K_main, sha); + + auto confirmation_str = StringAsBytes("ConfirmationKeys"); + uint8_t keys[kSecretSize * 2]; + if (!HKDF(keys, sizeof(keys), EVP_sha256(), K_main, sizeof(K_main), nullptr, + 0, confirmation_str.data(), confirmation_str.size())) { + return false; + } + + auto secret_info_str = StringAsBytes("SharedKey"); + if (!HKDF(out_secret, kSecretSize, EVP_sha256(), K_main, sizeof(K_main), + nullptr, 0, secret_info_str.data(), secret_info_str.size())) { + return false; + } + + unsigned prover_confirm_len; + if (HMAC(EVP_sha256(), keys, kSecretSize, verifier_share, kShareSize, + out_prover_confirm, &prover_confirm_len) == nullptr) { + return false; + } + BSSL_CHECK(prover_confirm_len == kConfirmSize); + + unsigned verifier_confirm_len; + if (HMAC(EVP_sha256(), keys + kSecretSize, kSecretSize, prover_share, + kShareSize, out_verifier_confirm, + &verifier_confirm_len) == nullptr) { + return false; + } + BSSL_CHECK(verifier_confirm_len == kConfirmSize); + + return true; +} + +} // namespace + +bool Register(Span out_w0, Span out_w1, + Span out_registration_record, + Span password, Span id_prover, + Span id_verifier) { + if (out_w0.size() != kVerifierSize || out_w1.size() != kVerifierSize || + out_registration_record.size() != kRegistrationRecordSize) { + OPENSSL_PUT_ERROR(CRYPTO, ERR_R_INTERNAL_ERROR); + return false; + } + + // Offline registration format from: + // https://www.rfc-editor.org/rfc/rfc9383.html#section-3.2 + ScopedCBB mhf_input; + if (!CBB_init(mhf_input.get(), password.size() + id_prover.size() + + id_verifier.size() + + 3 * sizeof(uint64_t)) || // + !AddLengthPrefixed(mhf_input.get(), password) || + !AddLengthPrefixed(mhf_input.get(), id_prover) || + !AddLengthPrefixed(mhf_input.get(), id_verifier) || + !CBB_flush(mhf_input.get())) { + OPENSSL_PUT_ERROR(CRYPTO, ERR_R_INTERNAL_ERROR); + return false; + } + + // https://neuromancer.sk/std/nist/P-256 + // sage: p = + // 0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff + // ....: K = GF(p) + // ....: a = + // K(0xffffffff00000001000000000000000000000000fffffffffffffffffffffffc) + // ....: b = + // K(0x5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b) + // ....: E = EllipticCurve(K, (a, b)) + // ....: G = + // E(0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296, + // ....: 0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5) + // ....: + // E.set_order(0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63 + // ....: 2551 * 0x1) + // sage: k = 64 + // sage: L = (2 * (ceil(log(p)/log(2)) + k)) / 8 + + // RFC 9383 Section 3.2 + constexpr size_t kKDFOutputSize = 80; + constexpr size_t kKDFOutputWords = kKDFOutputSize / BN_BYTES; + + uint8_t key[kKDFOutputSize]; + if (!EVP_PBE_scrypt((const char *)CBB_data(mhf_input.get()), + CBB_len(mhf_input.get()), nullptr, 0, + /*N=*/32768, /*r=*/8, /*p=*/1, + /*max_mem=*/1024 * 1024 * 33, key, kKDFOutputSize)) { + OPENSSL_PUT_ERROR(CRYPTO, ERR_R_INTERNAL_ERROR); + return false; + } + + const EC_GROUP *group = EC_group_p256(); + BN_ULONG w0_words[kKDFOutputWords / 2]; + bn_big_endian_to_words(w0_words, kKDFOutputWords / 2, key, + kKDFOutputSize / 2); + EC_SCALAR w0; + ec_scalar_reduce(group, &w0, w0_words, kKDFOutputWords / 2); + ScalarToSizedBuffer(group, &w0, out_w0); + + BN_ULONG w1_words[kKDFOutputWords / 2]; + bn_big_endian_to_words(w1_words, kKDFOutputWords / 2, + key + kKDFOutputSize / 2, kKDFOutputSize / 2); + EC_SCALAR w1; + ec_scalar_reduce(group, &w1, w1_words, kKDFOutputWords / 2); + ScalarToSizedBuffer(group, &w1, out_w1); + + EC_JACOBIAN L_j; + EC_AFFINE L; + if (!ec_point_mul_scalar_base(group, &L_j, &w1) || // + !ec_jacobian_to_affine(group, &L, &L_j) || // + !ec_point_to_bytes(group, &L, POINT_CONVERSION_UNCOMPRESSED, + out_registration_record.data(), + kRegistrationRecordSize)) { + OPENSSL_PUT_ERROR(CRYPTO, ERR_R_INTERNAL_ERROR); + return false; + } + + return true; +} + +Prover::Prover() = default; +Prover::~Prover() = default; + +bool Prover::Init(Span context, Span id_prover, + Span id_verifier, Span w0, + Span w1, Span x) { + const EC_GROUP *group = EC_group_p256(); + + if (!ec_scalar_from_bytes(group, &w0_, w0.data(), w0.size()) || + !ec_scalar_from_bytes(group, &w1_, w1.data(), w1.size()) || + (!x.empty() && + !ec_scalar_from_bytes(group, &x_, x.data(), x.size())) || // + (x.empty() && !ec_random_scalar(group, &x_, kDefaultAdditionalData))) { + OPENSSL_PUT_ERROR(CRYPTO, ERR_R_INTERNAL_ERROR); + return false; + } + + InitTranscriptHash(&transcript_hash_, context, id_prover, id_verifier); + + return true; +} + +bool Prover::GenerateShare(Span out_share) { + if (state_ != State::kInit || out_share.size() != kShareSize) { + OPENSSL_PUT_ERROR(CRYPTO, ERR_R_INTERNAL_ERROR); + return false; + } + + // Compute X = x×P + w0×M. + // TODO(crbug.com/383778231): This could be sped up with a constant-time, + // two-point multiplication. + const EC_GROUP *group = EC_group_p256(); + EC_JACOBIAN l; + if (!ec_point_mul_scalar_base(group, &l, &x_)) { + OPENSSL_PUT_ERROR(CRYPTO, ERR_R_INTERNAL_ERROR); + return false; + } + + EC_JACOBIAN M_j; + ConstantToJacobian(group, &M_j, kM_bytes); + + EC_JACOBIAN r; + if (!ec_point_mul_scalar(group, &r, &M_j, &w0_)) { + OPENSSL_PUT_ERROR(CRYPTO, ERR_R_INTERNAL_ERROR); + return false; + } + + EC_JACOBIAN X_j; + group->meth->add(group, &X_j, &l, &r); + if (!ec_jacobian_to_affine(group, &X_, &X_j)) { + OPENSSL_PUT_ERROR(CRYPTO, ERR_R_INTERNAL_ERROR); + return false; + } + + size_t written = ec_point_to_bytes(group, &X_, POINT_CONVERSION_UNCOMPRESSED, + out_share.data(), kShareSize); + BSSL_CHECK(written == kShareSize); + + memcpy(share_, out_share.data(), kShareSize); + state_ = State::kShareGenerated; + return true; +} + +bool Prover::ComputeConfirmation(Span out_confirm, + Span out_secret, + Span peer_share, + Span peer_confirm) { + if (state_ != State::kShareGenerated || out_confirm.size() != kConfirmSize || + out_secret.size() != kSecretSize || peer_share.size() != kShareSize || + peer_confirm.size() != kConfirmSize) { + OPENSSL_PUT_ERROR(CRYPTO, ERR_R_INTERNAL_ERROR); + return false; + } + + const EC_GROUP *group = EC_group_p256(); + EC_AFFINE Y; + if (!ec_point_from_uncompressed(group, &Y, peer_share.data(), + peer_share.size())) { + OPENSSL_PUT_ERROR(CRYPTO, ERR_R_INTERNAL_ERROR); + return false; + } + + EC_JACOBIAN N_j; + ConstantToJacobian(group, &N_j, kN_bytes); + + EC_JACOBIAN r; + if (!ec_point_mul_scalar(group, &r, &N_j, &w0_)) { + OPENSSL_PUT_ERROR(CRYPTO, ERR_R_INTERNAL_ERROR); + return false; + } + + ec_felem_neg(group, &r.Y, &r.Y); + + EC_JACOBIAN Y_j; + ec_affine_to_jacobian(group, &Y_j, &Y); + + EC_JACOBIAN t; + group->meth->add(group, &t, &Y_j, &r); + + EC_JACOBIAN tmp; + EC_AFFINE Z, V; + // TODO(crbug.com/383778231): The two affine conversions could be batched + // together. + if (!ec_point_mul_scalar(group, &tmp, &t, &x_) || // + !ec_jacobian_to_affine(group, &Z, &tmp) || // + !ec_point_mul_scalar(group, &tmp, &t, &w1_) || // + !ec_jacobian_to_affine(group, &V, &tmp)) { + return 0; + } + + uint8_t verifier_confirm[kConfirmSize]; + if (!ComputeTranscript(out_confirm.data(), verifier_confirm, + out_secret.data(), share_, peer_share.data(), + &transcript_hash_, &Z, &V, &w0_) || + CRYPTO_memcmp(verifier_confirm, peer_confirm.data(), + sizeof(verifier_confirm)) != 0) { + return 0; + } + + state_ = State::kDone; + return true; +} + +Verifier::Verifier() = default; +Verifier::~Verifier() = default; + +bool Verifier::Init(Span context, Span id_prover, + Span id_verifier, Span w0, + Span registration_record, + Span y) { + const EC_GROUP *group = EC_group_p256(); + + if (!ec_scalar_from_bytes(group, &w0_, w0.data(), w0.size()) || + !ec_point_from_uncompressed(group, &L_, registration_record.data(), + registration_record.size()) || // + (!y.empty() && + !ec_scalar_from_bytes(group, &y_, y.data(), y.size())) || // + (y.empty() && !ec_random_scalar(group, &y_, kDefaultAdditionalData))) { + OPENSSL_PUT_ERROR(CRYPTO, ERR_R_INTERNAL_ERROR); + return false; + } + + InitTranscriptHash(&transcript_hash_, context, id_prover, id_verifier); + + return true; +} + + +bool Verifier::ProcessProverShare(Span out_share, + Span out_confirm, + Span out_secret, + Span prover_share) { + if (state_ != State::kInit || // + out_share.size() != kShareSize || out_confirm.size() != kConfirmSize || + out_secret.size() != kSecretSize || prover_share.size() != kShareSize) { + OPENSSL_PUT_ERROR(CRYPTO, ERR_R_INTERNAL_ERROR); + return false; + } + + const EC_GROUP *group = EC_group_p256(); + EC_JACOBIAN l, r, M_j, N_j; + ConstantToJacobian(group, &M_j, kM_bytes); + ConstantToJacobian(group, &N_j, kN_bytes); + + // Compute Y = y×P + w0×M. + // TODO(crbug.com/383778231): This could be sped up with a constant-time, + // two-point multiplication. + if (!ec_point_mul_scalar_base(group, &l, &y_) || + !ec_point_mul_scalar(group, &r, &N_j, &w0_)) { + OPENSSL_PUT_ERROR(CRYPTO, ERR_R_INTERNAL_ERROR); + return false; + } + + EC_JACOBIAN Y_j; + EC_AFFINE Y; + group->meth->add(group, &Y_j, &l, &r); + if (!ec_jacobian_to_affine(group, &Y, &Y_j)) { + OPENSSL_PUT_ERROR(CRYPTO, ERR_R_INTERNAL_ERROR); + return false; + } + + const size_t written = ec_point_to_bytes( + group, &Y, POINT_CONVERSION_UNCOMPRESSED, out_share.data(), kShareSize); + BSSL_CHECK(written == kShareSize); + + EC_JACOBIAN r2; + EC_AFFINE X; + if (!ec_point_from_uncompressed(group, &X, prover_share.data(), + prover_share.size()) || + !ec_point_mul_scalar(group, &r2, &M_j, &w0_)) { + OPENSSL_PUT_ERROR(CRYPTO, ERR_R_INTERNAL_ERROR); + return false; + } + + ec_felem_neg(group, &r2.Y, &r2.Y); + + EC_JACOBIAN X_j, T; + ec_affine_to_jacobian(group, &X_j, &X); + group->meth->add(group, &T, &X_j, &r2); + + // TODO(crbug.com/383778231): The two affine conversions could be batched + // together. + EC_JACOBIAN tmp; + EC_AFFINE Z; + if (!ec_point_mul_scalar(group, &tmp, &T, &y_) || // + !ec_jacobian_to_affine(group, &Z, &tmp)) { + OPENSSL_PUT_ERROR(CRYPTO, ERR_R_INTERNAL_ERROR); + return false; + } + + EC_JACOBIAN L_j; + EC_AFFINE V; + ec_affine_to_jacobian(group, &L_j, &L_); + if (!ec_point_mul_scalar(group, &tmp, &L_j, &y_) || // + !ec_jacobian_to_affine(group, &V, &tmp)) { + OPENSSL_PUT_ERROR(CRYPTO, ERR_R_INTERNAL_ERROR); + return false; + } + + if (!ComputeTranscript(confirm_, out_confirm.data(), out_secret.data(), + prover_share.data(), out_share.data(), + &transcript_hash_, &Z, &V, &w0_)) { + OPENSSL_PUT_ERROR(CRYPTO, ERR_R_INTERNAL_ERROR); + return false; + } + + state_ = State::kProverShareSeen; + return true; +} + +bool Verifier::VerifyProverConfirmation(Span peer_confirm) { + if (state_ != State::kProverShareSeen || // + peer_confirm.size() != kConfirmSize || // + CRYPTO_memcmp(confirm_, peer_confirm.data(), sizeof(confirm_)) != 0) { + OPENSSL_PUT_ERROR(CRYPTO, ERR_R_INTERNAL_ERROR); + return false; + } + + state_ = State::kDone; + return true; +} + +} // namespace spake2plus + +BSSL_NAMESPACE_END diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/stack/stack.cc b/naiveproxy/src/third_party/boringssl/src/crypto/stack/stack.cc index 6635501716..bbe5eb748e 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/stack/stack.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/stack/stack.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/test/abi_test.h b/naiveproxy/src/third_party/boringssl/src/crypto/test/abi_test.h index cbbd15bf71..bb5ae949a7 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/test/abi_test.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/test/abi_test.h @@ -1,16 +1,16 @@ -/* Copyright 2018 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2018 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_ABI_TEST_H #define OPENSSL_HEADER_ABI_TEST_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/test/asm/trampoline-armv4.pl b/naiveproxy/src/third_party/boringssl/src/crypto/test/asm/trampoline-armv4.pl index 7f61128351..9097a41faf 100755 --- a/naiveproxy/src/third_party/boringssl/src/crypto/test/asm/trampoline-armv4.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/test/asm/trampoline-armv4.pl @@ -1,17 +1,17 @@ #!/usr/bin/env perl # Copyright 2019 The BoringSSL Authors # -# Permission to use, copy, modify, and/or distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at # -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # This file defines helper functions for crypto/test/abi_test.h on 32-bit # ARM. See that header for details on how to use this. diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/test/asm/trampoline-armv8.pl b/naiveproxy/src/third_party/boringssl/src/crypto/test/asm/trampoline-armv8.pl index b52cadebd0..d36160d248 100755 --- a/naiveproxy/src/third_party/boringssl/src/crypto/test/asm/trampoline-armv8.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/test/asm/trampoline-armv8.pl @@ -1,17 +1,17 @@ #!/usr/bin/env perl # Copyright 2019 The BoringSSL Authors # -# Permission to use, copy, modify, and/or distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at # -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # This file defines helper functions for crypto/test/abi_test.h on aarch64. See # that header for details on how to use this. diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/test/asm/trampoline-x86.pl b/naiveproxy/src/third_party/boringssl/src/crypto/test/asm/trampoline-x86.pl index 977853bf21..fcd67be718 100755 --- a/naiveproxy/src/third_party/boringssl/src/crypto/test/asm/trampoline-x86.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/test/asm/trampoline-x86.pl @@ -1,17 +1,17 @@ #!/usr/bin/env perl # Copyright 2018 The BoringSSL Authors # -# Permission to use, copy, modify, and/or distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at # -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # This file defines helper functions for crypto/test/abi_test.h on x86. See # that header for details on how to use this. diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/test/asm/trampoline-x86_64.pl b/naiveproxy/src/third_party/boringssl/src/crypto/test/asm/trampoline-x86_64.pl index 9e074ff400..737299eab3 100755 --- a/naiveproxy/src/third_party/boringssl/src/crypto/test/asm/trampoline-x86_64.pl +++ b/naiveproxy/src/third_party/boringssl/src/crypto/test/asm/trampoline-x86_64.pl @@ -1,17 +1,17 @@ #!/usr/bin/env perl # Copyright 2018 The BoringSSL Authors # -# Permission to use, copy, modify, and/or distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at # -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # This file defines helper functions for crypto/test/abi_test.h on x86_64. See # that header for details on how to use this. diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/test/file_test.h b/naiveproxy/src/third_party/boringssl/src/crypto/test/file_test.h index 305e56db48..b35056f7c9 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/test/file_test.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/test/file_test.h @@ -1,16 +1,16 @@ -/* Copyright 2015 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2015 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_CRYPTO_TEST_FILE_TEST_H #define OPENSSL_HEADER_CRYPTO_TEST_FILE_TEST_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/test/file_test_gtest.cc b/naiveproxy/src/third_party/boringssl/src/crypto/test/file_test_gtest.cc index 2f83c297a7..47a2653c9a 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/test/file_test_gtest.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/test/file_test_gtest.cc @@ -1,16 +1,16 @@ -/* Copyright 2017 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2017 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "file_test.h" diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/test/file_util.cc b/naiveproxy/src/third_party/boringssl/src/crypto/test/file_util.cc index 0fcdb3fdf6..6a9c0ba843 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/test/file_util.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/test/file_util.cc @@ -1,16 +1,16 @@ -/* Copyright 2023 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2023 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "file_util.h" diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/test/file_util.h b/naiveproxy/src/third_party/boringssl/src/crypto/test/file_util.h index 01f524a017..78c782c39b 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/test/file_util.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/test/file_util.h @@ -1,16 +1,16 @@ -/* Copyright 2023 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2023 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_CRYPTO_TEST_FILE_UTIL_H #define OPENSSL_HEADER_CRYPTO_TEST_FILE_UTIL_H @@ -20,6 +20,7 @@ #include #include #include +#include #include #include @@ -95,9 +96,8 @@ class TemporaryFile { // true on success and false on error. On error, callers should call // |IgnoreTempFileErrors| to determine whether to ignore the error. bool Init(bssl::Span content = {}); - bool Init(const std::string &content) { - return Init(bssl::MakeConstSpan( - reinterpret_cast(content.data()), content.size())); + bool Init(std::string_view content) { + return Init(bssl::StringAsBytes(content)); } // Open opens the file as a |FILE| with the specified mode. @@ -139,14 +139,11 @@ class TemporaryDirectory { // It returns true on success and false on error. Subdirectories in the // temporary directory are not currently supported. bool AddFile(const std::string &filename, bssl::Span content); - bool AddFile(const std::string &filename, const std::string &content) { - return AddFile( - filename, - bssl::MakeConstSpan(reinterpret_cast(content.data()), - content.size())); + bool AddFile(const std::string &filename, std::string_view content) { + return AddFile(filename, bssl::StringAsBytes(content)); } - // GetFilePath returns the path to the speciifed file within the temporary + // GetFilePath returns the path to the specified file within the temporary // directory. std::string GetFilePath(const std::string &filename) { #if defined(OPENSSL_WINDOWS) diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/test/gtest_main.cc b/naiveproxy/src/third_party/boringssl/src/crypto/test/gtest_main.cc index 091369b722..62b2484b7f 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/test/gtest_main.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/test/gtest_main.cc @@ -1,16 +1,16 @@ -/* Copyright 2016 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2016 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/test/gtest_main.h b/naiveproxy/src/third_party/boringssl/src/crypto/test/gtest_main.h index 6f21c38189..fee5fe3342 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/test/gtest_main.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/test/gtest_main.h @@ -1,16 +1,16 @@ -/* Copyright 2017 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2017 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_CRYPTO_TEST_GTEST_MAIN_H #define OPENSSL_HEADER_CRYPTO_TEST_GTEST_MAIN_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/test/test_data.cc b/naiveproxy/src/third_party/boringssl/src/crypto/test/test_data.cc index d2951cf23b..15a2051e98 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/test/test_data.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/test/test_data.cc @@ -1,16 +1,16 @@ -/* Copyright 2024 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2024 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "test_data.h" diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/test/test_data.h b/naiveproxy/src/third_party/boringssl/src/crypto/test/test_data.h index 0e22656a0c..a1e3ce1e05 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/test/test_data.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/test/test_data.h @@ -1,16 +1,16 @@ -/* Copyright 2024 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2024 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_CRYPTO_TEST_TEST_DATA_H #define OPENSSL_HEADER_CRYPTO_TEST_TEST_DATA_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/test/test_util.cc b/naiveproxy/src/third_party/boringssl/src/crypto/test/test_util.cc index 51f0428f42..78ce8d882c 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/test/test_util.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/test/test_util.cc @@ -1,16 +1,16 @@ -/* Copyright 2015 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2015 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "test_util.h" diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/test/test_util.h b/naiveproxy/src/third_party/boringssl/src/crypto/test/test_util.h index 7815093a6d..b7671c166a 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/test/test_util.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/test/test_util.h @@ -1,16 +1,16 @@ -/* Copyright 2015 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2015 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_CRYPTO_TEST_TEST_UTIL_H #define OPENSSL_HEADER_CRYPTO_TEST_TEST_UTIL_H @@ -21,7 +21,7 @@ #include #include -#include +#include #include #include @@ -43,12 +43,8 @@ struct Bytes { Bytes(const char *data_arg, size_t len_arg) : span_(reinterpret_cast(data_arg), len_arg) {} - explicit Bytes(const char *str) - : span_(reinterpret_cast(str), strlen(str)) {} - explicit Bytes(const std::string &str) - : span_(reinterpret_cast(str.data()), str.size()) {} - explicit Bytes(bssl::Span span) - : span_(span) {} + explicit Bytes(std::string_view str) : span_(bssl::StringAsBytes(str)) {} + explicit Bytes(bssl::Span span) : span_(span) {} bssl::Span span_; }; diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/test/wycheproof_util.cc b/naiveproxy/src/third_party/boringssl/src/crypto/test/wycheproof_util.cc index bf3e247b08..bc99694fa1 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/test/wycheproof_util.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/test/wycheproof_util.cc @@ -1,16 +1,16 @@ -/* Copyright 2018 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2018 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "./wycheproof_util.h" diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/test/wycheproof_util.h b/naiveproxy/src/third_party/boringssl/src/crypto/test/wycheproof_util.h index ff9f3ceb0e..e9d0190e7d 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/test/wycheproof_util.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/test/wycheproof_util.h @@ -1,16 +1,16 @@ -/* Copyright 2018 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2018 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_CRYPTO_TEST_WYCHEPROOF_UTIL_H #define OPENSSL_HEADER_CRYPTO_TEST_WYCHEPROOF_UTIL_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/thread.cc b/naiveproxy/src/third_party/boringssl/src/crypto/thread.cc index b3755ce6b1..16c20b188c 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/thread.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/thread.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/thread_none.cc b/naiveproxy/src/third_party/boringssl/src/crypto/thread_none.cc index c43928b2a4..b5bc01fb1d 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/thread_none.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/thread_none.cc @@ -1,16 +1,16 @@ -/* Copyright 2015 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2015 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "internal.h" diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/thread_pthread.cc b/naiveproxy/src/third_party/boringssl/src/crypto/thread_pthread.cc index 2dcb409b64..307effb6c7 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/thread_pthread.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/thread_pthread.cc @@ -1,16 +1,16 @@ -/* Copyright 2015 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2015 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // Ensure we can't call OPENSSL_malloc circularly. #define _BORINGSSL_PROHIBIT_OPENSSL_MALLOC diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/thread_win.cc b/naiveproxy/src/third_party/boringssl/src/crypto/thread_win.cc index 855b1b0091..e50fc629fd 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/thread_win.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/thread_win.cc @@ -1,16 +1,16 @@ -/* Copyright 2015 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2015 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // Ensure we can't call OPENSSL_malloc circularly. #define _BORINGSSL_PROHIBIT_OPENSSL_MALLOC diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/trust_token/internal.h b/naiveproxy/src/third_party/boringssl/src/crypto/trust_token/internal.h index 7a5f5b2476..308a8e8b22 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/trust_token/internal.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/trust_token/internal.h @@ -1,16 +1,16 @@ -/* Copyright 2019 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2019 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_TRUST_TOKEN_INTERNAL_H #define OPENSSL_HEADER_TRUST_TOKEN_INTERNAL_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/trust_token/pmbtoken.cc b/naiveproxy/src/third_party/boringssl/src/crypto/trust_token/pmbtoken.cc index b2a138c7cb..09b5de2832 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/trust_token/pmbtoken.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/trust_token/pmbtoken.cc @@ -1,16 +1,16 @@ -/* Copyright 2020 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2020 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include @@ -23,7 +23,7 @@ #include #include -#include "../ec_extra/internal.h" +#include "../ec/internal.h" #include "../fipsmodule/bn/internal.h" #include "../fipsmodule/ec/internal.h" diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/trust_token/trust_token.cc b/naiveproxy/src/third_party/boringssl/src/crypto/trust_token/trust_token.cc index b345216f35..41ef6b7d65 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/trust_token/trust_token.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/trust_token/trust_token.cc @@ -1,16 +1,16 @@ -/* Copyright 2019 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2019 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include @@ -23,7 +23,7 @@ // The Trust Token API is described in -// https://github.com/WICG/trust-token-api/blob/master/README.md and provides a +// https://github.com/WICG/trust-token-api/blob/main/README.md and provides a // protocol for issuing and redeeming tokens built on top of the PMBTokens // construction. diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/trust_token/voprf.cc b/naiveproxy/src/third_party/boringssl/src/crypto/trust_token/voprf.cc index baf89cd08c..02ba58d403 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/trust_token/voprf.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/trust_token/voprf.cc @@ -1,16 +1,16 @@ -/* Copyright 2020 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2020 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include @@ -23,7 +23,7 @@ #include #include -#include "../ec_extra/internal.h" +#include "../ec/internal.h" #include "../fipsmodule/ec/internal.h" #include "internal.h" diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/a_digest.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/a_digest.cc index e76a5233d2..f3ddf73acd 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/a_digest.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/a_digest.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/a_sign.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/a_sign.cc index 0d9317dbe3..a790cbf2fa 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/a_sign.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/a_sign.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/a_verify.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/a_verify.cc index 2b04b25b2b..58085eddbb 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/a_verify.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/a_verify.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/algorithm.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/algorithm.cc index dca5df6ea0..5e86014bd5 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/algorithm.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/algorithm.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/asn1_gen.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/asn1_gen.cc index d08026e86d..6b9769fc5b 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/asn1_gen.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/asn1_gen.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/by_dir.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/by_dir.cc index 7f8781482a..5287d3e13a 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/by_dir.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/by_dir.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include @@ -203,7 +208,7 @@ static int get_cert_by_subject(X509_LOOKUP *xl, int type, X509_NAME *name, uint32_t h; uint32_t hash_array[2]; int hash_index; - BUF_MEM *b = NULL; + char *b = NULL; X509_OBJECT stmp, *tmp; const char *postfix = ""; @@ -228,11 +233,6 @@ static int get_cert_by_subject(X509_LOOKUP *xl, int type, X509_NAME *name, goto finish; } - if ((b = BUF_MEM_new()) == NULL) { - OPENSSL_PUT_ERROR(X509, ERR_R_BUF_LIB); - goto finish; - } - hash_array[0] = X509_NAME_hash(name); hash_array[1] = X509_NAME_hash_old(name); for (hash_index = 0; hash_index < 2; ++hash_index) { @@ -242,12 +242,6 @@ static int get_cert_by_subject(X509_LOOKUP *xl, int type, X509_NAME *name, size_t idx; BY_DIR_HASH htmp, *hent; ent = sk_BY_DIR_ENTRY_value(ctx->dirs, i); - if (!BUF_MEM_grow(b, strlen(ent->dir) + /* foreslash */ 1 + - /* h, in hex */ 8 + /* period */ 1 + - /* optional `postfix` */ 1 + - /* k */ DECIMAL_SIZE(k) + /* NUL */ 1)) { - goto finish; - } if (type == X509_LU_CRL && ent->hashes) { htmp.hash = h; CRYPTO_MUTEX_lock_read(&ent->lock); @@ -264,17 +258,22 @@ static int get_cert_by_subject(X509_LOOKUP *xl, int type, X509_NAME *name, hent = NULL; } for (;;) { - snprintf(b->data, b->max, "%s/%08" PRIx32 ".%s%d", ent->dir, h, postfix, - k); + OPENSSL_free(b); + if (OPENSSL_asprintf(&b, "%s/%08" PRIx32 ".%s%d", ent->dir, h, postfix, + k) == -1) { + OPENSSL_PUT_ERROR(X509, ERR_R_BUF_LIB); + b = nullptr; + goto finish; + } if (type == X509_LU_X509) { - if ((X509_load_cert_file(xl, b->data, ent->dir_type)) == 0) { + if ((X509_load_cert_file(xl, b, ent->dir_type)) == 0) { // Don't expose the lower level error, All of these boil // down to "we could not find a CA". ERR_clear_error(); break; } } else if (type == X509_LU_CRL) { - if ((X509_load_crl_file(xl, b->data, ent->dir_type)) == 0) { + if ((X509_load_crl_file(xl, b, ent->dir_type)) == 0) { // Don't expose the lower level error, All of these boil // down to "we could not find a CRL". ERR_clear_error(); @@ -347,7 +346,7 @@ static int get_cert_by_subject(X509_LOOKUP *xl, int type, X509_NAME *name, } } finish: - BUF_MEM_free(b); + OPENSSL_free(b); return ok; } diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/by_file.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/by_file.cc index 03532656a0..16876df0ac 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/by_file.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/by_file.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/ext_dat.h b/naiveproxy/src/third_party/boringssl/src/crypto/x509/ext_dat.h index ec7a7fec68..fddb1b8bae 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/ext_dat.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/ext_dat.h @@ -1,11 +1,16 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // This file contains a table of "standard" extensions diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/i2d_pr.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/i2d_pr.cc index 6dce449b2e..c8ec62168d 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/i2d_pr.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/i2d_pr.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/internal.h b/naiveproxy/src/third_party/boringssl/src/crypto/x509/internal.h index 2755d5ab24..7e92c1f91c 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/internal.h +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/internal.h @@ -1,11 +1,16 @@ -/* - * Copyright 2013-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2013-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_X509_INTERNAL_H #define OPENSSL_HEADER_X509_INTERNAL_H diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/name_print.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/name_print.cc index 9d99b6f66a..3e41ba80f7 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/name_print.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/name_print.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/policy.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/policy.cc index fefc416398..453576a903 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/policy.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/policy.cc @@ -1,16 +1,16 @@ -/* Copyright 2022 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2022 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/rsa_pss.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/rsa_pss.cc index 3561b8391a..5449bef21a 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/rsa_pss.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/rsa_pss.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/t_crl.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/t_crl.cc index 1df61f4e28..aca2df0157 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/t_crl.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/t_crl.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/t_req.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/t_req.cc index 68b98d92e6..2f557e532b 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/t_req.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/t_req.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/t_x509.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/t_x509.cc index df059a2212..fffe63a0f9 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/t_x509.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/t_x509.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/t_x509a.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/t_x509a.cc index 341c73109c..1853baed98 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/t_x509a.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/t_x509a.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/test/make_basic_constraints.go b/naiveproxy/src/third_party/boringssl/src/crypto/x509/test/make_basic_constraints.go index 30787ac0cd..0f51aba2fd 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/test/make_basic_constraints.go +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/test/make_basic_constraints.go @@ -1,16 +1,16 @@ // Copyright 2020 The BoringSSL Authors // -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at // -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. //go:build ignore diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/test/make_invalid_extensions.go b/naiveproxy/src/third_party/boringssl/src/crypto/x509/test/make_invalid_extensions.go index e0d55da0a4..1a712cca3b 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/test/make_invalid_extensions.go +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/test/make_invalid_extensions.go @@ -1,16 +1,16 @@ // Copyright 2020 The BoringSSL Authors // -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at // -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. //go:build ignore diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/test/make_many_constraints.go b/naiveproxy/src/third_party/boringssl/src/crypto/x509/test/make_many_constraints.go index 8ad9eaa0e9..8a06b372ef 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/test/make_many_constraints.go +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/test/make_many_constraints.go @@ -1,16 +1,16 @@ // Copyright 2017 The BoringSSL Authors // -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at // -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. //go:build ignore diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/test/make_policy_certs.go b/naiveproxy/src/third_party/boringssl/src/crypto/x509/test/make_policy_certs.go index 7a6e5a4eff..73784477d0 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/test/make_policy_certs.go +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/test/make_policy_certs.go @@ -1,16 +1,16 @@ // Copyright 2020 The BoringSSL Authors // -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at // -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. //go:build ignore diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_akey.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_akey.cc index 96a77f5c51..e92775f924 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_akey.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_akey.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_akeya.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_akeya.cc index 8359da3ea9..d5a84601d3 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_akeya.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_akeya.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_alt.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_alt.cc index 7b9fb0aef9..7cb7ae6ca3 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_alt.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_alt.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_bcons.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_bcons.cc index b393e959be..1156f4a16f 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_bcons.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_bcons.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_bitst.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_bitst.cc index 2c9106db46..6d1a450d70 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_bitst.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_bitst.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_conf.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_conf.cc index 50b157b3d0..8b755d3683 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_conf.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_conf.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // extension creation utilities diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_cpols.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_cpols.cc index b7de2a930a..46b71181d8 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_cpols.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_cpols.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_crld.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_crld.cc index c109396bb9..df9652aeb4 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_crld.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_crld.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_enum.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_enum.cc index 369835ea69..e1d1f34291 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_enum.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_enum.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_extku.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_extku.cc index 4f502a68c5..2aa14d5d6d 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_extku.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_extku.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_genn.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_genn.cc index 90d4b96a44..63d4cf25e0 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_genn.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_genn.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_ia5.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_ia5.cc index ae7df214fd..0c37808e3f 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_ia5.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_ia5.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_info.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_info.cc index ca52d014ee..5e149aa10f 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_info.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_info.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include @@ -80,7 +85,6 @@ static STACK_OF(CONF_VALUE) *i2v_AUTHORITY_INFO_ACCESS( const AUTHORITY_INFO_ACCESS *ainfo = reinterpret_cast(ext); ACCESS_DESCRIPTION *desc; - int name_len; char objtmp[80], *name; CONF_VALUE *vtmp; STACK_OF(CONF_VALUE) *tret = ret; @@ -97,14 +101,9 @@ static STACK_OF(CONF_VALUE) *i2v_AUTHORITY_INFO_ACCESS( vtmp = sk_CONF_VALUE_value(tret, i); i2t_ASN1_OBJECT(objtmp, sizeof objtmp, desc->method); - name_len = strlen(objtmp) + 3 + strlen(vtmp->name) + 1; - name = reinterpret_cast(OPENSSL_malloc(name_len)); - if (name == NULL) { + if (OPENSSL_asprintf(&name, "%s - %s", objtmp, vtmp->name) == -1) { goto err; } - OPENSSL_strlcpy(name, objtmp, name_len); - OPENSSL_strlcat(name, " - ", name_len); - OPENSSL_strlcat(name, vtmp->name, name_len); OPENSSL_free(vtmp->name); vtmp->name = name; } diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_int.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_int.cc index 74e708009d..f97337d450 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_int.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_int.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_lib.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_lib.cc index 349a31c4b6..d5a308c0ec 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_lib.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_lib.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. /* X509 v3 extension utilities */ diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_ncons.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_ncons.cc index 6502dbff85..a79f47db38 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_ncons.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_ncons.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2003-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2003-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_ocsp.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_ocsp.cc index 506d949e20..ab929d1a9f 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_ocsp.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_ocsp.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_pcons.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_pcons.cc index 9600411beb..cb1313705a 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_pcons.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_pcons.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2003-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2003-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_pmaps.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_pmaps.cc index d653a4ae68..a182f215f0 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_pmaps.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_pmaps.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2003-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2003-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_prn.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_prn.cc index 665aa1fff4..fb6119e857 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_prn.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_prn.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // X509 v3 extension utilities diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_purp.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_purp.cc index 285fcc5dcb..df93853cec 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_purp.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_purp.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_skey.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_skey.cc index 3f3a6024d0..60bf261149 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_skey.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_skey.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_utl.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_utl.cc index d2a6149411..35ca6679a3 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_utl.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/v3_utl.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. /* X509 v3 extension utilities */ @@ -119,7 +124,6 @@ int X509V3_add_value_bool(const char *name, int asn1_bool, static char *bignum_to_string(const BIGNUM *bn) { char *tmp, *ret; - size_t len; // Display large numbers in hex and small numbers in decimal. Converting to // decimal takes quadratic time and is no more useful than hex for large @@ -133,20 +137,10 @@ static char *bignum_to_string(const BIGNUM *bn) { return NULL; } - len = strlen(tmp) + 3; - ret = reinterpret_cast(OPENSSL_malloc(len)); - if (ret == NULL) { - OPENSSL_free(tmp); - return NULL; - } - // Prepend "0x", but place it after the "-" if negative. - if (tmp[0] == '-') { - OPENSSL_strlcpy(ret, "-0x", len); - OPENSSL_strlcat(ret, tmp + 1, len); - } else { - OPENSSL_strlcpy(ret, "0x", len); - OPENSSL_strlcat(ret, tmp, len); + if (OPENSSL_asprintf(&ret, "%s0x%s", (tmp[0] == '-') ? "-" : "", + (tmp[0] == '-') ? tmp + 1 : tmp) == -1) { + ret = nullptr; } OPENSSL_free(tmp); return ret; diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509.cc index 0cd54acfea..05bedc6bbf 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_att.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_att.cc index 36275438eb..49363b2295 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_att.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_att.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_cmp.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_cmp.cc index 7507f5ff80..fd2f30fba1 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_cmp.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_cmp.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_d2.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_d2.cc index f9d6e5ca88..c4b16c4227 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_d2.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_d2.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_def.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_def.cc index 5dcf5b75b7..45675fa8a0 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_def.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_def.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_ext.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_ext.cc index ed28c22a4f..dbc2dc136c 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_ext.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_ext.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_lu.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_lu.cc index 4e2df3b8f3..5832ee39c8 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_lu.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_lu.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_obj.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_obj.cc index fccf21f5cd..6eb5df9986 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_obj.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_obj.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_req.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_req.cc index 3244533670..ffaaf82456 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_req.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_req.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_set.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_set.cc index c7a4030b02..332c0a5b2c 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_set.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_set.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_trs.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_trs.cc index 417319ec6a..d5540bfc0f 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_trs.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_trs.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_txt.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_txt.cc index 1ae270f5dc..40ba13e710 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_txt.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_txt.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_v3.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_v3.cc index a032405b90..9033d7673c 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_v3.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_v3.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_vfy.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_vfy.cc index 1c2cd601cf..03f4612e4a 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_vfy.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_vfy.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_vpm.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_vpm.cc index 2926f32fed..5a113fb8dd 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_vpm.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509_vpm.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2004-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2004-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509cset.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509cset.cc index 8e3ae03e54..3fd39f7255 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509cset.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509cset.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509name.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509name.cc index 0ef6529567..8f9792c517 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509name.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509name.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509rset.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509rset.cc index 40b48ee38b..eaff8c627a 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509rset.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509rset.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509spki.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509spki.cc index 45796091f8..6649f47575 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509spki.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x509spki.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_algor.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_algor.cc index 756dfaa055..0a1162e361 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_algor.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_algor.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_all.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_all.cc index a38fd1c3ca..4393750e83 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_all.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_all.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_attrib.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_attrib.cc index 0323d5d5f9..20ab3b08ee 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_attrib.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_attrib.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_crl.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_crl.cc index 9c61043474..ec3fd78e87 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_crl.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_crl.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_exten.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_exten.cc index 3683102b7b..2504610c84 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_exten.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_exten.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_name.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_name.cc index fc0736afb7..767ebfda42 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_name.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_name.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_pubkey.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_pubkey.cc index 8c3180e5e5..b3a33299fb 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_pubkey.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_pubkey.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_req.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_req.cc index 253f95174b..cf7d413c4e 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_req.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_req.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_sig.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_sig.cc index f5a59d7b92..e64c01404b 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_sig.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_sig.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_spki.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_spki.cc index 8c7fcb01aa..52656b1dce 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_spki.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_spki.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_val.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_val.cc index 717e2869c0..c9bc0a0501 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_val.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_val.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_x509.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_x509.cc index 5b80e84ad1..ebb20d53da 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_x509.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_x509.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_x509a.cc b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_x509a.cc index 91247730e6..f36fcaf7bd 100644 --- a/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_x509a.cc +++ b/naiveproxy/src/third_party/boringssl/src/crypto/x509/x_x509a.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/decrepit/bio/base64_bio.cc b/naiveproxy/src/third_party/boringssl/src/decrepit/bio/base64_bio.cc index 82b024950c..0141098ed6 100644 --- a/naiveproxy/src/third_party/boringssl/src/decrepit/bio/base64_bio.cc +++ b/naiveproxy/src/third_party/boringssl/src/decrepit/bio/base64_bio.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/decrepit/blowfish/blowfish.cc b/naiveproxy/src/third_party/boringssl/src/decrepit/blowfish/blowfish.cc index 09d198c003..1c8aa556a8 100644 --- a/naiveproxy/src/third_party/boringssl/src/decrepit/blowfish/blowfish.cc +++ b/naiveproxy/src/third_party/boringssl/src/decrepit/blowfish/blowfish.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/decrepit/cast/cast.cc b/naiveproxy/src/third_party/boringssl/src/decrepit/cast/cast.cc index 97c032f276..6e4c0002c0 100644 --- a/naiveproxy/src/third_party/boringssl/src/decrepit/cast/cast.cc +++ b/naiveproxy/src/third_party/boringssl/src/decrepit/cast/cast.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/decrepit/cast/cast_tables.cc b/naiveproxy/src/third_party/boringssl/src/decrepit/cast/cast_tables.cc index 841280ea5a..fceb100c61 100644 --- a/naiveproxy/src/third_party/boringssl/src/decrepit/cast/cast_tables.cc +++ b/naiveproxy/src/third_party/boringssl/src/decrepit/cast/cast_tables.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/decrepit/cast/internal.h b/naiveproxy/src/third_party/boringssl/src/decrepit/cast/internal.h index c984d032b6..5bbf6052e8 100644 --- a/naiveproxy/src/third_party/boringssl/src/decrepit/cast/internal.h +++ b/naiveproxy/src/third_party/boringssl/src/decrepit/cast/internal.h @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_CAST_INTERNAL_H #define OPENSSL_HEADER_CAST_INTERNAL_H diff --git a/naiveproxy/src/third_party/boringssl/src/decrepit/cfb/cfb.cc b/naiveproxy/src/third_party/boringssl/src/decrepit/cfb/cfb.cc index fdef898da3..b7fb30ad91 100644 --- a/naiveproxy/src/third_party/boringssl/src/decrepit/cfb/cfb.cc +++ b/naiveproxy/src/third_party/boringssl/src/decrepit/cfb/cfb.cc @@ -1,16 +1,16 @@ // Copyright 2017 The BoringSSL Authors // -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at // -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/decrepit/des/cfb64ede.cc b/naiveproxy/src/third_party/boringssl/src/decrepit/des/cfb64ede.cc index de5a5a4b0b..76226a19a4 100644 --- a/naiveproxy/src/third_party/boringssl/src/decrepit/des/cfb64ede.cc +++ b/naiveproxy/src/third_party/boringssl/src/decrepit/des/cfb64ede.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/decrepit/dh/dh_decrepit.cc b/naiveproxy/src/third_party/boringssl/src/decrepit/dh/dh_decrepit.cc index 961b0db16c..d8d1d2d805 100644 --- a/naiveproxy/src/third_party/boringssl/src/decrepit/dh/dh_decrepit.cc +++ b/naiveproxy/src/third_party/boringssl/src/decrepit/dh/dh_decrepit.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/decrepit/dsa/dsa_decrepit.cc b/naiveproxy/src/third_party/boringssl/src/decrepit/dsa/dsa_decrepit.cc index cbce5bd417..c77c7ff5e6 100644 --- a/naiveproxy/src/third_party/boringssl/src/decrepit/dsa/dsa_decrepit.cc +++ b/naiveproxy/src/third_party/boringssl/src/decrepit/dsa/dsa_decrepit.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/decrepit/evp/dss1.cc b/naiveproxy/src/third_party/boringssl/src/decrepit/evp/dss1.cc index 31dda84f93..ab80421367 100644 --- a/naiveproxy/src/third_party/boringssl/src/decrepit/evp/dss1.cc +++ b/naiveproxy/src/third_party/boringssl/src/decrepit/evp/dss1.cc @@ -1,16 +1,16 @@ -/* Copyright 2016 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2016 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/decrepit/evp/evp_do_all.cc b/naiveproxy/src/third_party/boringssl/src/decrepit/evp/evp_do_all.cc index e199e10ca6..e04b80cd6a 100644 --- a/naiveproxy/src/third_party/boringssl/src/decrepit/evp/evp_do_all.cc +++ b/naiveproxy/src/third_party/boringssl/src/decrepit/evp/evp_do_all.cc @@ -1,16 +1,16 @@ -/* Copyright 2016 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2016 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/decrepit/macros.h b/naiveproxy/src/third_party/boringssl/src/decrepit/macros.h index 63c7ce5814..2076dfa716 100644 --- a/naiveproxy/src/third_party/boringssl/src/decrepit/macros.h +++ b/naiveproxy/src/third_party/boringssl/src/decrepit/macros.h @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_DECREPIT_MACROS_H #define OPENSSL_HEADER_DECREPIT_MACROS_H diff --git a/naiveproxy/src/third_party/boringssl/src/decrepit/obj/obj_decrepit.cc b/naiveproxy/src/third_party/boringssl/src/decrepit/obj/obj_decrepit.cc index ec0c03096a..abcb729343 100644 --- a/naiveproxy/src/third_party/boringssl/src/decrepit/obj/obj_decrepit.cc +++ b/naiveproxy/src/third_party/boringssl/src/decrepit/obj/obj_decrepit.cc @@ -1,16 +1,16 @@ -/* Copyright 2016 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2016 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/decrepit/rc4/rc4_decrepit.cc b/naiveproxy/src/third_party/boringssl/src/decrepit/rc4/rc4_decrepit.cc index a6631b650c..5d08d99cd0 100644 --- a/naiveproxy/src/third_party/boringssl/src/decrepit/rc4/rc4_decrepit.cc +++ b/naiveproxy/src/third_party/boringssl/src/decrepit/rc4/rc4_decrepit.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/decrepit/ripemd/ripemd.cc b/naiveproxy/src/third_party/boringssl/src/decrepit/ripemd/ripemd.cc index 6a068fdcbc..716a14ecf9 100644 --- a/naiveproxy/src/third_party/boringssl/src/decrepit/ripemd/ripemd.cc +++ b/naiveproxy/src/third_party/boringssl/src/decrepit/ripemd/ripemd.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/decrepit/rsa/rsa_decrepit.cc b/naiveproxy/src/third_party/boringssl/src/decrepit/rsa/rsa_decrepit.cc index 1ddc499c3d..22c9f018a1 100644 --- a/naiveproxy/src/third_party/boringssl/src/decrepit/rsa/rsa_decrepit.cc +++ b/naiveproxy/src/third_party/boringssl/src/decrepit/rsa/rsa_decrepit.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/decrepit/ssl/ssl_decrepit.cc b/naiveproxy/src/third_party/boringssl/src/decrepit/ssl/ssl_decrepit.cc index 3f839c8f79..8a2a9b0310 100644 --- a/naiveproxy/src/third_party/boringssl/src/decrepit/ssl/ssl_decrepit.cc +++ b/naiveproxy/src/third_party/boringssl/src/decrepit/ssl/ssl_decrepit.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/decrepit/x509/x509_decrepit.cc b/naiveproxy/src/third_party/boringssl/src/decrepit/x509/x509_decrepit.cc index 180ef5c101..778f129599 100644 --- a/naiveproxy/src/third_party/boringssl/src/decrepit/x509/x509_decrepit.cc +++ b/naiveproxy/src/third_party/boringssl/src/decrepit/x509/x509_decrepit.cc @@ -1,16 +1,16 @@ -/* Copyright 2016 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2016 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/decrepit/xts/xts.cc b/naiveproxy/src/third_party/boringssl/src/decrepit/xts/xts.cc index 79b11213f9..398fa9000f 100644 --- a/naiveproxy/src/third_party/boringssl/src/decrepit/xts/xts.cc +++ b/naiveproxy/src/third_party/boringssl/src/decrepit/xts/xts.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include @@ -15,7 +20,7 @@ #include #include "../../crypto/fipsmodule/cipher/internal.h" -#include "../../crypto/fipsmodule/modes/internal.h" +#include "../../crypto/fipsmodule/aes/internal.h" typedef struct xts128_context { diff --git a/naiveproxy/src/third_party/boringssl/src/gen/bcm/aes-gcm-avx10-x86_64-apple.S b/naiveproxy/src/third_party/boringssl/src/gen/bcm/aes-gcm-avx10-x86_64-apple.S index 54fcde0485..be666051f0 100644 --- a/naiveproxy/src/third_party/boringssl/src/gen/bcm/aes-gcm-avx10-x86_64-apple.S +++ b/naiveproxy/src/third_party/boringssl/src/gen/bcm/aes-gcm-avx10-x86_64-apple.S @@ -512,6 +512,10 @@ L$aes192__func1: vaesenc %zmm9,%zmm3,%zmm3 L$aes128__func1: + prefetcht0 512+0(%rdi) + prefetcht0 512+64(%rdi) + prefetcht0 512+128(%rdi) + prefetcht0 512+192(%rdi) vpshufb %zmm8,%zmm4,%zmm4 vpxord %zmm10,%zmm4,%zmm4 vpshufb %zmm8,%zmm5,%zmm5 @@ -953,6 +957,10 @@ L$aes192__func2: vaesenc %zmm9,%zmm3,%zmm3 L$aes128__func2: + prefetcht0 512+0(%rdi) + prefetcht0 512+64(%rdi) + prefetcht0 512+128(%rdi) + prefetcht0 512+192(%rdi) vpshufb %zmm8,%zmm4,%zmm4 vpxord %zmm10,%zmm4,%zmm4 vpshufb %zmm8,%zmm5,%zmm5 diff --git a/naiveproxy/src/third_party/boringssl/src/gen/bcm/aes-gcm-avx10-x86_64-linux.S b/naiveproxy/src/third_party/boringssl/src/gen/bcm/aes-gcm-avx10-x86_64-linux.S index 2be6a8cb7b..b52562302a 100644 --- a/naiveproxy/src/third_party/boringssl/src/gen/bcm/aes-gcm-avx10-x86_64-linux.S +++ b/naiveproxy/src/third_party/boringssl/src/gen/bcm/aes-gcm-avx10-x86_64-linux.S @@ -514,6 +514,10 @@ _CET_ENDBR vaesenc %zmm9,%zmm3,%zmm3 .Laes128__func1: + prefetcht0 512+0(%rdi) + prefetcht0 512+64(%rdi) + prefetcht0 512+128(%rdi) + prefetcht0 512+192(%rdi) vpshufb %zmm8,%zmm4,%zmm4 vpxord %zmm10,%zmm4,%zmm4 vpshufb %zmm8,%zmm5,%zmm5 @@ -957,6 +961,10 @@ _CET_ENDBR vaesenc %zmm9,%zmm3,%zmm3 .Laes128__func2: + prefetcht0 512+0(%rdi) + prefetcht0 512+64(%rdi) + prefetcht0 512+128(%rdi) + prefetcht0 512+192(%rdi) vpshufb %zmm8,%zmm4,%zmm4 vpxord %zmm10,%zmm4,%zmm4 vpshufb %zmm8,%zmm5,%zmm5 diff --git a/naiveproxy/src/third_party/boringssl/src/gen/bcm/aes-gcm-avx10-x86_64-win.asm b/naiveproxy/src/third_party/boringssl/src/gen/bcm/aes-gcm-avx10-x86_64-win.asm index fb9f896a97..733ae72172 100644 --- a/naiveproxy/src/third_party/boringssl/src/gen/bcm/aes-gcm-avx10-x86_64-win.asm +++ b/naiveproxy/src/third_party/boringssl/src/gen/bcm/aes-gcm-avx10-x86_64-win.asm @@ -579,6 +579,10 @@ $L$aes192__func1: vaesenc zmm3,zmm3,zmm9 $L$aes128__func1: + prefetcht0 [((512+0))+rcx] + prefetcht0 [((512+64))+rcx] + prefetcht0 [((512+128))+rcx] + prefetcht0 [((512+192))+rcx] vpshufb zmm4,zmm4,zmm8 vpxord zmm4,zmm4,zmm10 vpshufb zmm5,zmm5,zmm8 @@ -1061,6 +1065,10 @@ $L$aes192__func2: vaesenc zmm3,zmm3,zmm9 $L$aes128__func2: + prefetcht0 [((512+0))+rcx] + prefetcht0 [((512+64))+rcx] + prefetcht0 [((512+128))+rcx] + prefetcht0 [((512+192))+rcx] vpshufb zmm4,zmm4,zmm8 vpxord zmm4,zmm4,zmm10 vpshufb zmm5,zmm5,zmm8 diff --git a/naiveproxy/src/third_party/boringssl/src/gen/bcm/aes-gcm-avx2-x86_64-apple.S b/naiveproxy/src/third_party/boringssl/src/gen/bcm/aes-gcm-avx2-x86_64-apple.S index e401e66042..d896f2a6e6 100644 --- a/naiveproxy/src/third_party/boringssl/src/gen/bcm/aes-gcm-avx2-x86_64-apple.S +++ b/naiveproxy/src/third_party/boringssl/src/gen/bcm/aes-gcm-avx2-x86_64-apple.S @@ -498,6 +498,8 @@ L$aes192__func1: vaesenc %ymm2,%ymm15,%ymm15 L$aes128__func1: + prefetcht0 512(%rdi) + prefetcht0 512+64(%rdi) vmovdqu 0(%rsi),%ymm3 vpshufb %ymm0,%ymm3,%ymm3 @@ -983,6 +985,8 @@ L$aes192__func2: vaesenc %ymm2,%ymm15,%ymm15 L$aes128__func2: + prefetcht0 512(%rdi) + prefetcht0 512+64(%rdi) vmovdqu 0(%rdi),%ymm3 vpshufb %ymm0,%ymm3,%ymm3 diff --git a/naiveproxy/src/third_party/boringssl/src/gen/bcm/aes-gcm-avx2-x86_64-linux.S b/naiveproxy/src/third_party/boringssl/src/gen/bcm/aes-gcm-avx2-x86_64-linux.S index b7816cfc5a..583f02fc52 100644 --- a/naiveproxy/src/third_party/boringssl/src/gen/bcm/aes-gcm-avx2-x86_64-linux.S +++ b/naiveproxy/src/third_party/boringssl/src/gen/bcm/aes-gcm-avx2-x86_64-linux.S @@ -500,6 +500,8 @@ _CET_ENDBR vaesenc %ymm2,%ymm15,%ymm15 .Laes128__func1: + prefetcht0 512(%rdi) + prefetcht0 512+64(%rdi) vmovdqu 0(%rsi),%ymm3 vpshufb %ymm0,%ymm3,%ymm3 @@ -987,6 +989,8 @@ _CET_ENDBR vaesenc %ymm2,%ymm15,%ymm15 .Laes128__func2: + prefetcht0 512(%rdi) + prefetcht0 512+64(%rdi) vmovdqu 0(%rdi),%ymm3 vpshufb %ymm0,%ymm3,%ymm3 diff --git a/naiveproxy/src/third_party/boringssl/src/gen/bcm/aes-gcm-avx2-x86_64-win.asm b/naiveproxy/src/third_party/boringssl/src/gen/bcm/aes-gcm-avx2-x86_64-win.asm index 92015534ba..00e2a2bf82 100644 --- a/naiveproxy/src/third_party/boringssl/src/gen/bcm/aes-gcm-avx2-x86_64-win.asm +++ b/naiveproxy/src/third_party/boringssl/src/gen/bcm/aes-gcm-avx2-x86_64-win.asm @@ -559,6 +559,8 @@ $L$aes192__func1: vaesenc ymm15,ymm15,ymm2 $L$aes128__func1: + prefetcht0 [512+rcx] + prefetcht0 [((512+64))+rcx] vmovdqu ymm3,YMMWORD[rdx] vpshufb ymm3,ymm3,ymm0 @@ -1085,6 +1087,8 @@ $L$aes192__func2: vaesenc ymm15,ymm15,ymm2 $L$aes128__func2: + prefetcht0 [512+rcx] + prefetcht0 [((512+64))+rcx] vmovdqu ymm3,YMMWORD[rcx] vpshufb ymm3,ymm3,ymm0 diff --git a/naiveproxy/src/third_party/boringssl/src/gen/bcm/bsaes-armv7-linux.S b/naiveproxy/src/third_party/boringssl/src/gen/bcm/bsaes-armv7-linux.S index 01a9ead28a..102681b977 100644 --- a/naiveproxy/src/third_party/boringssl/src/gen/bcm/bsaes-armv7-linux.S +++ b/naiveproxy/src/third_party/boringssl/src/gen/bcm/bsaes-armv7-linux.S @@ -6,20 +6,25 @@ #if !defined(OPENSSL_NO_ASM) && defined(OPENSSL_ARM) && defined(__ELF__) @ Copyright 2012-2016 The OpenSSL Project Authors. All Rights Reserved. @ -@ Licensed under the OpenSSL license (the "License"). You may not use -@ this file except in compliance with the License. You can obtain a copy -@ in the file LICENSE in the source distribution or at -@ https://www.openssl.org/source/license.html +@ Licensed under the Apache License, Version 2.0 (the "License"); +@ you may not use this file except in compliance with the License. +@ You may obtain a copy of the License at +@ +@ https://www.apache.org/licenses/LICENSE-2.0 +@ +@ Unless required by applicable law or agreed to in writing, software +@ distributed under the License is distributed on an "AS IS" BASIS, +@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@ See the License for the specific language governing permissions and +@ limitations under the License. @ ==================================================================== @ Written by Andy Polyakov for the OpenSSL -@ project. The module is, however, dual licensed under OpenSSL and -@ CRYPTOGAMS licenses depending on where you obtain it. For further -@ details see http://www.openssl.org/~appro/cryptogams/. +@ project. @ @ Specific modes and adaptation for Linux kernel by Ard Biesheuvel -@ of Linaro. Permission to use under GPL terms is granted. +@ of Linaro. @ ==================================================================== @ Bit-sliced AES for ARM NEON diff --git a/naiveproxy/src/third_party/boringssl/src/gen/bcm/sha256-armv4-linux.S b/naiveproxy/src/third_party/boringssl/src/gen/bcm/sha256-armv4-linux.S index fca0681f9c..3e6774985a 100644 --- a/naiveproxy/src/third_party/boringssl/src/gen/bcm/sha256-armv4-linux.S +++ b/naiveproxy/src/third_party/boringssl/src/gen/bcm/sha256-armv4-linux.S @@ -6,19 +6,22 @@ #if !defined(OPENSSL_NO_ASM) && defined(OPENSSL_ARM) && defined(__ELF__) @ Copyright 2007-2016 The OpenSSL Project Authors. All Rights Reserved. @ -@ Licensed under the OpenSSL license (the "License"). You may not use -@ this file except in compliance with the License. You can obtain a copy -@ in the file LICENSE in the source distribution or at -@ https://www.openssl.org/source/license.html +@ Licensed under the Apache License, Version 2.0 (the "License"); +@ you may not use this file except in compliance with the License. +@ You may obtain a copy of the License at +@ +@ https://www.apache.org/licenses/LICENSE-2.0 +@ +@ Unless required by applicable law or agreed to in writing, software +@ distributed under the License is distributed on an "AS IS" BASIS, +@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@ See the License for the specific language governing permissions and +@ limitations under the License. @ ==================================================================== @ Written by Andy Polyakov for the OpenSSL -@ project. The module is, however, dual licensed under OpenSSL and -@ CRYPTOGAMS licenses depending on where you obtain it. For further -@ details see http://www.openssl.org/~appro/cryptogams/. -@ -@ Permission to use under GPL terms is granted. +@ project. @ ==================================================================== @ SHA256 block procedure for ARMv4. May 2007. @@ -1893,7 +1896,7 @@ sha256_block_data_order_neon: @ TODO(davidben): adrl would avoid a load, but clang-assembler does not @ support it. We might be able to emulate it with a macro, but Android's @ did not work when I tried it. - @ https://android.googlesource.com/platform/ndk/+/refs/heads/master/docs/ClangMigration.md#arm + @ https://android.googlesource.com/platform/ndk/+/refs/heads/main/docs/ClangMigration.md#arm ldr r14,.LK256_shortcut_neon .LK256_add_neon: add r14,pc,r14 diff --git a/naiveproxy/src/third_party/boringssl/src/gen/bcm/sha256-armv8-apple.S b/naiveproxy/src/third_party/boringssl/src/gen/bcm/sha256-armv8-apple.S index a78236ba98..308d152a56 100644 --- a/naiveproxy/src/third_party/boringssl/src/gen/bcm/sha256-armv8-apple.S +++ b/naiveproxy/src/third_party/boringssl/src/gen/bcm/sha256-armv8-apple.S @@ -6,18 +6,21 @@ #if !defined(OPENSSL_NO_ASM) && defined(OPENSSL_AARCH64) && defined(__APPLE__) // Copyright 2014-2020 The OpenSSL Project Authors. All Rights Reserved. // -// Licensed under the OpenSSL license (the "License"). You may not use -// this file except in compliance with the License. You can obtain a copy -// in the file LICENSE in the source distribution or at -// https://www.openssl.org/source/license.html +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // ==================================================================== // Written by Andy Polyakov for the OpenSSL -// project. The module is, however, dual licensed under OpenSSL and -// CRYPTOGAMS licenses depending on where you obtain it. For further -// details see http://www.openssl.org/~appro/cryptogams/. -// -// Permission to use under GPLv2 terms is granted. +// project. // ==================================================================== // // SHA256/512 for ARMv8. diff --git a/naiveproxy/src/third_party/boringssl/src/gen/bcm/sha256-armv8-linux.S b/naiveproxy/src/third_party/boringssl/src/gen/bcm/sha256-armv8-linux.S index 44201086f9..f29a30d060 100644 --- a/naiveproxy/src/third_party/boringssl/src/gen/bcm/sha256-armv8-linux.S +++ b/naiveproxy/src/third_party/boringssl/src/gen/bcm/sha256-armv8-linux.S @@ -6,18 +6,21 @@ #if !defined(OPENSSL_NO_ASM) && defined(OPENSSL_AARCH64) && defined(__ELF__) // Copyright 2014-2020 The OpenSSL Project Authors. All Rights Reserved. // -// Licensed under the OpenSSL license (the "License"). You may not use -// this file except in compliance with the License. You can obtain a copy -// in the file LICENSE in the source distribution or at -// https://www.openssl.org/source/license.html +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // ==================================================================== // Written by Andy Polyakov for the OpenSSL -// project. The module is, however, dual licensed under OpenSSL and -// CRYPTOGAMS licenses depending on where you obtain it. For further -// details see http://www.openssl.org/~appro/cryptogams/. -// -// Permission to use under GPLv2 terms is granted. +// project. // ==================================================================== // // SHA256/512 for ARMv8. diff --git a/naiveproxy/src/third_party/boringssl/src/gen/bcm/sha256-armv8-win.S b/naiveproxy/src/third_party/boringssl/src/gen/bcm/sha256-armv8-win.S index 89d3944afb..99e3d0b883 100644 --- a/naiveproxy/src/third_party/boringssl/src/gen/bcm/sha256-armv8-win.S +++ b/naiveproxy/src/third_party/boringssl/src/gen/bcm/sha256-armv8-win.S @@ -6,18 +6,21 @@ #if !defined(OPENSSL_NO_ASM) && defined(OPENSSL_AARCH64) && defined(_WIN32) // Copyright 2014-2020 The OpenSSL Project Authors. All Rights Reserved. // -// Licensed under the OpenSSL license (the "License"). You may not use -// this file except in compliance with the License. You can obtain a copy -// in the file LICENSE in the source distribution or at -// https://www.openssl.org/source/license.html +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // ==================================================================== // Written by Andy Polyakov for the OpenSSL -// project. The module is, however, dual licensed under OpenSSL and -// CRYPTOGAMS licenses depending on where you obtain it. For further -// details see http://www.openssl.org/~appro/cryptogams/. -// -// Permission to use under GPLv2 terms is granted. +// project. // ==================================================================== // // SHA256/512 for ARMv8. diff --git a/naiveproxy/src/third_party/boringssl/src/gen/bcm/sha512-armv4-linux.S b/naiveproxy/src/third_party/boringssl/src/gen/bcm/sha512-armv4-linux.S index 5500686524..d7976e5d85 100644 --- a/naiveproxy/src/third_party/boringssl/src/gen/bcm/sha512-armv4-linux.S +++ b/naiveproxy/src/third_party/boringssl/src/gen/bcm/sha512-armv4-linux.S @@ -6,19 +6,22 @@ #if !defined(OPENSSL_NO_ASM) && defined(OPENSSL_ARM) && defined(__ELF__) @ Copyright 2007-2016 The OpenSSL Project Authors. All Rights Reserved. @ -@ Licensed under the OpenSSL license (the "License"). You may not use -@ this file except in compliance with the License. You can obtain a copy -@ in the file LICENSE in the source distribution or at -@ https://www.openssl.org/source/license.html +@ Licensed under the Apache License, Version 2.0 (the "License"); +@ you may not use this file except in compliance with the License. +@ You may obtain a copy of the License at +@ +@ https://www.apache.org/licenses/LICENSE-2.0 +@ +@ Unless required by applicable law or agreed to in writing, software +@ distributed under the License is distributed on an "AS IS" BASIS, +@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@ See the License for the specific language governing permissions and +@ limitations under the License. @ ==================================================================== @ Written by Andy Polyakov for the OpenSSL -@ project. The module is, however, dual licensed under OpenSSL and -@ CRYPTOGAMS licenses depending on where you obtain it. For further -@ details see http://www.openssl.org/~appro/cryptogams/. -@ -@ Permission to use under GPL terms is granted. +@ project. @ ==================================================================== @ SHA512 block procedure for ARMv4. September 2007. diff --git a/naiveproxy/src/third_party/boringssl/src/gen/bcm/sha512-armv8-apple.S b/naiveproxy/src/third_party/boringssl/src/gen/bcm/sha512-armv8-apple.S index 8c98e063e3..67b1ae0dcd 100644 --- a/naiveproxy/src/third_party/boringssl/src/gen/bcm/sha512-armv8-apple.S +++ b/naiveproxy/src/third_party/boringssl/src/gen/bcm/sha512-armv8-apple.S @@ -6,18 +6,21 @@ #if !defined(OPENSSL_NO_ASM) && defined(OPENSSL_AARCH64) && defined(__APPLE__) // Copyright 2014-2020 The OpenSSL Project Authors. All Rights Reserved. // -// Licensed under the OpenSSL license (the "License"). You may not use -// this file except in compliance with the License. You can obtain a copy -// in the file LICENSE in the source distribution or at -// https://www.openssl.org/source/license.html +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // ==================================================================== // Written by Andy Polyakov for the OpenSSL -// project. The module is, however, dual licensed under OpenSSL and -// CRYPTOGAMS licenses depending on where you obtain it. For further -// details see http://www.openssl.org/~appro/cryptogams/. -// -// Permission to use under GPLv2 terms is granted. +// project. // ==================================================================== // // SHA256/512 for ARMv8. diff --git a/naiveproxy/src/third_party/boringssl/src/gen/bcm/sha512-armv8-linux.S b/naiveproxy/src/third_party/boringssl/src/gen/bcm/sha512-armv8-linux.S index fd159877e0..355e8c9bb4 100644 --- a/naiveproxy/src/third_party/boringssl/src/gen/bcm/sha512-armv8-linux.S +++ b/naiveproxy/src/third_party/boringssl/src/gen/bcm/sha512-armv8-linux.S @@ -6,18 +6,21 @@ #if !defined(OPENSSL_NO_ASM) && defined(OPENSSL_AARCH64) && defined(__ELF__) // Copyright 2014-2020 The OpenSSL Project Authors. All Rights Reserved. // -// Licensed under the OpenSSL license (the "License"). You may not use -// this file except in compliance with the License. You can obtain a copy -// in the file LICENSE in the source distribution or at -// https://www.openssl.org/source/license.html +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // ==================================================================== // Written by Andy Polyakov for the OpenSSL -// project. The module is, however, dual licensed under OpenSSL and -// CRYPTOGAMS licenses depending on where you obtain it. For further -// details see http://www.openssl.org/~appro/cryptogams/. -// -// Permission to use under GPLv2 terms is granted. +// project. // ==================================================================== // // SHA256/512 for ARMv8. diff --git a/naiveproxy/src/third_party/boringssl/src/gen/bcm/sha512-armv8-win.S b/naiveproxy/src/third_party/boringssl/src/gen/bcm/sha512-armv8-win.S index 220f4891da..098bd76596 100644 --- a/naiveproxy/src/third_party/boringssl/src/gen/bcm/sha512-armv8-win.S +++ b/naiveproxy/src/third_party/boringssl/src/gen/bcm/sha512-armv8-win.S @@ -6,18 +6,21 @@ #if !defined(OPENSSL_NO_ASM) && defined(OPENSSL_AARCH64) && defined(_WIN32) // Copyright 2014-2020 The OpenSSL Project Authors. All Rights Reserved. // -// Licensed under the OpenSSL license (the "License"). You may not use -// this file except in compliance with the License. You can obtain a copy -// in the file LICENSE in the source distribution or at -// https://www.openssl.org/source/license.html +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // ==================================================================== // Written by Andy Polyakov for the OpenSSL -// project. The module is, however, dual licensed under OpenSSL and -// CRYPTOGAMS licenses depending on where you obtain it. For further -// details see http://www.openssl.org/~appro/cryptogams/. -// -// Permission to use under GPLv2 terms is granted. +// project. // ==================================================================== // // SHA256/512 for ARMv8. diff --git a/naiveproxy/src/third_party/boringssl/src/gen/crypto/chacha20_poly1305_x86_64-apple.S b/naiveproxy/src/third_party/boringssl/src/gen/crypto/chacha20_poly1305_x86_64-apple.S index 5ae5849777..a261463980 100644 --- a/naiveproxy/src/third_party/boringssl/src/gen/crypto/chacha20_poly1305_x86_64-apple.S +++ b/naiveproxy/src/third_party/boringssl/src/gen/crypto/chacha20_poly1305_x86_64-apple.S @@ -212,11 +212,11 @@ L$hash_ad_done: -.globl _chacha20_poly1305_open_nohw -.private_extern _chacha20_poly1305_open_nohw +.globl _chacha20_poly1305_open_sse41 +.private_extern _chacha20_poly1305_open_sse41 .p2align 6 -_chacha20_poly1305_open_nohw: +_chacha20_poly1305_open_sse41: _CET_ENDBR pushq %rbp @@ -2079,11 +2079,11 @@ L$open_sse_128_xor_hash: -.globl _chacha20_poly1305_seal_nohw -.private_extern _chacha20_poly1305_seal_nohw +.globl _chacha20_poly1305_seal_sse41 +.private_extern _chacha20_poly1305_seal_sse41 .p2align 6 -_chacha20_poly1305_seal_nohw: +_chacha20_poly1305_seal_sse41: _CET_ENDBR pushq %rbp diff --git a/naiveproxy/src/third_party/boringssl/src/gen/crypto/chacha20_poly1305_x86_64-linux.S b/naiveproxy/src/third_party/boringssl/src/gen/crypto/chacha20_poly1305_x86_64-linux.S index 22123eee55..180b41e030 100644 --- a/naiveproxy/src/third_party/boringssl/src/gen/crypto/chacha20_poly1305_x86_64-linux.S +++ b/naiveproxy/src/third_party/boringssl/src/gen/crypto/chacha20_poly1305_x86_64-linux.S @@ -212,11 +212,11 @@ poly_hash_ad_internal: .cfi_endproc .size poly_hash_ad_internal, .-poly_hash_ad_internal -.globl chacha20_poly1305_open_nohw -.hidden chacha20_poly1305_open_nohw -.type chacha20_poly1305_open_nohw,@function +.globl chacha20_poly1305_open_sse41 +.hidden chacha20_poly1305_open_sse41 +.type chacha20_poly1305_open_sse41,@function .align 64 -chacha20_poly1305_open_nohw: +chacha20_poly1305_open_sse41: .cfi_startproc _CET_ENDBR pushq %rbp @@ -2084,7 +2084,7 @@ _CET_ENDBR movdqa %xmm10,%xmm6 movdqa %xmm14,%xmm10 jmp .Lopen_sse_128_xor_hash -.size chacha20_poly1305_open_nohw, .-chacha20_poly1305_open_nohw +.size chacha20_poly1305_open_sse41, .-chacha20_poly1305_open_sse41 .cfi_endproc @@ -2093,11 +2093,11 @@ _CET_ENDBR -.globl chacha20_poly1305_seal_nohw -.hidden chacha20_poly1305_seal_nohw -.type chacha20_poly1305_seal_nohw,@function +.globl chacha20_poly1305_seal_sse41 +.hidden chacha20_poly1305_seal_sse41 +.type chacha20_poly1305_seal_sse41,@function .align 64 -chacha20_poly1305_seal_nohw: +chacha20_poly1305_seal_sse41: .cfi_startproc _CET_ENDBR pushq %rbp @@ -4085,7 +4085,7 @@ process_extra_in_trailer: movq %r8,%r8 call poly_hash_ad_internal jmp .Lseal_sse_128_tail_xor -.size chacha20_poly1305_seal_nohw, .-chacha20_poly1305_seal_nohw +.size chacha20_poly1305_seal_sse41, .-chacha20_poly1305_seal_sse41 .cfi_endproc diff --git a/naiveproxy/src/third_party/boringssl/src/gen/crypto/chacha20_poly1305_x86_64-win.asm b/naiveproxy/src/third_party/boringssl/src/gen/crypto/chacha20_poly1305_x86_64-win.asm index 22dbdfe994..25c69efcab 100644 --- a/naiveproxy/src/third_party/boringssl/src/gen/crypto/chacha20_poly1305_x86_64-win.asm +++ b/naiveproxy/src/third_party/boringssl/src/gen/crypto/chacha20_poly1305_x86_64-win.asm @@ -220,14 +220,14 @@ $L$hash_ad_done: -global chacha20_poly1305_open_nohw +global chacha20_poly1305_open_sse41 ALIGN 64 -chacha20_poly1305_open_nohw: +chacha20_poly1305_open_sse41: mov QWORD[8+rsp],rdi ;WIN64 prologue mov QWORD[16+rsp],rsi mov rax,rsp -$L$SEH_begin_chacha20_poly1305_open_nohw: +$L$SEH_begin_chacha20_poly1305_open_sse41: mov rdi,rcx mov rsi,rdx mov rdx,r8 @@ -2113,7 +2113,7 @@ $L$open_sse_128_xor_hash: movdqa xmm6,xmm10 movdqa xmm10,xmm14 jmp NEAR $L$open_sse_128_xor_hash -$L$SEH_end_chacha20_poly1305_open_nohw: +$L$SEH_end_chacha20_poly1305_open_sse41: @@ -2122,14 +2122,14 @@ $L$SEH_end_chacha20_poly1305_open_nohw: -global chacha20_poly1305_seal_nohw +global chacha20_poly1305_seal_sse41 ALIGN 64 -chacha20_poly1305_seal_nohw: +chacha20_poly1305_seal_sse41: mov QWORD[8+rsp],rdi ;WIN64 prologue mov QWORD[16+rsp],rsi mov rax,rsp -$L$SEH_begin_chacha20_poly1305_seal_nohw: +$L$SEH_begin_chacha20_poly1305_seal_sse41: mov rdi,rcx mov rsi,rdx mov rdx,r8 @@ -4135,7 +4135,7 @@ DB 102,69,15,58,15,246,4 mov r8,r8 call poly_hash_ad_internal jmp NEAR $L$seal_sse_128_tail_xor -$L$SEH_end_chacha20_poly1305_seal_nohw: +$L$SEH_end_chacha20_poly1305_seal_sse41: diff --git a/naiveproxy/src/third_party/boringssl/src/gen/crypto/err_data.cc b/naiveproxy/src/third_party/boringssl/src/gen/crypto/err_data.cc index 48bce02762..fd67be816a 100644 --- a/naiveproxy/src/third_party/boringssl/src/gen/crypto/err_data.cc +++ b/naiveproxy/src/third_party/boringssl/src/gen/crypto/err_data.cc @@ -1,18 +1,18 @@ -/* Copyright 2015 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2015 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. - /* This file was generated by go run ./util/pregenerate. */ +// This file was generated by go run ./util/pregenerate. #include #include @@ -77,54 +77,54 @@ const uint32_t kOpenSSLReasonValues[] = { 0xc3b00f7, 0xc3b8921, 0x10320892, - 0x10329654, - 0x10331660, - 0x10339679, - 0x1034168c, + 0x10329672, + 0x1033167e, + 0x10339697, + 0x103416aa, 0x10348f93, 0x10350cdf, - 0x1035969f, - 0x103616c9, - 0x103696dc, - 0x103716fb, - 0x10379714, - 0x10381729, - 0x10389747, - 0x10391756, - 0x10399772, - 0x103a178d, - 0x103a979c, - 0x103b17b8, - 0x103b97d3, - 0x103c17f9, + 0x103596bd, + 0x103616e7, + 0x103696fa, + 0x10371719, + 0x10379732, + 0x10381747, + 0x10389765, + 0x10391774, + 0x10399790, + 0x103a17ab, + 0x103a97ba, + 0x103b17d6, + 0x103b97f1, + 0x103c1817, 0x103c80f7, - 0x103d180a, - 0x103d981e, - 0x103e183d, - 0x103e984c, - 0x103f1863, - 0x103f9876, + 0x103d1828, + 0x103d983c, + 0x103e185b, + 0x103e986a, + 0x103f1881, + 0x103f9894, 0x10400ca3, - 0x10409889, - 0x104118a7, - 0x104198ba, - 0x104218d4, - 0x104298e4, - 0x104318f8, - 0x1043990e, - 0x10441926, - 0x1044993b, - 0x1045194f, - 0x10459961, + 0x104098a7, + 0x104118c5, + 0x104198d8, + 0x104218f2, + 0x10429902, + 0x10431916, + 0x1043992c, + 0x10441944, + 0x10449959, + 0x1045196d, + 0x1045997f, 0x10460635, 0x1046899a, - 0x10471976, - 0x1047998d, - 0x104819a2, - 0x104899b0, + 0x10471994, + 0x104799ab, + 0x104819c0, + 0x104899ce, 0x10490edf, - 0x104997ea, - 0x104a16b4, + 0x10499808, + 0x104a16d2, 0x14320c73, 0x14328c94, 0x14330ca3, @@ -188,6 +188,7 @@ const uint32_t kOpenSSLReasonValues[] = { 0x2438134e, 0x2438935b, 0x2439136e, + 0x24399385, 0x28320cd3, 0x28328ceb, 0x28330ca3, @@ -197,51 +198,51 @@ const uint32_t kOpenSSLReasonValues[] = { 0x283500f7, 0x28358c81, 0x2836099a, - 0x2c3232d4, - 0x2c329385, - 0x2c3332e2, - 0x2c33b2f4, - 0x2c343308, - 0x2c34b31a, - 0x2c353335, - 0x2c35b347, - 0x2c363377, + 0x2c32337d, + 0x2c3293a3, + 0x2c33338b, + 0x2c33b39d, + 0x2c3433b1, + 0x2c34b3c3, + 0x2c3533de, + 0x2c35b3f0, + 0x2c363420, 0x2c36833a, - 0x2c373384, - 0x2c37b3b0, - 0x2c3833ee, - 0x2c38b405, - 0x2c393423, - 0x2c39b433, - 0x2c3a3445, - 0x2c3ab459, - 0x2c3b346a, - 0x2c3bb489, - 0x2c3c1397, - 0x2c3c93ad, - 0x2c3d34ce, - 0x2c3d93c6, - 0x2c3e34f8, - 0x2c3eb506, - 0x2c3f351e, - 0x2c3fb536, - 0x2c403560, + 0x2c37342d, + 0x2c37b459, + 0x2c383497, + 0x2c38b4ae, + 0x2c3934cc, + 0x2c39b4dc, + 0x2c3a34ee, + 0x2c3ab502, + 0x2c3b3513, + 0x2c3bb532, + 0x2c3c13b5, + 0x2c3c93cb, + 0x2c3d3577, + 0x2c3d93e4, + 0x2c3e35a1, + 0x2c3eb5af, + 0x2c3f35c7, + 0x2c3fb5df, + 0x2c403609, 0x2c409298, - 0x2c413571, - 0x2c41b584, + 0x2c41361a, + 0x2c41b62d, 0x2c42125e, - 0x2c42b595, + 0x2c42b63e, 0x2c43076d, - 0x2c43b47b, - 0x2c4433c3, - 0x2c44b543, - 0x2c45335a, - 0x2c45b396, - 0x2c463413, - 0x2c46b49d, - 0x2c4734b2, - 0x2c47b4eb, - 0x2c4833d5, + 0x2c43b524, + 0x2c44346c, + 0x2c44b5ec, + 0x2c453403, + 0x2c45b43f, + 0x2c4634bc, + 0x2c46b546, + 0x2c47355b, + 0x2c47b594, + 0x2c48347e, 0x30320000, 0x30328015, 0x3033001f, @@ -381,260 +382,266 @@ const uint32_t kOpenSSLReasonValues[] = { 0x3c418dd3, 0x3c420edf, 0x3c428e69, - 0x40321a1c, - 0x40329a32, - 0x40331a60, - 0x40339a6a, - 0x40341a81, - 0x40349a9f, - 0x40351aaf, - 0x40359ac1, - 0x40361ace, - 0x40369ada, - 0x40371aef, - 0x40379b01, - 0x40381b0c, - 0x40389b1e, + 0x40321a3a, + 0x40329a50, + 0x40331a7e, + 0x40339a88, + 0x40341a9f, + 0x40349abd, + 0x40351acd, + 0x40359adf, + 0x40361aec, + 0x40369af8, + 0x40371b0d, + 0x40379b1f, + 0x40381b2a, + 0x40389b3c, 0x40390f93, - 0x40399b2e, - 0x403a1b41, - 0x403a9b62, - 0x403b1b73, - 0x403b9b83, + 0x40399b4c, + 0x403a1b5f, + 0x403a9b80, + 0x403b1b91, + 0x403b9ba1, 0x403c0071, 0x403c8090, - 0x403d1be4, - 0x403d9bfa, - 0x403e1c09, - 0x403e9c41, - 0x403f1c5b, - 0x403f9c83, - 0x40401c98, - 0x40409cac, - 0x40411ce7, - 0x40419d02, - 0x40421d1b, - 0x40429d2e, - 0x40431d42, - 0x40439d70, - 0x40441d87, + 0x403d1c02, + 0x403d9c18, + 0x403e1c27, + 0x403e9c5f, + 0x403f1c79, + 0x403f9ca1, + 0x40401cb6, + 0x40409cca, + 0x40411d05, + 0x40419d20, + 0x40421d39, + 0x40429d4c, + 0x40431d60, + 0x40439d8e, + 0x40441da5, 0x404480b9, - 0x40451d9c, - 0x40459dae, - 0x40461dd2, - 0x40469df2, - 0x40471e00, - 0x40479e27, - 0x40481e98, - 0x40489f52, - 0x40491f69, - 0x40499f83, - 0x404a1f9a, - 0x404a9fb8, - 0x404b1fd0, - 0x404b9ffd, - 0x404c2013, - 0x404ca025, - 0x404d2046, - 0x404da07f, - 0x404e2093, - 0x404ea0a0, - 0x404f2151, - 0x404fa1c7, - 0x40502236, - 0x4050a24a, - 0x4051227d, - 0x4052228d, - 0x4052a2b1, - 0x405322c9, - 0x4053a2dc, - 0x405422f1, - 0x4054a314, - 0x4055233f, - 0x4055a37c, - 0x405623a1, - 0x4056a3ba, - 0x405723d2, - 0x4057a3e5, - 0x405823fa, - 0x4058a421, - 0x40592450, - 0x4059a47d, - 0x405aa491, - 0x405b24a9, - 0x405ba4ba, - 0x405c24cd, - 0x405ca50c, - 0x405d2519, - 0x405da53e, - 0x405e257c, + 0x40451dba, + 0x40459dcc, + 0x40461df0, + 0x40469e10, + 0x40471e1e, + 0x40479e45, + 0x40481eb6, + 0x40489f70, + 0x40491f87, + 0x40499fa1, + 0x404a1fb8, + 0x404a9fd6, + 0x404b1fee, + 0x404ba01b, + 0x404c2031, + 0x404ca043, + 0x404d2064, + 0x404da09d, + 0x404e20b1, + 0x404ea0be, + 0x404f216f, + 0x404fa1e5, + 0x4050226f, + 0x4050a283, + 0x405122b6, + 0x405222c6, + 0x4052a2ea, + 0x40532302, + 0x4053a315, + 0x4054232a, + 0x4054a34d, + 0x40552378, + 0x4055a3b5, + 0x405623da, + 0x4056a3f3, + 0x4057240b, + 0x4057a41e, + 0x40582433, + 0x4058a45a, + 0x40592489, + 0x4059a4c9, + 0x405aa4dd, + 0x405b24f5, + 0x405ba506, + 0x405c2519, + 0x405ca558, + 0x405d2565, + 0x405da58a, + 0x405e25c8, 0x405e8afe, - 0x405f259d, - 0x405fa5aa, - 0x406025b8, - 0x4060a5da, - 0x4061263b, - 0x4061a673, - 0x4062268a, - 0x4062a69b, - 0x406326e8, - 0x4063a6fd, - 0x40642714, - 0x4064a740, - 0x4065275b, - 0x4065a772, - 0x4066278a, - 0x4066a7b4, - 0x406727df, - 0x4067a824, - 0x4068286c, - 0x4068a88d, - 0x406928bf, - 0x4069a8ed, - 0x406a290e, - 0x406aa92e, - 0x406b2ab6, - 0x406baad9, - 0x406c2aef, - 0x406cadf9, - 0x406d2e28, - 0x406dae50, - 0x406e2e7e, - 0x406eaecb, - 0x406f2f24, - 0x406faf5c, - 0x40702f6f, - 0x4070af8c, + 0x405f2617, + 0x405fa624, + 0x40602632, + 0x4060a654, + 0x406126c8, + 0x4061a700, + 0x40622717, + 0x4062a728, + 0x40632775, + 0x4063a78a, + 0x406427a1, + 0x4064a7cd, + 0x406527e8, + 0x4065a7ff, + 0x40662817, + 0x4066a841, + 0x4067286c, + 0x4067a8b1, + 0x406828f9, + 0x4068a91a, + 0x4069294c, + 0x4069a97a, + 0x406a299b, + 0x406aa9bb, + 0x406b2b43, + 0x406bab66, + 0x406c2b7c, + 0x406cae86, + 0x406d2eb5, + 0x406daedd, + 0x406e2f0b, + 0x406eaf58, + 0x406f2fb1, + 0x406fafe9, + 0x40702ffc, + 0x4070b019, 0x4071084d, - 0x4071af9e, - 0x40722fb1, - 0x4072afe7, - 0x40732fff, - 0x407395af, - 0x40743013, - 0x4074b02d, - 0x4075303e, - 0x4075b052, - 0x40763060, + 0x4071b02b, + 0x4072303e, + 0x4072b074, + 0x4073308c, + 0x407395cd, + 0x407430a0, + 0x4074b0ba, + 0x407530cb, + 0x4075b0df, + 0x407630ed, 0x4076935b, - 0x40773085, - 0x4077b0c5, - 0x407830e0, - 0x4078b119, - 0x40793130, - 0x4079b146, - 0x407a3172, - 0x407ab185, - 0x407b319a, - 0x407bb1ac, - 0x407c31dd, - 0x407cb1e6, - 0x407d28a8, - 0x407da1ef, - 0x407e30f5, - 0x407ea431, - 0x407f1e14, - 0x407f9fe7, - 0x40802161, - 0x40809e3c, - 0x4081229f, - 0x4081a0ee, - 0x40822e69, - 0x40829b8f, - 0x4083240c, - 0x4083a725, - 0x40841e50, - 0x4084a469, - 0x408524de, - 0x4085a602, - 0x4086255e, - 0x4086a209, - 0x40872eaf, - 0x4087a650, - 0x40881bcd, - 0x4088a837, - 0x40891c1c, - 0x40899ba9, - 0x408a2b27, - 0x408a99c7, - 0x408b31c1, - 0x408baf39, - 0x408c24ee, - 0x408d1f38, - 0x408d9e82, - 0x408e2068, - 0x408ea35c, - 0x408f284b, - 0x408fa61e, - 0x40902800, - 0x4090a530, - 0x40912b0f, - 0x409199ff, - 0x40921c69, - 0x4092aeea, - 0x40932fca, - 0x4093a21a, - 0x40941e64, - 0x4094ab40, - 0x409526ac, - 0x4095b152, - 0x40962e96, - 0x4096a17a, - 0x40972265, - 0x4097a0b7, - 0x40981cc9, - 0x4098a6c0, - 0x40992f06, - 0x4099a389, - 0x409a2322, - 0x409a99e3, - 0x409b1ebe, - 0x409b9ee9, - 0x409c30a7, - 0x409c9f11, - 0x409d2136, - 0x409da104, - 0x409e1d5a, - 0x409ea1af, - 0x409f2197, - 0x409f9eb1, - 0x40a021d7, - 0x40a0a0d1, - 0x40a1211f, - 0x41f429e1, - 0x41f92a73, - 0x41fe2966, - 0x41feac1c, - 0x41ff2d4a, - 0x420329fa, - 0x42082a1c, - 0x4208aa58, - 0x4209294a, - 0x4209aa92, - 0x420a29a1, - 0x420aa981, - 0x420b29c1, - 0x420baa3a, - 0x420c2d66, - 0x420cab50, - 0x420d2c03, - 0x420dac3a, - 0x42122c6d, - 0x42172d2d, - 0x4217acaf, - 0x421c2cd1, - 0x421f2c8c, - 0x42212dde, - 0x42262d10, - 0x422b2dbc, - 0x422babde, - 0x422c2d9e, - 0x422cab91, - 0x422d2b6a, - 0x422dad7d, - 0x422e2bbd, - 0x42302cec, - 0x4230ac54, + 0x40773112, + 0x4077b16e, + 0x40783189, + 0x4078b1c2, + 0x407931d9, + 0x4079b1ef, + 0x407a321b, + 0x407ab22e, + 0x407b3243, + 0x407bb255, + 0x407c3286, + 0x407cb28f, + 0x407d2935, + 0x407da20d, + 0x407e319e, + 0x407ea46a, + 0x407f1e32, + 0x407fa005, + 0x4080217f, + 0x40809e5a, + 0x408122d8, + 0x4081a10c, + 0x40822ef6, + 0x40829bad, + 0x40832445, + 0x4083a7b2, + 0x40841e6e, + 0x4084a4a2, + 0x4085252a, + 0x4085a68f, + 0x408625aa, + 0x4086a227, + 0x40872f3c, + 0x4087a6dd, + 0x40881beb, + 0x4088a8c4, + 0x40891c3a, + 0x40899bc7, + 0x408a2bb4, + 0x408a99e5, + 0x408b326a, + 0x408bafc6, + 0x408c253a, + 0x408d1f56, + 0x408d9ea0, + 0x408e2086, + 0x408ea395, + 0x408f28d8, + 0x408fa6ab, + 0x4090288d, + 0x4090a57c, + 0x40912b9c, + 0x40919a1d, + 0x40921c87, + 0x4092af77, + 0x40933057, + 0x4093a238, + 0x40941e82, + 0x4094abcd, + 0x40952739, + 0x4095b1fb, + 0x40962f23, + 0x4096a198, + 0x4097229e, + 0x4097a0d5, + 0x40981ce7, + 0x4098a74d, + 0x40992f93, + 0x4099a3c2, + 0x409a235b, + 0x409a9a01, + 0x409b1edc, + 0x409b9f07, + 0x409c3150, + 0x409c9f2f, + 0x409d2154, + 0x409da122, + 0x409e1d78, + 0x409ea1cd, + 0x409f21b5, + 0x409f9ecf, + 0x40a021f5, + 0x40a0a0ef, + 0x40a1213d, + 0x40a1a4b6, + 0x40a22254, + 0x40a2a608, + 0x40a3267c, + 0x40a3b134, + 0x41f42a6e, + 0x41f92b00, + 0x41fe29f3, + 0x41feaca9, + 0x41ff2dd7, + 0x42032a87, + 0x42082aa9, + 0x4208aae5, + 0x420929d7, + 0x4209ab1f, + 0x420a2a2e, + 0x420aaa0e, + 0x420b2a4e, + 0x420baac7, + 0x420c2df3, + 0x420cabdd, + 0x420d2c90, + 0x420dacc7, + 0x42122cfa, + 0x42172dba, + 0x4217ad3c, + 0x421c2d5e, + 0x421f2d19, + 0x42212e6b, + 0x42262d9d, + 0x422b2e49, + 0x422bac6b, + 0x422c2e2b, + 0x422cac1e, + 0x422d2bf7, + 0x422dae0a, + 0x422e2c4a, + 0x42302d79, + 0x4230ace1, + 0x423125e9, 0x44320778, 0x44328787, 0x44330793, @@ -652,109 +659,109 @@ const uint32_t kOpenSSLReasonValues[] = { 0x4439084d, 0x4439885b, 0x443a086e, - 0x48321385, - 0x48329397, - 0x483313ad, - 0x483393c6, - 0x4c321403, - 0x4c329413, - 0x4c331426, - 0x4c339446, + 0x483213a3, + 0x483293b5, + 0x483313cb, + 0x483393e4, + 0x4c321421, + 0x4c329431, + 0x4c331444, + 0x4c339464, 0x4c3400b9, 0x4c3480f7, - 0x4c351452, - 0x4c359460, - 0x4c36147c, - 0x4c3694a2, - 0x4c3714b1, - 0x4c3794bf, - 0x4c3814d4, - 0x4c3894e0, - 0x4c391500, - 0x4c39952a, - 0x4c3a1543, - 0x4c3a955c, + 0x4c351470, + 0x4c35947e, + 0x4c36149a, + 0x4c3694c0, + 0x4c3714cf, + 0x4c3794dd, + 0x4c3814f2, + 0x4c3894fe, + 0x4c39151e, + 0x4c399548, + 0x4c3a1561, + 0x4c3a957a, 0x4c3b0635, - 0x4c3b9575, - 0x4c3c1587, - 0x4c3c9596, - 0x4c3d15af, + 0x4c3b9593, + 0x4c3c15a5, + 0x4c3c95b4, + 0x4c3d15cd, 0x4c3d8cc6, - 0x4c3e161c, - 0x4c3e95be, - 0x4c3f163e, + 0x4c3e163a, + 0x4c3e95dc, + 0x4c3f165c, 0x4c3f935b, - 0x4c4015d4, - 0x4c4093ef, - 0x4c41160c, - 0x4c41948f, - 0x4c4215f8, - 0x4c4293d7, - 0x503235a7, - 0x5032b5b6, - 0x503335c1, - 0x5033b5d1, - 0x503435ea, - 0x5034b604, - 0x50353612, - 0x5035b628, - 0x5036363a, - 0x5036b650, - 0x50373669, - 0x5037b67c, - 0x50383694, - 0x5038b6a5, - 0x503936ba, - 0x5039b6ce, - 0x503a36ee, - 0x503ab704, - 0x503b371c, - 0x503bb72e, - 0x503c374a, - 0x503cb761, - 0x503d377a, - 0x503db790, - 0x503e379d, - 0x503eb7b3, - 0x503f37c5, + 0x4c4015f2, + 0x4c40940d, + 0x4c41162a, + 0x4c4194ad, + 0x4c421616, + 0x4c4293f5, + 0x50323650, + 0x5032b65f, + 0x5033366a, + 0x5033b67a, + 0x50343693, + 0x5034b6ad, + 0x503536bb, + 0x5035b6d1, + 0x503636e3, + 0x5036b6f9, + 0x50373712, + 0x5037b725, + 0x5038373d, + 0x5038b74e, + 0x50393763, + 0x5039b777, + 0x503a3797, + 0x503ab7ad, + 0x503b37c5, + 0x503bb7d7, + 0x503c37f3, + 0x503cb80a, + 0x503d3823, + 0x503db839, + 0x503e3846, + 0x503eb85c, + 0x503f386e, 0x503f83b3, - 0x504037d8, - 0x5040b7e8, - 0x50413802, - 0x5041b811, - 0x5042382b, - 0x5042b848, - 0x50433858, - 0x5043b868, - 0x50443885, + 0x50403881, + 0x5040b891, + 0x504138ab, + 0x5041b8ba, + 0x504238d4, + 0x5042b8f1, + 0x50433901, + 0x5043b911, + 0x5044392e, 0x50448469, - 0x50453899, - 0x5045b8b7, - 0x504638ca, - 0x5046b8e0, - 0x504738f2, - 0x5047b907, - 0x5048392d, - 0x5048b93b, - 0x5049394e, - 0x5049b963, - 0x504a3979, - 0x504ab989, - 0x504b39a9, - 0x504bb9bc, - 0x504c39df, - 0x504cba0d, - 0x504d3a3a, - 0x504dba57, - 0x504e3a72, - 0x504eba8e, - 0x504f3aa0, - 0x504fbab7, - 0x50503ac6, + 0x50453942, + 0x5045b960, + 0x50463973, + 0x5046b989, + 0x5047399b, + 0x5047b9b0, + 0x504839d6, + 0x5048b9e4, + 0x504939f7, + 0x5049ba0c, + 0x504a3a22, + 0x504aba32, + 0x504b3a52, + 0x504bba65, + 0x504c3a88, + 0x504cbab6, + 0x504d3ae3, + 0x504dbb00, + 0x504e3b1b, + 0x504ebb37, + 0x504f3b49, + 0x504fbb60, + 0x50503b6f, 0x50508729, - 0x50513ad9, - 0x5051b877, - 0x50523a1f, + 0x50513b82, + 0x5051b920, + 0x50523ac8, 0x58320fd1, 0x68320f93, 0x68328ceb, @@ -797,21 +804,21 @@ const uint32_t kOpenSSLReasonValues[] = { 0x783e0aed, 0x783e8a9f, 0x7c321274, - 0x803214a2, + 0x803214c0, 0x80328090, - 0x803332a3, + 0x8033334c, 0x803380b9, - 0x803432b2, - 0x8034b21a, - 0x80353238, - 0x8035b2c6, - 0x8036327a, - 0x8036b229, - 0x8037326c, - 0x8037b207, - 0x8038328d, - 0x8038b249, - 0x8039325e, + 0x8034335b, + 0x8034b2c3, + 0x803532e1, + 0x8035b36f, + 0x80363323, + 0x8036b2d2, + 0x80373315, + 0x8037b2b0, + 0x80383336, + 0x8038b2f2, + 0x80393307, }; extern const size_t kOpenSSLReasonValuesLen; @@ -1080,6 +1087,7 @@ const char kOpenSSLReasonStringData[] = "SHORT_HEADER\0" "UNSUPPORTED_CIPHER\0" "UNSUPPORTED_ENCRYPTION\0" + "UNSUPPORTED_PROC_TYPE_VERSION\0" "BAD_PKCS7_VERSION\0" "NOT_PKCS7_SIGNED_DATA\0" "NO_CERTIFICATES_INCLUDED\0" @@ -1246,6 +1254,7 @@ const char kOpenSSLReasonStringData[] = "INVALID_OUTER_RECORD_TYPE\0" "INVALID_SCT_LIST\0" "INVALID_SIGNATURE_ALGORITHM\0" + "INVALID_SPAKE2PLUSV1_VALUE\0" "INVALID_SSL_SESSION\0" "INVALID_TICKET_KEYS_LENGTH\0" "KEY_USAGE_BIT_INCORRECT\0" @@ -1272,6 +1281,7 @@ const char kOpenSSLReasonStringData[] = "NO_COMMON_SIGNATURE_ALGORITHMS\0" "NO_COMPRESSION_SPECIFIED\0" "NO_GROUPS_SPECIFIED\0" + "NO_MATCHING_ISSUER\0" "NO_METHOD_SPECIFIED\0" "NO_PRIVATE_KEY_ASSIGNED\0" "NO_RENEGOTIATION\0" @@ -1285,10 +1295,13 @@ const char kOpenSSLReasonStringData[] = "OLD_SESSION_CIPHER_NOT_RETURNED\0" "OLD_SESSION_PRF_HASH_MISMATCH\0" "OLD_SESSION_VERSION_NOT_RETURNED\0" + "PAKE_AND_KEY_SHARE_NOT_ALLOWED\0" + "PAKE_EXHAUSTED\0" "PARSE_TLSEXT\0" "PATH_TOO_LONG\0" "PEER_DID_NOT_RETURN_A_CERTIFICATE\0" "PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE\0" + "PEER_PAKE_MISMATCH\0" "PRE_SHARED_KEY_MUST_BE_LAST\0" "PRIVATE_KEY_OPERATION_FAILED\0" "PROTOCOL_IS_SHUTDOWN\0" @@ -1385,6 +1398,7 @@ const char kOpenSSLReasonStringData[] = "UNKNOWN_STATE\0" "UNSAFE_LEGACY_RENEGOTIATION_DISABLED\0" "UNSUPPORTED_COMPRESSION_ALGORITHM\0" + "UNSUPPORTED_CREDENTIAL_LIST\0" "UNSUPPORTED_ECH_SERVER_CONFIG\0" "UNSUPPORTED_ELLIPTIC_CURVE\0" "UNSUPPORTED_PROTOCOL\0" diff --git a/naiveproxy/src/third_party/boringssl/src/gen/sources.bzl b/naiveproxy/src/third_party/boringssl/src/gen/sources.bzl index 5af0dd23f5..639702dbeb 100644 --- a/naiveproxy/src/third_party/boringssl/src/gen/sources.bzl +++ b/naiveproxy/src/third_party/boringssl/src/gen/sources.bzl @@ -1,17 +1,17 @@ # Copyright 2024 The BoringSSL Authors # -# Permission to use, copy, modify, and/or distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at # -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# https://www.apache.org/licenses/LICENSE-2.0 # +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + # Generated by go ./util/pregenerate. Do not edit manually. bcm_sources = [ @@ -21,8 +21,15 @@ bcm_sources = [ bcm_internal_headers = [ "crypto/fipsmodule/aes/aes.cc.inc", "crypto/fipsmodule/aes/aes_nohw.cc.inc", + "crypto/fipsmodule/aes/cbc.cc.inc", + "crypto/fipsmodule/aes/cfb.cc.inc", + "crypto/fipsmodule/aes/ctr.cc.inc", + "crypto/fipsmodule/aes/gcm.cc.inc", + "crypto/fipsmodule/aes/gcm_nohw.cc.inc", "crypto/fipsmodule/aes/key_wrap.cc.inc", "crypto/fipsmodule/aes/mode_wrappers.cc.inc", + "crypto/fipsmodule/aes/ofb.cc.inc", + "crypto/fipsmodule/aes/polyval.cc.inc", "crypto/fipsmodule/bn/add.cc.inc", "crypto/fipsmodule/bn/asm/x86_64-gcc.cc.inc", "crypto/fipsmodule/bn/bn.cc.inc", @@ -74,13 +81,6 @@ bcm_internal_headers = [ "crypto/fipsmodule/keccak/keccak.cc.inc", "crypto/fipsmodule/mldsa/mldsa.cc.inc", "crypto/fipsmodule/mlkem/mlkem.cc.inc", - "crypto/fipsmodule/modes/cbc.cc.inc", - "crypto/fipsmodule/modes/cfb.cc.inc", - "crypto/fipsmodule/modes/ctr.cc.inc", - "crypto/fipsmodule/modes/gcm.cc.inc", - "crypto/fipsmodule/modes/gcm_nohw.cc.inc", - "crypto/fipsmodule/modes/ofb.cc.inc", - "crypto/fipsmodule/modes/polyval.cc.inc", "crypto/fipsmodule/rand/ctrdrbg.cc.inc", "crypto/fipsmodule/rand/rand.cc.inc", "crypto/fipsmodule/rsa/blinding.cc.inc", @@ -298,8 +298,8 @@ crypto_sources = [ "crypto/bio/socket.cc", "crypto/bio/socket_helper.cc", "crypto/blake2/blake2.cc", - "crypto/bn_extra/bn_asn1.cc", - "crypto/bn_extra/convert.cc", + "crypto/bn/bn_asn1.cc", + "crypto/bn/convert.cc", "crypto/buf/buf.cc", "crypto/bytestring/asn1_compat.cc", "crypto/bytestring/ber.cc", @@ -307,17 +307,17 @@ crypto_sources = [ "crypto/bytestring/cbs.cc", "crypto/bytestring/unicode.cc", "crypto/chacha/chacha.cc", - "crypto/cipher_extra/cipher_extra.cc", - "crypto/cipher_extra/derive_key.cc", - "crypto/cipher_extra/e_aesctrhmac.cc", - "crypto/cipher_extra/e_aesgcmsiv.cc", - "crypto/cipher_extra/e_chacha20poly1305.cc", - "crypto/cipher_extra/e_des.cc", - "crypto/cipher_extra/e_null.cc", - "crypto/cipher_extra/e_rc2.cc", - "crypto/cipher_extra/e_rc4.cc", - "crypto/cipher_extra/e_tls.cc", - "crypto/cipher_extra/tls_cbc.cc", + "crypto/cipher/derive_key.cc", + "crypto/cipher/e_aesctrhmac.cc", + "crypto/cipher/e_aesgcmsiv.cc", + "crypto/cipher/e_chacha20poly1305.cc", + "crypto/cipher/e_des.cc", + "crypto/cipher/e_null.cc", + "crypto/cipher/e_rc2.cc", + "crypto/cipher/e_rc4.cc", + "crypto/cipher/e_tls.cc", + "crypto/cipher/get_cipher.cc", + "crypto/cipher/tls_cbc.cc", "crypto/conf/conf.cc", "crypto/cpu_aarch64_apple.cc", "crypto/cpu_aarch64_fuchsia.cc", @@ -333,16 +333,16 @@ crypto_sources = [ "crypto/curve25519/curve25519_64_adx.cc", "crypto/curve25519/spake25519.cc", "crypto/des/des.cc", - "crypto/dh_extra/dh_asn1.cc", - "crypto/dh_extra/params.cc", - "crypto/digest_extra/digest_extra.cc", + "crypto/dh/dh_asn1.cc", + "crypto/dh/params.cc", + "crypto/digest/digest_extra.cc", "crypto/dsa/dsa.cc", "crypto/dsa/dsa_asn1.cc", - "crypto/ec_extra/ec_asn1.cc", - "crypto/ec_extra/ec_derive.cc", - "crypto/ec_extra/hash_to_curve.cc", - "crypto/ecdh_extra/ecdh_extra.cc", - "crypto/ecdsa_extra/ecdsa_asn1.cc", + "crypto/ec/ec_asn1.cc", + "crypto/ec/ec_derive.cc", + "crypto/ec/hash_to_curve.cc", + "crypto/ecdh/ecdh.cc", + "crypto/ecdsa/ecdsa_asn1.cc", "crypto/engine/engine.cc", "crypto/err/err.cc", "crypto/evp/evp.cc", @@ -394,27 +394,28 @@ crypto_sources = [ "crypto/poly1305/poly1305_arm.cc", "crypto/poly1305/poly1305_vec.cc", "crypto/pool/pool.cc", - "crypto/rand_extra/deterministic.cc", - "crypto/rand_extra/fork_detect.cc", - "crypto/rand_extra/forkunsafe.cc", - "crypto/rand_extra/getentropy.cc", - "crypto/rand_extra/ios.cc", - "crypto/rand_extra/passive.cc", - "crypto/rand_extra/rand_extra.cc", - "crypto/rand_extra/trusty.cc", - "crypto/rand_extra/urandom.cc", - "crypto/rand_extra/windows.cc", + "crypto/rand/deterministic.cc", + "crypto/rand/fork_detect.cc", + "crypto/rand/forkunsafe.cc", + "crypto/rand/getentropy.cc", + "crypto/rand/ios.cc", + "crypto/rand/passive.cc", + "crypto/rand/rand.cc", + "crypto/rand/trusty.cc", + "crypto/rand/urandom.cc", + "crypto/rand/windows.cc", "crypto/rc4/rc4.cc", "crypto/refcount.cc", - "crypto/rsa_extra/rsa_asn1.cc", - "crypto/rsa_extra/rsa_crypt.cc", - "crypto/rsa_extra/rsa_extra.cc", - "crypto/rsa_extra/rsa_print.cc", + "crypto/rsa/rsa_asn1.cc", + "crypto/rsa/rsa_crypt.cc", + "crypto/rsa/rsa_extra.cc", + "crypto/rsa/rsa_print.cc", "crypto/sha/sha1.cc", "crypto/sha/sha256.cc", "crypto/sha/sha512.cc", "crypto/siphash/siphash.cc", "crypto/slhdsa/slhdsa.cc", + "crypto/spake2plus/spake2plus.cc", "crypto/stack/stack.cc", "crypto/thread.cc", "crypto/thread_none.cc", @@ -592,14 +593,14 @@ crypto_internal_headers = [ "crypto/bio/internal.h", "crypto/bytestring/internal.h", "crypto/chacha/internal.h", - "crypto/cipher_extra/internal.h", + "crypto/cipher/internal.h", "crypto/conf/internal.h", "crypto/cpu_arm_linux.h", "crypto/curve25519/curve25519_tables.h", "crypto/curve25519/internal.h", "crypto/des/internal.h", "crypto/dsa/internal.h", - "crypto/ec_extra/internal.h", + "crypto/ec/internal.h", "crypto/err/internal.h", "crypto/evp/internal.h", "crypto/fipsmodule/aes/internal.h", @@ -618,7 +619,6 @@ crypto_internal_headers = [ "crypto/fipsmodule/ec/p256_table.h", "crypto/fipsmodule/ecdsa/internal.h", "crypto/fipsmodule/keccak/internal.h", - "crypto/fipsmodule/modes/internal.h", "crypto/fipsmodule/rand/internal.h", "crypto/fipsmodule/rsa/internal.h", "crypto/fipsmodule/service_indicator/internal.h", @@ -641,9 +641,10 @@ crypto_internal_headers = [ "crypto/pkcs8/internal.h", "crypto/poly1305/internal.h", "crypto/pool/internal.h", - "crypto/rand_extra/getrandom_fillin.h", - "crypto/rand_extra/sysrand_internal.h", - "crypto/rsa_extra/internal.h", + "crypto/rand/getrandom_fillin.h", + "crypto/rand/sysrand_internal.h", + "crypto/rsa/internal.h", + "crypto/spake2plus/internal.h", "crypto/trust_token/internal.h", "crypto/x509/ext_dat.h", "crypto/x509/internal.h", @@ -701,8 +702,8 @@ crypto_test_sources = [ "crypto/buf/buf_test.cc", "crypto/bytestring/bytestring_test.cc", "crypto/chacha/chacha_test.cc", - "crypto/cipher_extra/aead_test.cc", - "crypto/cipher_extra/cipher_test.cc", + "crypto/cipher/aead_test.cc", + "crypto/cipher/cipher_test.cc", "crypto/compiler_test.cc", "crypto/conf/conf_test.cc", "crypto/constant_time_test.cc", @@ -711,16 +712,17 @@ crypto_test_sources = [ "crypto/curve25519/ed25519_test.cc", "crypto/curve25519/spake25519_test.cc", "crypto/curve25519/x25519_test.cc", - "crypto/dh_extra/dh_test.cc", - "crypto/digest_extra/digest_test.cc", + "crypto/dh/dh_test.cc", + "crypto/digest/digest_test.cc", "crypto/dsa/dsa_test.cc", - "crypto/ecdh_extra/ecdh_test.cc", + "crypto/ecdh/ecdh_test.cc", "crypto/err/err_test.cc", "crypto/evp/evp_extra_test.cc", "crypto/evp/evp_test.cc", "crypto/evp/pbkdf_test.cc", "crypto/evp/scrypt_test.cc", "crypto/fipsmodule/aes/aes_test.cc", + "crypto/fipsmodule/aes/gcm_test.cc", "crypto/fipsmodule/bn/bn_test.cc", "crypto/fipsmodule/cmac/cmac_test.cc", "crypto/fipsmodule/ec/ec_test.cc", @@ -729,11 +731,10 @@ crypto_test_sources = [ "crypto/fipsmodule/ecdsa/ecdsa_test.cc", "crypto/fipsmodule/hkdf/hkdf_test.cc", "crypto/fipsmodule/keccak/keccak_test.cc", - "crypto/fipsmodule/modes/gcm_test.cc", "crypto/fipsmodule/rand/ctrdrbg_test.cc", "crypto/fipsmodule/service_indicator/service_indicator_test.cc", "crypto/fipsmodule/sha/sha_test.cc", - "crypto/hmac_extra/hmac_test.cc", + "crypto/hmac/hmac_test.cc", "crypto/hpke/hpke_test.cc", "crypto/hrss/hrss_test.cc", "crypto/impl_dispatch_test.cc", @@ -749,14 +750,15 @@ crypto_test_sources = [ "crypto/pkcs8/pkcs8_test.cc", "crypto/poly1305/poly1305_test.cc", "crypto/pool/pool_test.cc", - "crypto/rand_extra/fork_detect_test.cc", - "crypto/rand_extra/getentropy_test.cc", - "crypto/rand_extra/rand_test.cc", + "crypto/rand/fork_detect_test.cc", + "crypto/rand/getentropy_test.cc", + "crypto/rand/rand_test.cc", "crypto/refcount_test.cc", - "crypto/rsa_extra/rsa_test.cc", + "crypto/rsa/rsa_test.cc", "crypto/self_test.cc", "crypto/siphash/siphash_test.cc", "crypto/slhdsa/slhdsa_test.cc", + "crypto/spake2plus/spake2plus_test.cc", "crypto/stack/stack_test.cc", "crypto/test/gtest_main.cc", "crypto/thread_test.cc", @@ -768,39 +770,39 @@ crypto_test_sources = [ crypto_test_data = [ "crypto/blake2/blake2b256_tests.txt", - "crypto/cipher_extra/test/aes_128_cbc_sha1_tls_implicit_iv_tests.txt", - "crypto/cipher_extra/test/aes_128_cbc_sha1_tls_tests.txt", - "crypto/cipher_extra/test/aes_128_ccm_bluetooth_8_tests.txt", - "crypto/cipher_extra/test/aes_128_ccm_bluetooth_tests.txt", - "crypto/cipher_extra/test/aes_128_ccm_matter_tests.txt", - "crypto/cipher_extra/test/aes_128_ctr_hmac_sha256.txt", - "crypto/cipher_extra/test/aes_128_gcm_randnonce_tests.txt", - "crypto/cipher_extra/test/aes_128_gcm_siv_tests.txt", - "crypto/cipher_extra/test/aes_128_gcm_tests.txt", - "crypto/cipher_extra/test/aes_192_gcm_tests.txt", - "crypto/cipher_extra/test/aes_256_cbc_sha1_tls_implicit_iv_tests.txt", - "crypto/cipher_extra/test/aes_256_cbc_sha1_tls_tests.txt", - "crypto/cipher_extra/test/aes_256_ctr_hmac_sha256.txt", - "crypto/cipher_extra/test/aes_256_gcm_randnonce_tests.txt", - "crypto/cipher_extra/test/aes_256_gcm_siv_tests.txt", - "crypto/cipher_extra/test/aes_256_gcm_tests.txt", - "crypto/cipher_extra/test/chacha20_poly1305_tests.txt", - "crypto/cipher_extra/test/cipher_tests.txt", - "crypto/cipher_extra/test/des_ede3_cbc_sha1_tls_implicit_iv_tests.txt", - "crypto/cipher_extra/test/des_ede3_cbc_sha1_tls_tests.txt", - "crypto/cipher_extra/test/nist_cavp/aes_128_cbc.txt", - "crypto/cipher_extra/test/nist_cavp/aes_128_ctr.txt", - "crypto/cipher_extra/test/nist_cavp/aes_128_gcm.txt", - "crypto/cipher_extra/test/nist_cavp/aes_192_cbc.txt", - "crypto/cipher_extra/test/nist_cavp/aes_192_ctr.txt", - "crypto/cipher_extra/test/nist_cavp/aes_256_cbc.txt", - "crypto/cipher_extra/test/nist_cavp/aes_256_ctr.txt", - "crypto/cipher_extra/test/nist_cavp/aes_256_gcm.txt", - "crypto/cipher_extra/test/nist_cavp/tdes_cbc.txt", - "crypto/cipher_extra/test/nist_cavp/tdes_ecb.txt", - "crypto/cipher_extra/test/xchacha20_poly1305_tests.txt", + "crypto/cipher/test/aes_128_cbc_sha1_tls_implicit_iv_tests.txt", + "crypto/cipher/test/aes_128_cbc_sha1_tls_tests.txt", + "crypto/cipher/test/aes_128_ccm_bluetooth_8_tests.txt", + "crypto/cipher/test/aes_128_ccm_bluetooth_tests.txt", + "crypto/cipher/test/aes_128_ccm_matter_tests.txt", + "crypto/cipher/test/aes_128_ctr_hmac_sha256.txt", + "crypto/cipher/test/aes_128_gcm_randnonce_tests.txt", + "crypto/cipher/test/aes_128_gcm_siv_tests.txt", + "crypto/cipher/test/aes_128_gcm_tests.txt", + "crypto/cipher/test/aes_192_gcm_tests.txt", + "crypto/cipher/test/aes_256_cbc_sha1_tls_implicit_iv_tests.txt", + "crypto/cipher/test/aes_256_cbc_sha1_tls_tests.txt", + "crypto/cipher/test/aes_256_ctr_hmac_sha256.txt", + "crypto/cipher/test/aes_256_gcm_randnonce_tests.txt", + "crypto/cipher/test/aes_256_gcm_siv_tests.txt", + "crypto/cipher/test/aes_256_gcm_tests.txt", + "crypto/cipher/test/chacha20_poly1305_tests.txt", + "crypto/cipher/test/cipher_tests.txt", + "crypto/cipher/test/des_ede3_cbc_sha1_tls_implicit_iv_tests.txt", + "crypto/cipher/test/des_ede3_cbc_sha1_tls_tests.txt", + "crypto/cipher/test/nist_cavp/aes_128_cbc.txt", + "crypto/cipher/test/nist_cavp/aes_128_ctr.txt", + "crypto/cipher/test/nist_cavp/aes_128_gcm.txt", + "crypto/cipher/test/nist_cavp/aes_192_cbc.txt", + "crypto/cipher/test/nist_cavp/aes_192_ctr.txt", + "crypto/cipher/test/nist_cavp/aes_256_cbc.txt", + "crypto/cipher/test/nist_cavp/aes_256_ctr.txt", + "crypto/cipher/test/nist_cavp/aes_256_gcm.txt", + "crypto/cipher/test/nist_cavp/tdes_cbc.txt", + "crypto/cipher/test/nist_cavp/tdes_ecb.txt", + "crypto/cipher/test/xchacha20_poly1305_tests.txt", "crypto/curve25519/ed25519_tests.txt", - "crypto/ecdh_extra/ecdh_tests.txt", + "crypto/ecdh/ecdh_tests.txt", "crypto/evp/evp_tests.txt", "crypto/evp/scrypt_tests.txt", "crypto/fipsmodule/aes/aes_tests.txt", @@ -825,7 +827,7 @@ crypto_test_data = [ "crypto/fipsmodule/ecdsa/ecdsa_verify_tests.txt", "crypto/fipsmodule/keccak/keccak_tests.txt", "crypto/fipsmodule/rand/ctrdrbg_vectors.txt", - "crypto/hmac_extra/hmac_tests.txt", + "crypto/hmac/hmac_tests.txt", "crypto/hpke/hpke_test_vectors.txt", "crypto/kyber/kyber_tests.txt", "crypto/mldsa/mldsa_nist_keygen_65_tests.txt", @@ -2780,5 +2782,5 @@ test_support_sources_nasm = [ ] urandom_test_sources = [ - "crypto/rand_extra/urandom_test.cc", + "crypto/rand/urandom_test.cc", ] diff --git a/naiveproxy/src/third_party/boringssl/src/gen/sources.cmake b/naiveproxy/src/third_party/boringssl/src/gen/sources.cmake index bbbb9c2449..8c2dae4749 100644 --- a/naiveproxy/src/third_party/boringssl/src/gen/sources.cmake +++ b/naiveproxy/src/third_party/boringssl/src/gen/sources.cmake @@ -1,17 +1,17 @@ # Copyright 2024 The BoringSSL Authors # -# Permission to use, copy, modify, and/or distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at # -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# https://www.apache.org/licenses/LICENSE-2.0 # +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + # Generated by go ./util/pregenerate. Do not edit manually. set( @@ -25,8 +25,15 @@ set( crypto/fipsmodule/aes/aes.cc.inc crypto/fipsmodule/aes/aes_nohw.cc.inc + crypto/fipsmodule/aes/cbc.cc.inc + crypto/fipsmodule/aes/cfb.cc.inc + crypto/fipsmodule/aes/ctr.cc.inc + crypto/fipsmodule/aes/gcm.cc.inc + crypto/fipsmodule/aes/gcm_nohw.cc.inc crypto/fipsmodule/aes/key_wrap.cc.inc crypto/fipsmodule/aes/mode_wrappers.cc.inc + crypto/fipsmodule/aes/ofb.cc.inc + crypto/fipsmodule/aes/polyval.cc.inc crypto/fipsmodule/bn/add.cc.inc crypto/fipsmodule/bn/asm/x86_64-gcc.cc.inc crypto/fipsmodule/bn/bn.cc.inc @@ -78,13 +85,6 @@ set( crypto/fipsmodule/keccak/keccak.cc.inc crypto/fipsmodule/mldsa/mldsa.cc.inc crypto/fipsmodule/mlkem/mlkem.cc.inc - crypto/fipsmodule/modes/cbc.cc.inc - crypto/fipsmodule/modes/cfb.cc.inc - crypto/fipsmodule/modes/ctr.cc.inc - crypto/fipsmodule/modes/gcm.cc.inc - crypto/fipsmodule/modes/gcm_nohw.cc.inc - crypto/fipsmodule/modes/ofb.cc.inc - crypto/fipsmodule/modes/polyval.cc.inc crypto/fipsmodule/rand/ctrdrbg.cc.inc crypto/fipsmodule/rand/rand.cc.inc crypto/fipsmodule/rsa/blinding.cc.inc @@ -312,8 +312,8 @@ set( crypto/bio/socket.cc crypto/bio/socket_helper.cc crypto/blake2/blake2.cc - crypto/bn_extra/bn_asn1.cc - crypto/bn_extra/convert.cc + crypto/bn/bn_asn1.cc + crypto/bn/convert.cc crypto/buf/buf.cc crypto/bytestring/asn1_compat.cc crypto/bytestring/ber.cc @@ -321,17 +321,17 @@ set( crypto/bytestring/cbs.cc crypto/bytestring/unicode.cc crypto/chacha/chacha.cc - crypto/cipher_extra/cipher_extra.cc - crypto/cipher_extra/derive_key.cc - crypto/cipher_extra/e_aesctrhmac.cc - crypto/cipher_extra/e_aesgcmsiv.cc - crypto/cipher_extra/e_chacha20poly1305.cc - crypto/cipher_extra/e_des.cc - crypto/cipher_extra/e_null.cc - crypto/cipher_extra/e_rc2.cc - crypto/cipher_extra/e_rc4.cc - crypto/cipher_extra/e_tls.cc - crypto/cipher_extra/tls_cbc.cc + crypto/cipher/derive_key.cc + crypto/cipher/e_aesctrhmac.cc + crypto/cipher/e_aesgcmsiv.cc + crypto/cipher/e_chacha20poly1305.cc + crypto/cipher/e_des.cc + crypto/cipher/e_null.cc + crypto/cipher/e_rc2.cc + crypto/cipher/e_rc4.cc + crypto/cipher/e_tls.cc + crypto/cipher/get_cipher.cc + crypto/cipher/tls_cbc.cc crypto/conf/conf.cc crypto/cpu_aarch64_apple.cc crypto/cpu_aarch64_fuchsia.cc @@ -347,16 +347,16 @@ set( crypto/curve25519/curve25519_64_adx.cc crypto/curve25519/spake25519.cc crypto/des/des.cc - crypto/dh_extra/dh_asn1.cc - crypto/dh_extra/params.cc - crypto/digest_extra/digest_extra.cc + crypto/dh/dh_asn1.cc + crypto/dh/params.cc + crypto/digest/digest_extra.cc crypto/dsa/dsa.cc crypto/dsa/dsa_asn1.cc - crypto/ec_extra/ec_asn1.cc - crypto/ec_extra/ec_derive.cc - crypto/ec_extra/hash_to_curve.cc - crypto/ecdh_extra/ecdh_extra.cc - crypto/ecdsa_extra/ecdsa_asn1.cc + crypto/ec/ec_asn1.cc + crypto/ec/ec_derive.cc + crypto/ec/hash_to_curve.cc + crypto/ecdh/ecdh.cc + crypto/ecdsa/ecdsa_asn1.cc crypto/engine/engine.cc crypto/err/err.cc crypto/evp/evp.cc @@ -408,27 +408,28 @@ set( crypto/poly1305/poly1305_arm.cc crypto/poly1305/poly1305_vec.cc crypto/pool/pool.cc - crypto/rand_extra/deterministic.cc - crypto/rand_extra/fork_detect.cc - crypto/rand_extra/forkunsafe.cc - crypto/rand_extra/getentropy.cc - crypto/rand_extra/ios.cc - crypto/rand_extra/passive.cc - crypto/rand_extra/rand_extra.cc - crypto/rand_extra/trusty.cc - crypto/rand_extra/urandom.cc - crypto/rand_extra/windows.cc + crypto/rand/deterministic.cc + crypto/rand/fork_detect.cc + crypto/rand/forkunsafe.cc + crypto/rand/getentropy.cc + crypto/rand/ios.cc + crypto/rand/passive.cc + crypto/rand/rand.cc + crypto/rand/trusty.cc + crypto/rand/urandom.cc + crypto/rand/windows.cc crypto/rc4/rc4.cc crypto/refcount.cc - crypto/rsa_extra/rsa_asn1.cc - crypto/rsa_extra/rsa_crypt.cc - crypto/rsa_extra/rsa_extra.cc - crypto/rsa_extra/rsa_print.cc + crypto/rsa/rsa_asn1.cc + crypto/rsa/rsa_crypt.cc + crypto/rsa/rsa_extra.cc + crypto/rsa/rsa_print.cc crypto/sha/sha1.cc crypto/sha/sha256.cc crypto/sha/sha512.cc crypto/siphash/siphash.cc crypto/slhdsa/slhdsa.cc + crypto/spake2plus/spake2plus.cc crypto/stack/stack.cc crypto/thread.cc crypto/thread_none.cc @@ -610,14 +611,14 @@ set( crypto/bio/internal.h crypto/bytestring/internal.h crypto/chacha/internal.h - crypto/cipher_extra/internal.h + crypto/cipher/internal.h crypto/conf/internal.h crypto/cpu_arm_linux.h crypto/curve25519/curve25519_tables.h crypto/curve25519/internal.h crypto/des/internal.h crypto/dsa/internal.h - crypto/ec_extra/internal.h + crypto/ec/internal.h crypto/err/internal.h crypto/evp/internal.h crypto/fipsmodule/aes/internal.h @@ -636,7 +637,6 @@ set( crypto/fipsmodule/ec/p256_table.h crypto/fipsmodule/ecdsa/internal.h crypto/fipsmodule/keccak/internal.h - crypto/fipsmodule/modes/internal.h crypto/fipsmodule/rand/internal.h crypto/fipsmodule/rsa/internal.h crypto/fipsmodule/service_indicator/internal.h @@ -659,9 +659,10 @@ set( crypto/pkcs8/internal.h crypto/poly1305/internal.h crypto/pool/internal.h - crypto/rand_extra/getrandom_fillin.h - crypto/rand_extra/sysrand_internal.h - crypto/rsa_extra/internal.h + crypto/rand/getrandom_fillin.h + crypto/rand/sysrand_internal.h + crypto/rsa/internal.h + crypto/spake2plus/internal.h crypto/trust_token/internal.h crypto/x509/ext_dat.h crypto/x509/internal.h @@ -725,8 +726,8 @@ set( crypto/buf/buf_test.cc crypto/bytestring/bytestring_test.cc crypto/chacha/chacha_test.cc - crypto/cipher_extra/aead_test.cc - crypto/cipher_extra/cipher_test.cc + crypto/cipher/aead_test.cc + crypto/cipher/cipher_test.cc crypto/compiler_test.cc crypto/conf/conf_test.cc crypto/constant_time_test.cc @@ -735,16 +736,17 @@ set( crypto/curve25519/ed25519_test.cc crypto/curve25519/spake25519_test.cc crypto/curve25519/x25519_test.cc - crypto/dh_extra/dh_test.cc - crypto/digest_extra/digest_test.cc + crypto/dh/dh_test.cc + crypto/digest/digest_test.cc crypto/dsa/dsa_test.cc - crypto/ecdh_extra/ecdh_test.cc + crypto/ecdh/ecdh_test.cc crypto/err/err_test.cc crypto/evp/evp_extra_test.cc crypto/evp/evp_test.cc crypto/evp/pbkdf_test.cc crypto/evp/scrypt_test.cc crypto/fipsmodule/aes/aes_test.cc + crypto/fipsmodule/aes/gcm_test.cc crypto/fipsmodule/bn/bn_test.cc crypto/fipsmodule/cmac/cmac_test.cc crypto/fipsmodule/ec/ec_test.cc @@ -753,11 +755,10 @@ set( crypto/fipsmodule/ecdsa/ecdsa_test.cc crypto/fipsmodule/hkdf/hkdf_test.cc crypto/fipsmodule/keccak/keccak_test.cc - crypto/fipsmodule/modes/gcm_test.cc crypto/fipsmodule/rand/ctrdrbg_test.cc crypto/fipsmodule/service_indicator/service_indicator_test.cc crypto/fipsmodule/sha/sha_test.cc - crypto/hmac_extra/hmac_test.cc + crypto/hmac/hmac_test.cc crypto/hpke/hpke_test.cc crypto/hrss/hrss_test.cc crypto/impl_dispatch_test.cc @@ -773,14 +774,15 @@ set( crypto/pkcs8/pkcs8_test.cc crypto/poly1305/poly1305_test.cc crypto/pool/pool_test.cc - crypto/rand_extra/fork_detect_test.cc - crypto/rand_extra/getentropy_test.cc - crypto/rand_extra/rand_test.cc + crypto/rand/fork_detect_test.cc + crypto/rand/getentropy_test.cc + crypto/rand/rand_test.cc crypto/refcount_test.cc - crypto/rsa_extra/rsa_test.cc + crypto/rsa/rsa_test.cc crypto/self_test.cc crypto/siphash/siphash_test.cc crypto/slhdsa/slhdsa_test.cc + crypto/spake2plus/spake2plus_test.cc crypto/stack/stack_test.cc crypto/test/gtest_main.cc crypto/thread_test.cc @@ -794,39 +796,39 @@ set( CRYPTO_TEST_DATA crypto/blake2/blake2b256_tests.txt - crypto/cipher_extra/test/aes_128_cbc_sha1_tls_implicit_iv_tests.txt - crypto/cipher_extra/test/aes_128_cbc_sha1_tls_tests.txt - crypto/cipher_extra/test/aes_128_ccm_bluetooth_8_tests.txt - crypto/cipher_extra/test/aes_128_ccm_bluetooth_tests.txt - crypto/cipher_extra/test/aes_128_ccm_matter_tests.txt - crypto/cipher_extra/test/aes_128_ctr_hmac_sha256.txt - crypto/cipher_extra/test/aes_128_gcm_randnonce_tests.txt - crypto/cipher_extra/test/aes_128_gcm_siv_tests.txt - crypto/cipher_extra/test/aes_128_gcm_tests.txt - crypto/cipher_extra/test/aes_192_gcm_tests.txt - crypto/cipher_extra/test/aes_256_cbc_sha1_tls_implicit_iv_tests.txt - crypto/cipher_extra/test/aes_256_cbc_sha1_tls_tests.txt - crypto/cipher_extra/test/aes_256_ctr_hmac_sha256.txt - crypto/cipher_extra/test/aes_256_gcm_randnonce_tests.txt - crypto/cipher_extra/test/aes_256_gcm_siv_tests.txt - crypto/cipher_extra/test/aes_256_gcm_tests.txt - crypto/cipher_extra/test/chacha20_poly1305_tests.txt - crypto/cipher_extra/test/cipher_tests.txt - crypto/cipher_extra/test/des_ede3_cbc_sha1_tls_implicit_iv_tests.txt - crypto/cipher_extra/test/des_ede3_cbc_sha1_tls_tests.txt - crypto/cipher_extra/test/nist_cavp/aes_128_cbc.txt - crypto/cipher_extra/test/nist_cavp/aes_128_ctr.txt - crypto/cipher_extra/test/nist_cavp/aes_128_gcm.txt - crypto/cipher_extra/test/nist_cavp/aes_192_cbc.txt - crypto/cipher_extra/test/nist_cavp/aes_192_ctr.txt - crypto/cipher_extra/test/nist_cavp/aes_256_cbc.txt - crypto/cipher_extra/test/nist_cavp/aes_256_ctr.txt - crypto/cipher_extra/test/nist_cavp/aes_256_gcm.txt - crypto/cipher_extra/test/nist_cavp/tdes_cbc.txt - crypto/cipher_extra/test/nist_cavp/tdes_ecb.txt - crypto/cipher_extra/test/xchacha20_poly1305_tests.txt + crypto/cipher/test/aes_128_cbc_sha1_tls_implicit_iv_tests.txt + crypto/cipher/test/aes_128_cbc_sha1_tls_tests.txt + crypto/cipher/test/aes_128_ccm_bluetooth_8_tests.txt + crypto/cipher/test/aes_128_ccm_bluetooth_tests.txt + crypto/cipher/test/aes_128_ccm_matter_tests.txt + crypto/cipher/test/aes_128_ctr_hmac_sha256.txt + crypto/cipher/test/aes_128_gcm_randnonce_tests.txt + crypto/cipher/test/aes_128_gcm_siv_tests.txt + crypto/cipher/test/aes_128_gcm_tests.txt + crypto/cipher/test/aes_192_gcm_tests.txt + crypto/cipher/test/aes_256_cbc_sha1_tls_implicit_iv_tests.txt + crypto/cipher/test/aes_256_cbc_sha1_tls_tests.txt + crypto/cipher/test/aes_256_ctr_hmac_sha256.txt + crypto/cipher/test/aes_256_gcm_randnonce_tests.txt + crypto/cipher/test/aes_256_gcm_siv_tests.txt + crypto/cipher/test/aes_256_gcm_tests.txt + crypto/cipher/test/chacha20_poly1305_tests.txt + crypto/cipher/test/cipher_tests.txt + crypto/cipher/test/des_ede3_cbc_sha1_tls_implicit_iv_tests.txt + crypto/cipher/test/des_ede3_cbc_sha1_tls_tests.txt + crypto/cipher/test/nist_cavp/aes_128_cbc.txt + crypto/cipher/test/nist_cavp/aes_128_ctr.txt + crypto/cipher/test/nist_cavp/aes_128_gcm.txt + crypto/cipher/test/nist_cavp/aes_192_cbc.txt + crypto/cipher/test/nist_cavp/aes_192_ctr.txt + crypto/cipher/test/nist_cavp/aes_256_cbc.txt + crypto/cipher/test/nist_cavp/aes_256_ctr.txt + crypto/cipher/test/nist_cavp/aes_256_gcm.txt + crypto/cipher/test/nist_cavp/tdes_cbc.txt + crypto/cipher/test/nist_cavp/tdes_ecb.txt + crypto/cipher/test/xchacha20_poly1305_tests.txt crypto/curve25519/ed25519_tests.txt - crypto/ecdh_extra/ecdh_tests.txt + crypto/ecdh/ecdh_tests.txt crypto/evp/evp_tests.txt crypto/evp/scrypt_tests.txt crypto/fipsmodule/aes/aes_tests.txt @@ -851,7 +853,7 @@ set( crypto/fipsmodule/ecdsa/ecdsa_verify_tests.txt crypto/fipsmodule/keccak/keccak_tests.txt crypto/fipsmodule/rand/ctrdrbg_vectors.txt - crypto/hmac_extra/hmac_tests.txt + crypto/hmac/hmac_tests.txt crypto/hpke/hpke_test_vectors.txt crypto/kyber/kyber_tests.txt crypto/mldsa/mldsa_nist_keygen_65_tests.txt @@ -2846,5 +2848,5 @@ set( set( URANDOM_TEST_SOURCES - crypto/rand_extra/urandom_test.cc + crypto/rand/urandom_test.cc ) diff --git a/naiveproxy/src/third_party/boringssl/src/gen/sources.gni b/naiveproxy/src/third_party/boringssl/src/gen/sources.gni index b5c3d54223..7d2c075d63 100644 --- a/naiveproxy/src/third_party/boringssl/src/gen/sources.gni +++ b/naiveproxy/src/third_party/boringssl/src/gen/sources.gni @@ -1,17 +1,17 @@ # Copyright 2024 The BoringSSL Authors # -# Permission to use, copy, modify, and/or distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at # -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# https://www.apache.org/licenses/LICENSE-2.0 # +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + # Generated by go ./util/pregenerate. Do not edit manually. bcm_sources = [ @@ -21,8 +21,15 @@ bcm_sources = [ bcm_internal_headers = [ "crypto/fipsmodule/aes/aes.cc.inc", "crypto/fipsmodule/aes/aes_nohw.cc.inc", + "crypto/fipsmodule/aes/cbc.cc.inc", + "crypto/fipsmodule/aes/cfb.cc.inc", + "crypto/fipsmodule/aes/ctr.cc.inc", + "crypto/fipsmodule/aes/gcm.cc.inc", + "crypto/fipsmodule/aes/gcm_nohw.cc.inc", "crypto/fipsmodule/aes/key_wrap.cc.inc", "crypto/fipsmodule/aes/mode_wrappers.cc.inc", + "crypto/fipsmodule/aes/ofb.cc.inc", + "crypto/fipsmodule/aes/polyval.cc.inc", "crypto/fipsmodule/bn/add.cc.inc", "crypto/fipsmodule/bn/asm/x86_64-gcc.cc.inc", "crypto/fipsmodule/bn/bn.cc.inc", @@ -74,13 +81,6 @@ bcm_internal_headers = [ "crypto/fipsmodule/keccak/keccak.cc.inc", "crypto/fipsmodule/mldsa/mldsa.cc.inc", "crypto/fipsmodule/mlkem/mlkem.cc.inc", - "crypto/fipsmodule/modes/cbc.cc.inc", - "crypto/fipsmodule/modes/cfb.cc.inc", - "crypto/fipsmodule/modes/ctr.cc.inc", - "crypto/fipsmodule/modes/gcm.cc.inc", - "crypto/fipsmodule/modes/gcm_nohw.cc.inc", - "crypto/fipsmodule/modes/ofb.cc.inc", - "crypto/fipsmodule/modes/polyval.cc.inc", "crypto/fipsmodule/rand/ctrdrbg.cc.inc", "crypto/fipsmodule/rand/rand.cc.inc", "crypto/fipsmodule/rsa/blinding.cc.inc", @@ -298,8 +298,8 @@ crypto_sources = [ "crypto/bio/socket.cc", "crypto/bio/socket_helper.cc", "crypto/blake2/blake2.cc", - "crypto/bn_extra/bn_asn1.cc", - "crypto/bn_extra/convert.cc", + "crypto/bn/bn_asn1.cc", + "crypto/bn/convert.cc", "crypto/buf/buf.cc", "crypto/bytestring/asn1_compat.cc", "crypto/bytestring/ber.cc", @@ -307,17 +307,17 @@ crypto_sources = [ "crypto/bytestring/cbs.cc", "crypto/bytestring/unicode.cc", "crypto/chacha/chacha.cc", - "crypto/cipher_extra/cipher_extra.cc", - "crypto/cipher_extra/derive_key.cc", - "crypto/cipher_extra/e_aesctrhmac.cc", - "crypto/cipher_extra/e_aesgcmsiv.cc", - "crypto/cipher_extra/e_chacha20poly1305.cc", - "crypto/cipher_extra/e_des.cc", - "crypto/cipher_extra/e_null.cc", - "crypto/cipher_extra/e_rc2.cc", - "crypto/cipher_extra/e_rc4.cc", - "crypto/cipher_extra/e_tls.cc", - "crypto/cipher_extra/tls_cbc.cc", + "crypto/cipher/derive_key.cc", + "crypto/cipher/e_aesctrhmac.cc", + "crypto/cipher/e_aesgcmsiv.cc", + "crypto/cipher/e_chacha20poly1305.cc", + "crypto/cipher/e_des.cc", + "crypto/cipher/e_null.cc", + "crypto/cipher/e_rc2.cc", + "crypto/cipher/e_rc4.cc", + "crypto/cipher/e_tls.cc", + "crypto/cipher/get_cipher.cc", + "crypto/cipher/tls_cbc.cc", "crypto/conf/conf.cc", "crypto/cpu_aarch64_apple.cc", "crypto/cpu_aarch64_fuchsia.cc", @@ -333,16 +333,16 @@ crypto_sources = [ "crypto/curve25519/curve25519_64_adx.cc", "crypto/curve25519/spake25519.cc", "crypto/des/des.cc", - "crypto/dh_extra/dh_asn1.cc", - "crypto/dh_extra/params.cc", - "crypto/digest_extra/digest_extra.cc", + "crypto/dh/dh_asn1.cc", + "crypto/dh/params.cc", + "crypto/digest/digest_extra.cc", "crypto/dsa/dsa.cc", "crypto/dsa/dsa_asn1.cc", - "crypto/ec_extra/ec_asn1.cc", - "crypto/ec_extra/ec_derive.cc", - "crypto/ec_extra/hash_to_curve.cc", - "crypto/ecdh_extra/ecdh_extra.cc", - "crypto/ecdsa_extra/ecdsa_asn1.cc", + "crypto/ec/ec_asn1.cc", + "crypto/ec/ec_derive.cc", + "crypto/ec/hash_to_curve.cc", + "crypto/ecdh/ecdh.cc", + "crypto/ecdsa/ecdsa_asn1.cc", "crypto/engine/engine.cc", "crypto/err/err.cc", "crypto/evp/evp.cc", @@ -394,27 +394,28 @@ crypto_sources = [ "crypto/poly1305/poly1305_arm.cc", "crypto/poly1305/poly1305_vec.cc", "crypto/pool/pool.cc", - "crypto/rand_extra/deterministic.cc", - "crypto/rand_extra/fork_detect.cc", - "crypto/rand_extra/forkunsafe.cc", - "crypto/rand_extra/getentropy.cc", - "crypto/rand_extra/ios.cc", - "crypto/rand_extra/passive.cc", - "crypto/rand_extra/rand_extra.cc", - "crypto/rand_extra/trusty.cc", - "crypto/rand_extra/urandom.cc", - "crypto/rand_extra/windows.cc", + "crypto/rand/deterministic.cc", + "crypto/rand/fork_detect.cc", + "crypto/rand/forkunsafe.cc", + "crypto/rand/getentropy.cc", + "crypto/rand/ios.cc", + "crypto/rand/passive.cc", + "crypto/rand/rand.cc", + "crypto/rand/trusty.cc", + "crypto/rand/urandom.cc", + "crypto/rand/windows.cc", "crypto/rc4/rc4.cc", "crypto/refcount.cc", - "crypto/rsa_extra/rsa_asn1.cc", - "crypto/rsa_extra/rsa_crypt.cc", - "crypto/rsa_extra/rsa_extra.cc", - "crypto/rsa_extra/rsa_print.cc", + "crypto/rsa/rsa_asn1.cc", + "crypto/rsa/rsa_crypt.cc", + "crypto/rsa/rsa_extra.cc", + "crypto/rsa/rsa_print.cc", "crypto/sha/sha1.cc", "crypto/sha/sha256.cc", "crypto/sha/sha512.cc", "crypto/siphash/siphash.cc", "crypto/slhdsa/slhdsa.cc", + "crypto/spake2plus/spake2plus.cc", "crypto/stack/stack.cc", "crypto/thread.cc", "crypto/thread_none.cc", @@ -592,14 +593,14 @@ crypto_internal_headers = [ "crypto/bio/internal.h", "crypto/bytestring/internal.h", "crypto/chacha/internal.h", - "crypto/cipher_extra/internal.h", + "crypto/cipher/internal.h", "crypto/conf/internal.h", "crypto/cpu_arm_linux.h", "crypto/curve25519/curve25519_tables.h", "crypto/curve25519/internal.h", "crypto/des/internal.h", "crypto/dsa/internal.h", - "crypto/ec_extra/internal.h", + "crypto/ec/internal.h", "crypto/err/internal.h", "crypto/evp/internal.h", "crypto/fipsmodule/aes/internal.h", @@ -618,7 +619,6 @@ crypto_internal_headers = [ "crypto/fipsmodule/ec/p256_table.h", "crypto/fipsmodule/ecdsa/internal.h", "crypto/fipsmodule/keccak/internal.h", - "crypto/fipsmodule/modes/internal.h", "crypto/fipsmodule/rand/internal.h", "crypto/fipsmodule/rsa/internal.h", "crypto/fipsmodule/service_indicator/internal.h", @@ -641,9 +641,10 @@ crypto_internal_headers = [ "crypto/pkcs8/internal.h", "crypto/poly1305/internal.h", "crypto/pool/internal.h", - "crypto/rand_extra/getrandom_fillin.h", - "crypto/rand_extra/sysrand_internal.h", - "crypto/rsa_extra/internal.h", + "crypto/rand/getrandom_fillin.h", + "crypto/rand/sysrand_internal.h", + "crypto/rsa/internal.h", + "crypto/spake2plus/internal.h", "crypto/trust_token/internal.h", "crypto/x509/ext_dat.h", "crypto/x509/internal.h", @@ -701,8 +702,8 @@ crypto_test_sources = [ "crypto/buf/buf_test.cc", "crypto/bytestring/bytestring_test.cc", "crypto/chacha/chacha_test.cc", - "crypto/cipher_extra/aead_test.cc", - "crypto/cipher_extra/cipher_test.cc", + "crypto/cipher/aead_test.cc", + "crypto/cipher/cipher_test.cc", "crypto/compiler_test.cc", "crypto/conf/conf_test.cc", "crypto/constant_time_test.cc", @@ -711,16 +712,17 @@ crypto_test_sources = [ "crypto/curve25519/ed25519_test.cc", "crypto/curve25519/spake25519_test.cc", "crypto/curve25519/x25519_test.cc", - "crypto/dh_extra/dh_test.cc", - "crypto/digest_extra/digest_test.cc", + "crypto/dh/dh_test.cc", + "crypto/digest/digest_test.cc", "crypto/dsa/dsa_test.cc", - "crypto/ecdh_extra/ecdh_test.cc", + "crypto/ecdh/ecdh_test.cc", "crypto/err/err_test.cc", "crypto/evp/evp_extra_test.cc", "crypto/evp/evp_test.cc", "crypto/evp/pbkdf_test.cc", "crypto/evp/scrypt_test.cc", "crypto/fipsmodule/aes/aes_test.cc", + "crypto/fipsmodule/aes/gcm_test.cc", "crypto/fipsmodule/bn/bn_test.cc", "crypto/fipsmodule/cmac/cmac_test.cc", "crypto/fipsmodule/ec/ec_test.cc", @@ -729,11 +731,10 @@ crypto_test_sources = [ "crypto/fipsmodule/ecdsa/ecdsa_test.cc", "crypto/fipsmodule/hkdf/hkdf_test.cc", "crypto/fipsmodule/keccak/keccak_test.cc", - "crypto/fipsmodule/modes/gcm_test.cc", "crypto/fipsmodule/rand/ctrdrbg_test.cc", "crypto/fipsmodule/service_indicator/service_indicator_test.cc", "crypto/fipsmodule/sha/sha_test.cc", - "crypto/hmac_extra/hmac_test.cc", + "crypto/hmac/hmac_test.cc", "crypto/hpke/hpke_test.cc", "crypto/hrss/hrss_test.cc", "crypto/impl_dispatch_test.cc", @@ -749,14 +750,15 @@ crypto_test_sources = [ "crypto/pkcs8/pkcs8_test.cc", "crypto/poly1305/poly1305_test.cc", "crypto/pool/pool_test.cc", - "crypto/rand_extra/fork_detect_test.cc", - "crypto/rand_extra/getentropy_test.cc", - "crypto/rand_extra/rand_test.cc", + "crypto/rand/fork_detect_test.cc", + "crypto/rand/getentropy_test.cc", + "crypto/rand/rand_test.cc", "crypto/refcount_test.cc", - "crypto/rsa_extra/rsa_test.cc", + "crypto/rsa/rsa_test.cc", "crypto/self_test.cc", "crypto/siphash/siphash_test.cc", "crypto/slhdsa/slhdsa_test.cc", + "crypto/spake2plus/spake2plus_test.cc", "crypto/stack/stack_test.cc", "crypto/test/gtest_main.cc", "crypto/thread_test.cc", @@ -768,39 +770,39 @@ crypto_test_sources = [ crypto_test_data = [ "crypto/blake2/blake2b256_tests.txt", - "crypto/cipher_extra/test/aes_128_cbc_sha1_tls_implicit_iv_tests.txt", - "crypto/cipher_extra/test/aes_128_cbc_sha1_tls_tests.txt", - "crypto/cipher_extra/test/aes_128_ccm_bluetooth_8_tests.txt", - "crypto/cipher_extra/test/aes_128_ccm_bluetooth_tests.txt", - "crypto/cipher_extra/test/aes_128_ccm_matter_tests.txt", - "crypto/cipher_extra/test/aes_128_ctr_hmac_sha256.txt", - "crypto/cipher_extra/test/aes_128_gcm_randnonce_tests.txt", - "crypto/cipher_extra/test/aes_128_gcm_siv_tests.txt", - "crypto/cipher_extra/test/aes_128_gcm_tests.txt", - "crypto/cipher_extra/test/aes_192_gcm_tests.txt", - "crypto/cipher_extra/test/aes_256_cbc_sha1_tls_implicit_iv_tests.txt", - "crypto/cipher_extra/test/aes_256_cbc_sha1_tls_tests.txt", - "crypto/cipher_extra/test/aes_256_ctr_hmac_sha256.txt", - "crypto/cipher_extra/test/aes_256_gcm_randnonce_tests.txt", - "crypto/cipher_extra/test/aes_256_gcm_siv_tests.txt", - "crypto/cipher_extra/test/aes_256_gcm_tests.txt", - "crypto/cipher_extra/test/chacha20_poly1305_tests.txt", - "crypto/cipher_extra/test/cipher_tests.txt", - "crypto/cipher_extra/test/des_ede3_cbc_sha1_tls_implicit_iv_tests.txt", - "crypto/cipher_extra/test/des_ede3_cbc_sha1_tls_tests.txt", - "crypto/cipher_extra/test/nist_cavp/aes_128_cbc.txt", - "crypto/cipher_extra/test/nist_cavp/aes_128_ctr.txt", - "crypto/cipher_extra/test/nist_cavp/aes_128_gcm.txt", - "crypto/cipher_extra/test/nist_cavp/aes_192_cbc.txt", - "crypto/cipher_extra/test/nist_cavp/aes_192_ctr.txt", - "crypto/cipher_extra/test/nist_cavp/aes_256_cbc.txt", - "crypto/cipher_extra/test/nist_cavp/aes_256_ctr.txt", - "crypto/cipher_extra/test/nist_cavp/aes_256_gcm.txt", - "crypto/cipher_extra/test/nist_cavp/tdes_cbc.txt", - "crypto/cipher_extra/test/nist_cavp/tdes_ecb.txt", - "crypto/cipher_extra/test/xchacha20_poly1305_tests.txt", + "crypto/cipher/test/aes_128_cbc_sha1_tls_implicit_iv_tests.txt", + "crypto/cipher/test/aes_128_cbc_sha1_tls_tests.txt", + "crypto/cipher/test/aes_128_ccm_bluetooth_8_tests.txt", + "crypto/cipher/test/aes_128_ccm_bluetooth_tests.txt", + "crypto/cipher/test/aes_128_ccm_matter_tests.txt", + "crypto/cipher/test/aes_128_ctr_hmac_sha256.txt", + "crypto/cipher/test/aes_128_gcm_randnonce_tests.txt", + "crypto/cipher/test/aes_128_gcm_siv_tests.txt", + "crypto/cipher/test/aes_128_gcm_tests.txt", + "crypto/cipher/test/aes_192_gcm_tests.txt", + "crypto/cipher/test/aes_256_cbc_sha1_tls_implicit_iv_tests.txt", + "crypto/cipher/test/aes_256_cbc_sha1_tls_tests.txt", + "crypto/cipher/test/aes_256_ctr_hmac_sha256.txt", + "crypto/cipher/test/aes_256_gcm_randnonce_tests.txt", + "crypto/cipher/test/aes_256_gcm_siv_tests.txt", + "crypto/cipher/test/aes_256_gcm_tests.txt", + "crypto/cipher/test/chacha20_poly1305_tests.txt", + "crypto/cipher/test/cipher_tests.txt", + "crypto/cipher/test/des_ede3_cbc_sha1_tls_implicit_iv_tests.txt", + "crypto/cipher/test/des_ede3_cbc_sha1_tls_tests.txt", + "crypto/cipher/test/nist_cavp/aes_128_cbc.txt", + "crypto/cipher/test/nist_cavp/aes_128_ctr.txt", + "crypto/cipher/test/nist_cavp/aes_128_gcm.txt", + "crypto/cipher/test/nist_cavp/aes_192_cbc.txt", + "crypto/cipher/test/nist_cavp/aes_192_ctr.txt", + "crypto/cipher/test/nist_cavp/aes_256_cbc.txt", + "crypto/cipher/test/nist_cavp/aes_256_ctr.txt", + "crypto/cipher/test/nist_cavp/aes_256_gcm.txt", + "crypto/cipher/test/nist_cavp/tdes_cbc.txt", + "crypto/cipher/test/nist_cavp/tdes_ecb.txt", + "crypto/cipher/test/xchacha20_poly1305_tests.txt", "crypto/curve25519/ed25519_tests.txt", - "crypto/ecdh_extra/ecdh_tests.txt", + "crypto/ecdh/ecdh_tests.txt", "crypto/evp/evp_tests.txt", "crypto/evp/scrypt_tests.txt", "crypto/fipsmodule/aes/aes_tests.txt", @@ -825,7 +827,7 @@ crypto_test_data = [ "crypto/fipsmodule/ecdsa/ecdsa_verify_tests.txt", "crypto/fipsmodule/keccak/keccak_tests.txt", "crypto/fipsmodule/rand/ctrdrbg_vectors.txt", - "crypto/hmac_extra/hmac_tests.txt", + "crypto/hmac/hmac_tests.txt", "crypto/hpke/hpke_test_vectors.txt", "crypto/kyber/kyber_tests.txt", "crypto/mldsa/mldsa_nist_keygen_65_tests.txt", @@ -2780,5 +2782,5 @@ test_support_sources_nasm = [ ] urandom_test_sources = [ - "crypto/rand_extra/urandom_test.cc", + "crypto/rand/urandom_test.cc", ] diff --git a/naiveproxy/src/third_party/boringssl/src/gen/sources.json b/naiveproxy/src/third_party/boringssl/src/gen/sources.json index c4604c8365..6f2e84f329 100644 --- a/naiveproxy/src/third_party/boringssl/src/gen/sources.json +++ b/naiveproxy/src/third_party/boringssl/src/gen/sources.json @@ -6,8 +6,15 @@ "internal_hdrs": [ "crypto/fipsmodule/aes/aes.cc.inc", "crypto/fipsmodule/aes/aes_nohw.cc.inc", + "crypto/fipsmodule/aes/cbc.cc.inc", + "crypto/fipsmodule/aes/cfb.cc.inc", + "crypto/fipsmodule/aes/ctr.cc.inc", + "crypto/fipsmodule/aes/gcm.cc.inc", + "crypto/fipsmodule/aes/gcm_nohw.cc.inc", "crypto/fipsmodule/aes/key_wrap.cc.inc", "crypto/fipsmodule/aes/mode_wrappers.cc.inc", + "crypto/fipsmodule/aes/ofb.cc.inc", + "crypto/fipsmodule/aes/polyval.cc.inc", "crypto/fipsmodule/bn/add.cc.inc", "crypto/fipsmodule/bn/asm/x86_64-gcc.cc.inc", "crypto/fipsmodule/bn/bn.cc.inc", @@ -59,13 +66,6 @@ "crypto/fipsmodule/keccak/keccak.cc.inc", "crypto/fipsmodule/mldsa/mldsa.cc.inc", "crypto/fipsmodule/mlkem/mlkem.cc.inc", - "crypto/fipsmodule/modes/cbc.cc.inc", - "crypto/fipsmodule/modes/cfb.cc.inc", - "crypto/fipsmodule/modes/ctr.cc.inc", - "crypto/fipsmodule/modes/gcm.cc.inc", - "crypto/fipsmodule/modes/gcm_nohw.cc.inc", - "crypto/fipsmodule/modes/ofb.cc.inc", - "crypto/fipsmodule/modes/polyval.cc.inc", "crypto/fipsmodule/rand/ctrdrbg.cc.inc", "crypto/fipsmodule/rand/rand.cc.inc", "crypto/fipsmodule/rsa/blinding.cc.inc", @@ -282,8 +282,8 @@ "crypto/bio/socket.cc", "crypto/bio/socket_helper.cc", "crypto/blake2/blake2.cc", - "crypto/bn_extra/bn_asn1.cc", - "crypto/bn_extra/convert.cc", + "crypto/bn/bn_asn1.cc", + "crypto/bn/convert.cc", "crypto/buf/buf.cc", "crypto/bytestring/asn1_compat.cc", "crypto/bytestring/ber.cc", @@ -291,17 +291,17 @@ "crypto/bytestring/cbs.cc", "crypto/bytestring/unicode.cc", "crypto/chacha/chacha.cc", - "crypto/cipher_extra/cipher_extra.cc", - "crypto/cipher_extra/derive_key.cc", - "crypto/cipher_extra/e_aesctrhmac.cc", - "crypto/cipher_extra/e_aesgcmsiv.cc", - "crypto/cipher_extra/e_chacha20poly1305.cc", - "crypto/cipher_extra/e_des.cc", - "crypto/cipher_extra/e_null.cc", - "crypto/cipher_extra/e_rc2.cc", - "crypto/cipher_extra/e_rc4.cc", - "crypto/cipher_extra/e_tls.cc", - "crypto/cipher_extra/tls_cbc.cc", + "crypto/cipher/derive_key.cc", + "crypto/cipher/e_aesctrhmac.cc", + "crypto/cipher/e_aesgcmsiv.cc", + "crypto/cipher/e_chacha20poly1305.cc", + "crypto/cipher/e_des.cc", + "crypto/cipher/e_null.cc", + "crypto/cipher/e_rc2.cc", + "crypto/cipher/e_rc4.cc", + "crypto/cipher/e_tls.cc", + "crypto/cipher/get_cipher.cc", + "crypto/cipher/tls_cbc.cc", "crypto/conf/conf.cc", "crypto/cpu_aarch64_apple.cc", "crypto/cpu_aarch64_fuchsia.cc", @@ -317,16 +317,16 @@ "crypto/curve25519/curve25519_64_adx.cc", "crypto/curve25519/spake25519.cc", "crypto/des/des.cc", - "crypto/dh_extra/dh_asn1.cc", - "crypto/dh_extra/params.cc", - "crypto/digest_extra/digest_extra.cc", + "crypto/dh/dh_asn1.cc", + "crypto/dh/params.cc", + "crypto/digest/digest_extra.cc", "crypto/dsa/dsa.cc", "crypto/dsa/dsa_asn1.cc", - "crypto/ec_extra/ec_asn1.cc", - "crypto/ec_extra/ec_derive.cc", - "crypto/ec_extra/hash_to_curve.cc", - "crypto/ecdh_extra/ecdh_extra.cc", - "crypto/ecdsa_extra/ecdsa_asn1.cc", + "crypto/ec/ec_asn1.cc", + "crypto/ec/ec_derive.cc", + "crypto/ec/hash_to_curve.cc", + "crypto/ecdh/ecdh.cc", + "crypto/ecdsa/ecdsa_asn1.cc", "crypto/engine/engine.cc", "crypto/err/err.cc", "crypto/evp/evp.cc", @@ -378,27 +378,28 @@ "crypto/poly1305/poly1305_arm.cc", "crypto/poly1305/poly1305_vec.cc", "crypto/pool/pool.cc", - "crypto/rand_extra/deterministic.cc", - "crypto/rand_extra/fork_detect.cc", - "crypto/rand_extra/forkunsafe.cc", - "crypto/rand_extra/getentropy.cc", - "crypto/rand_extra/ios.cc", - "crypto/rand_extra/passive.cc", - "crypto/rand_extra/rand_extra.cc", - "crypto/rand_extra/trusty.cc", - "crypto/rand_extra/urandom.cc", - "crypto/rand_extra/windows.cc", + "crypto/rand/deterministic.cc", + "crypto/rand/fork_detect.cc", + "crypto/rand/forkunsafe.cc", + "crypto/rand/getentropy.cc", + "crypto/rand/ios.cc", + "crypto/rand/passive.cc", + "crypto/rand/rand.cc", + "crypto/rand/trusty.cc", + "crypto/rand/urandom.cc", + "crypto/rand/windows.cc", "crypto/rc4/rc4.cc", "crypto/refcount.cc", - "crypto/rsa_extra/rsa_asn1.cc", - "crypto/rsa_extra/rsa_crypt.cc", - "crypto/rsa_extra/rsa_extra.cc", - "crypto/rsa_extra/rsa_print.cc", + "crypto/rsa/rsa_asn1.cc", + "crypto/rsa/rsa_crypt.cc", + "crypto/rsa/rsa_extra.cc", + "crypto/rsa/rsa_print.cc", "crypto/sha/sha1.cc", "crypto/sha/sha256.cc", "crypto/sha/sha512.cc", "crypto/siphash/siphash.cc", "crypto/slhdsa/slhdsa.cc", + "crypto/spake2plus/spake2plus.cc", "crypto/stack/stack.cc", "crypto/thread.cc", "crypto/thread_none.cc", @@ -574,14 +575,14 @@ "crypto/bio/internal.h", "crypto/bytestring/internal.h", "crypto/chacha/internal.h", - "crypto/cipher_extra/internal.h", + "crypto/cipher/internal.h", "crypto/conf/internal.h", "crypto/cpu_arm_linux.h", "crypto/curve25519/curve25519_tables.h", "crypto/curve25519/internal.h", "crypto/des/internal.h", "crypto/dsa/internal.h", - "crypto/ec_extra/internal.h", + "crypto/ec/internal.h", "crypto/err/internal.h", "crypto/evp/internal.h", "crypto/fipsmodule/aes/internal.h", @@ -600,7 +601,6 @@ "crypto/fipsmodule/ec/p256_table.h", "crypto/fipsmodule/ecdsa/internal.h", "crypto/fipsmodule/keccak/internal.h", - "crypto/fipsmodule/modes/internal.h", "crypto/fipsmodule/rand/internal.h", "crypto/fipsmodule/rsa/internal.h", "crypto/fipsmodule/service_indicator/internal.h", @@ -623,9 +623,10 @@ "crypto/pkcs8/internal.h", "crypto/poly1305/internal.h", "crypto/pool/internal.h", - "crypto/rand_extra/getrandom_fillin.h", - "crypto/rand_extra/sysrand_internal.h", - "crypto/rsa_extra/internal.h", + "crypto/rand/getrandom_fillin.h", + "crypto/rand/sysrand_internal.h", + "crypto/rsa/internal.h", + "crypto/spake2plus/internal.h", "crypto/trust_token/internal.h", "crypto/x509/ext_dat.h", "crypto/x509/internal.h", @@ -682,8 +683,8 @@ "crypto/buf/buf_test.cc", "crypto/bytestring/bytestring_test.cc", "crypto/chacha/chacha_test.cc", - "crypto/cipher_extra/aead_test.cc", - "crypto/cipher_extra/cipher_test.cc", + "crypto/cipher/aead_test.cc", + "crypto/cipher/cipher_test.cc", "crypto/compiler_test.cc", "crypto/conf/conf_test.cc", "crypto/constant_time_test.cc", @@ -692,16 +693,17 @@ "crypto/curve25519/ed25519_test.cc", "crypto/curve25519/spake25519_test.cc", "crypto/curve25519/x25519_test.cc", - "crypto/dh_extra/dh_test.cc", - "crypto/digest_extra/digest_test.cc", + "crypto/dh/dh_test.cc", + "crypto/digest/digest_test.cc", "crypto/dsa/dsa_test.cc", - "crypto/ecdh_extra/ecdh_test.cc", + "crypto/ecdh/ecdh_test.cc", "crypto/err/err_test.cc", "crypto/evp/evp_extra_test.cc", "crypto/evp/evp_test.cc", "crypto/evp/pbkdf_test.cc", "crypto/evp/scrypt_test.cc", "crypto/fipsmodule/aes/aes_test.cc", + "crypto/fipsmodule/aes/gcm_test.cc", "crypto/fipsmodule/bn/bn_test.cc", "crypto/fipsmodule/cmac/cmac_test.cc", "crypto/fipsmodule/ec/ec_test.cc", @@ -710,11 +712,10 @@ "crypto/fipsmodule/ecdsa/ecdsa_test.cc", "crypto/fipsmodule/hkdf/hkdf_test.cc", "crypto/fipsmodule/keccak/keccak_test.cc", - "crypto/fipsmodule/modes/gcm_test.cc", "crypto/fipsmodule/rand/ctrdrbg_test.cc", "crypto/fipsmodule/service_indicator/service_indicator_test.cc", "crypto/fipsmodule/sha/sha_test.cc", - "crypto/hmac_extra/hmac_test.cc", + "crypto/hmac/hmac_test.cc", "crypto/hpke/hpke_test.cc", "crypto/hrss/hrss_test.cc", "crypto/impl_dispatch_test.cc", @@ -730,14 +731,15 @@ "crypto/pkcs8/pkcs8_test.cc", "crypto/poly1305/poly1305_test.cc", "crypto/pool/pool_test.cc", - "crypto/rand_extra/fork_detect_test.cc", - "crypto/rand_extra/getentropy_test.cc", - "crypto/rand_extra/rand_test.cc", + "crypto/rand/fork_detect_test.cc", + "crypto/rand/getentropy_test.cc", + "crypto/rand/rand_test.cc", "crypto/refcount_test.cc", - "crypto/rsa_extra/rsa_test.cc", + "crypto/rsa/rsa_test.cc", "crypto/self_test.cc", "crypto/siphash/siphash_test.cc", "crypto/slhdsa/slhdsa_test.cc", + "crypto/spake2plus/spake2plus_test.cc", "crypto/stack/stack_test.cc", "crypto/test/gtest_main.cc", "crypto/thread_test.cc", @@ -748,39 +750,39 @@ ], "data": [ "crypto/blake2/blake2b256_tests.txt", - "crypto/cipher_extra/test/aes_128_cbc_sha1_tls_implicit_iv_tests.txt", - "crypto/cipher_extra/test/aes_128_cbc_sha1_tls_tests.txt", - "crypto/cipher_extra/test/aes_128_ccm_bluetooth_8_tests.txt", - "crypto/cipher_extra/test/aes_128_ccm_bluetooth_tests.txt", - "crypto/cipher_extra/test/aes_128_ccm_matter_tests.txt", - "crypto/cipher_extra/test/aes_128_ctr_hmac_sha256.txt", - "crypto/cipher_extra/test/aes_128_gcm_randnonce_tests.txt", - "crypto/cipher_extra/test/aes_128_gcm_siv_tests.txt", - "crypto/cipher_extra/test/aes_128_gcm_tests.txt", - "crypto/cipher_extra/test/aes_192_gcm_tests.txt", - "crypto/cipher_extra/test/aes_256_cbc_sha1_tls_implicit_iv_tests.txt", - "crypto/cipher_extra/test/aes_256_cbc_sha1_tls_tests.txt", - "crypto/cipher_extra/test/aes_256_ctr_hmac_sha256.txt", - "crypto/cipher_extra/test/aes_256_gcm_randnonce_tests.txt", - "crypto/cipher_extra/test/aes_256_gcm_siv_tests.txt", - "crypto/cipher_extra/test/aes_256_gcm_tests.txt", - "crypto/cipher_extra/test/chacha20_poly1305_tests.txt", - "crypto/cipher_extra/test/cipher_tests.txt", - "crypto/cipher_extra/test/des_ede3_cbc_sha1_tls_implicit_iv_tests.txt", - "crypto/cipher_extra/test/des_ede3_cbc_sha1_tls_tests.txt", - "crypto/cipher_extra/test/nist_cavp/aes_128_cbc.txt", - "crypto/cipher_extra/test/nist_cavp/aes_128_ctr.txt", - "crypto/cipher_extra/test/nist_cavp/aes_128_gcm.txt", - "crypto/cipher_extra/test/nist_cavp/aes_192_cbc.txt", - "crypto/cipher_extra/test/nist_cavp/aes_192_ctr.txt", - "crypto/cipher_extra/test/nist_cavp/aes_256_cbc.txt", - "crypto/cipher_extra/test/nist_cavp/aes_256_ctr.txt", - "crypto/cipher_extra/test/nist_cavp/aes_256_gcm.txt", - "crypto/cipher_extra/test/nist_cavp/tdes_cbc.txt", - "crypto/cipher_extra/test/nist_cavp/tdes_ecb.txt", - "crypto/cipher_extra/test/xchacha20_poly1305_tests.txt", + "crypto/cipher/test/aes_128_cbc_sha1_tls_implicit_iv_tests.txt", + "crypto/cipher/test/aes_128_cbc_sha1_tls_tests.txt", + "crypto/cipher/test/aes_128_ccm_bluetooth_8_tests.txt", + "crypto/cipher/test/aes_128_ccm_bluetooth_tests.txt", + "crypto/cipher/test/aes_128_ccm_matter_tests.txt", + "crypto/cipher/test/aes_128_ctr_hmac_sha256.txt", + "crypto/cipher/test/aes_128_gcm_randnonce_tests.txt", + "crypto/cipher/test/aes_128_gcm_siv_tests.txt", + "crypto/cipher/test/aes_128_gcm_tests.txt", + "crypto/cipher/test/aes_192_gcm_tests.txt", + "crypto/cipher/test/aes_256_cbc_sha1_tls_implicit_iv_tests.txt", + "crypto/cipher/test/aes_256_cbc_sha1_tls_tests.txt", + "crypto/cipher/test/aes_256_ctr_hmac_sha256.txt", + "crypto/cipher/test/aes_256_gcm_randnonce_tests.txt", + "crypto/cipher/test/aes_256_gcm_siv_tests.txt", + "crypto/cipher/test/aes_256_gcm_tests.txt", + "crypto/cipher/test/chacha20_poly1305_tests.txt", + "crypto/cipher/test/cipher_tests.txt", + "crypto/cipher/test/des_ede3_cbc_sha1_tls_implicit_iv_tests.txt", + "crypto/cipher/test/des_ede3_cbc_sha1_tls_tests.txt", + "crypto/cipher/test/nist_cavp/aes_128_cbc.txt", + "crypto/cipher/test/nist_cavp/aes_128_ctr.txt", + "crypto/cipher/test/nist_cavp/aes_128_gcm.txt", + "crypto/cipher/test/nist_cavp/aes_192_cbc.txt", + "crypto/cipher/test/nist_cavp/aes_192_ctr.txt", + "crypto/cipher/test/nist_cavp/aes_256_cbc.txt", + "crypto/cipher/test/nist_cavp/aes_256_ctr.txt", + "crypto/cipher/test/nist_cavp/aes_256_gcm.txt", + "crypto/cipher/test/nist_cavp/tdes_cbc.txt", + "crypto/cipher/test/nist_cavp/tdes_ecb.txt", + "crypto/cipher/test/xchacha20_poly1305_tests.txt", "crypto/curve25519/ed25519_tests.txt", - "crypto/ecdh_extra/ecdh_tests.txt", + "crypto/ecdh/ecdh_tests.txt", "crypto/evp/evp_tests.txt", "crypto/evp/scrypt_tests.txt", "crypto/fipsmodule/aes/aes_tests.txt", @@ -805,7 +807,7 @@ "crypto/fipsmodule/ecdsa/ecdsa_verify_tests.txt", "crypto/fipsmodule/keccak/keccak_tests.txt", "crypto/fipsmodule/rand/ctrdrbg_vectors.txt", - "crypto/hmac_extra/hmac_tests.txt", + "crypto/hmac/hmac_tests.txt", "crypto/hpke/hpke_test_vectors.txt", "crypto/kyber/kyber_tests.txt", "crypto/mldsa/mldsa_nist_keygen_65_tests.txt", @@ -2762,7 +2764,7 @@ }, "urandom_test": { "srcs": [ - "crypto/rand_extra/urandom_test.cc" + "crypto/rand/urandom_test.cc" ] } } \ No newline at end of file diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/aead.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/aead.h index f27eb89de6..570dec6d24 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/aead.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/aead.h @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_AEAD_H #define OPENSSL_HEADER_AEAD_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/aes.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/aes.h index df6550d0a2..ea3e9d9eeb 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/aes.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/aes.h @@ -1,11 +1,16 @@ -/* - * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_AES_H #define OPENSSL_HEADER_AES_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/arm_arch.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/arm_arch.h index da3287edf8..00de651886 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/arm_arch.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/arm_arch.h @@ -1,11 +1,16 @@ -/* - * Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_ARM_ARCH_H #define OPENSSL_HEADER_ARM_ARCH_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/asm_base.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/asm_base.h index 08aa0be623..4fc5dd5dc6 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/asm_base.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/asm_base.h @@ -1,16 +1,16 @@ -/* Copyright 2023 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2023 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_ASM_BASE_H #define OPENSSL_HEADER_ASM_BASE_H @@ -152,7 +152,7 @@ // // References: // - "ELF for the Arm® 64-bit Architecture" -// https://github.com/ARM-software/abi-aa/blob/master/aaelf64/aaelf64.rst +// https://github.com/ARM-software/abi-aa/blob/main/aaelf64/aaelf64.rst // - "Providing protection for complex software" // https://developer.arm.com/architectures/learn-the-architecture/providing-protection-for-complex-software diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/asn1.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/asn1.h index 0abef05e56..2b06074bb0 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/asn1.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/asn1.h @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_ASN1_H #define OPENSSL_HEADER_ASN1_H @@ -1181,10 +1186,6 @@ OPENSSL_EXPORT ASN1_UTCTIME *ASN1_UTCTIME_adj(ASN1_UTCTIME *s, // If |s| is NULL, this function validates |str| without copying it. OPENSSL_EXPORT int ASN1_UTCTIME_set_string(ASN1_UTCTIME *s, const char *str); -// ASN1_UTCTIME_cmp_time_t compares |s| to |t|. It returns -1 if |s| < |t|, 0 if -// they are equal, 1 if |s| > |t|, and -2 on error. -OPENSSL_EXPORT int ASN1_UTCTIME_cmp_time_t(const ASN1_UTCTIME *s, time_t t); - // ASN1_GENERALIZEDTIME_new calls |ASN1_STRING_type_new| with // |V_ASN1_GENERALIZEDTIME|. The resulting object contains empty contents and // must be initialized to be a valid GeneralizedTime. @@ -1326,14 +1327,22 @@ OPENSSL_EXPORT int ASN1_TIME_set_string(ASN1_TIME *s, const char *str); OPENSSL_EXPORT int ASN1_TIME_set_string_X509(ASN1_TIME *s, const char *str); // ASN1_TIME_to_time_t converts |t| to a time_t value in |out|. On -// success, one is returned. On failure zero is returned. This function +// success, one is returned. On failure, zero is returned. This function // will fail if the time can not be represented in a time_t. OPENSSL_EXPORT int ASN1_TIME_to_time_t(const ASN1_TIME *t, time_t *out); // ASN1_TIME_to_posix converts |t| to a POSIX time value in |out|. On -// success, one is returned. On failure zero is returned. +// success, one is returned. On failure, zero is returned. OPENSSL_EXPORT int ASN1_TIME_to_posix(const ASN1_TIME *t, int64_t *out); +// ASN1_TIME_to_posix_nonstandard converts |t| to a POSIX time value in +// |out|. It is exactly the same as |ASN1_TIME_to_posix| but allows for +// non-standard four-digit timezone offsets on UTC times. On success, one is +// returned. On failure, zero is returned. |ASN1_TIME_to_posix| should normally +// be used instead of this function. +OPENSSL_EXPORT int ASN1_TIME_to_posix_nonstandard( + const ASN1_TIME *t, int64_t *out); + // TODO(davidben): Expand and document function prototypes generated in macros. diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/asn1_mac.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/asn1_mac.h index f615014215..42c16bf85f 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/asn1_mac.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/asn1_mac.h @@ -1,16 +1,16 @@ -/* Copyright 2016 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2016 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. /* This header is provided in order to make compiling against code that expects OpenSSL easier. */ diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/asn1t.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/asn1t.h index 8cfaeb8dfd..9ac58a7ef4 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/asn1t.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/asn1t.h @@ -1,11 +1,16 @@ -/* - * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_ASN1T_H #define OPENSSL_HEADER_ASN1T_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/base.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/base.h index 8f16fb77b7..3be025e12d 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/base.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/base.h @@ -1,11 +1,16 @@ -/* - * Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_BASE_H #define OPENSSL_HEADER_BASE_H @@ -66,7 +71,7 @@ extern "C" { // A consumer may use this symbol in the preprocessor to temporarily build // against multiple revisions of BoringSSL at the same time. It is not // recommended to do so for longer than is necessary. -#define BORINGSSL_API_VERSION 33 +#define BORINGSSL_API_VERSION 34 #if defined(BORINGSSL_SHARED_LIBRARY) diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/base64.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/base64.h index a3062eb096..96086e02f1 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/base64.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/base64.h @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_BASE64_H #define OPENSSL_HEADER_BASE64_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/bcm_public.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/bcm_public.h index cd9425a98d..a7e97a6f66 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/bcm_public.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/bcm_public.h @@ -1,16 +1,16 @@ -/* Copyright 2024 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2024 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_BCM_PUBLIC_H_ #define OPENSSL_HEADER_BCM_PUBLIC_H_ diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/bio.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/bio.h index 5ee89a61d4..099d3d7344 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/bio.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/bio.h @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_BIO_H #define OPENSSL_HEADER_BIO_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/blake2.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/blake2.h index 05ba25c2a5..24389c010a 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/blake2.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/blake2.h @@ -1,16 +1,16 @@ -/* Copyright 2021 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2021 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_BLAKE2_H #define OPENSSL_HEADER_BLAKE2_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/blowfish.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/blowfish.h index 3a5907fcb7..66a1cc9572 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/blowfish.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/blowfish.h @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_BLOWFISH_H #define OPENSSL_HEADER_BLOWFISH_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/bn.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/bn.h index 564d0b482b..466823b24c 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/bn.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/bn.h @@ -1,12 +1,17 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_BN_H #define OPENSSL_HEADER_BN_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/buf.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/buf.h index c7959543f6..74ef14f804 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/buf.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/buf.h @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_BUFFER_H #define OPENSSL_HEADER_BUFFER_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/buffer.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/buffer.h index d2cadff335..bf6a0f5b4d 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/buffer.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/buffer.h @@ -1,16 +1,16 @@ -/* Copyright 2015 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2015 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. /* This header is provided in order to make compiling against code that expects OpenSSL easier. */ diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/bytestring.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/bytestring.h index 5f4200ef6a..ffab33b228 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/bytestring.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/bytestring.h @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_BYTESTRING_H #define OPENSSL_HEADER_BYTESTRING_H @@ -45,9 +45,7 @@ struct cbs_st { // Allow implicit conversions to and from bssl::Span. cbs_st(bssl::Span span) : data(span.data()), len(span.size()) {} - operator bssl::Span() const { - return bssl::MakeConstSpan(data, len); - } + operator bssl::Span() const { return bssl::Span(data, len); } // Defining any constructors requires we explicitly default the others. cbs_st() = default; diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/cast.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/cast.h index 527b333341..7cd7fc570c 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/cast.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/cast.h @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_CAST_H #define OPENSSL_HEADER_CAST_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/chacha.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/chacha.h index b5939f684e..1cc4cb2bf5 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/chacha.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/chacha.h @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_CHACHA_H #define OPENSSL_HEADER_CHACHA_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/cipher.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/cipher.h index ad0f139192..6bb1358013 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/cipher.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/cipher.h @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_CIPHER_H #define OPENSSL_HEADER_CIPHER_H @@ -274,11 +279,25 @@ OPENSSL_EXPORT uint32_t EVP_CIPHER_mode(const EVP_CIPHER *cipher); // Key derivation. // EVP_BytesToKey generates a key and IV for the cipher |type| by iterating -// |md| |count| times using |data| and |salt|. On entry, the |key| and |iv| -// buffers must have enough space to hold a key and IV for |type|. It returns -// the length of the key on success or zero on error. +// |md| |count| times using |data| and an optional |salt|, writing the result to +// |key| and |iv|. If not NULL, the |key| and |iv| buffers must have enough +// space to hold a key and IV for |type|, as returned by |EVP_CIPHER_key_length| +// and |EVP_CIPHER_iv_length|. This function returns the length of the key +// (without the IV) on success or zero on error. +// +// If |salt| is NULL, the empty string is used as the salt. Salt lengths other +// than 0 and 8 are not supported by this function. Either of |key| or |iv| may +// be NULL to skip that output. +// +// When the total data derived is less than the size of |md|, this function +// implements PBKDF1 from RFC 8018. Otherwise, it generalizes PBKDF1 by +// computing prepending the previous output to |data| and re-running PBKDF1 for +// further output. +// +// This function is provided for compatibility with legacy uses of PBKDF1. New +// applications should use a more modern algorithm, such as |EVP_PBE_scrypt|. OPENSSL_EXPORT int EVP_BytesToKey(const EVP_CIPHER *type, const EVP_MD *md, - const uint8_t *salt, const uint8_t *data, + const uint8_t salt[8], const uint8_t *data, size_t data_len, unsigned count, uint8_t *key, uint8_t *iv); diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/cmac.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/cmac.h index 1b7854ecc3..05aa3121bf 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/cmac.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/cmac.h @@ -1,16 +1,16 @@ -/* Copyright 2015 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2015 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_CMAC_H #define OPENSSL_HEADER_CMAC_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/conf.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/conf.h index d77308ea33..f1005bb9d2 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/conf.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/conf.h @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_CONF_H #define OPENSSL_HEADER_CONF_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/cpu.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/cpu.h index cd08dd139c..2edeca2d15 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/cpu.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/cpu.h @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // This header is provided for compatibility with older revisions of BoringSSL. // TODO(davidben): Remove this header. diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/crypto.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/crypto.h index 20f75ce043..ff42a9524f 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/crypto.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/crypto.h @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_CRYPTO_H #define OPENSSL_HEADER_CRYPTO_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/ctrdrbg.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/ctrdrbg.h index 107eff893c..a92c065c76 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/ctrdrbg.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/ctrdrbg.h @@ -1,16 +1,16 @@ -/* Copyright 2022 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2022 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_CTRDRBG_H #define OPENSSL_HEADER_CTRDRBG_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/curve25519.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/curve25519.h index 9340096002..0d28966e23 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/curve25519.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/curve25519.h @@ -1,16 +1,16 @@ -/* Copyright 2015 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2015 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_CURVE25519_H #define OPENSSL_HEADER_CURVE25519_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/des.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/des.h index 199a775bee..8f97848d43 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/des.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/des.h @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_DES_H #define OPENSSL_HEADER_DES_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/dh.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/dh.h index bd4df093d1..5f2c9aa6f6 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/dh.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/dh.h @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_DH_H #define OPENSSL_HEADER_DH_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/digest.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/digest.h index 19d5177859..5ddc2d3b4c 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/digest.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/digest.h @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_DIGEST_H #define OPENSSL_HEADER_DIGEST_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/dsa.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/dsa.h index c5baf86a9d..9e5b6e2c47 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/dsa.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/dsa.h @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_DSA_H #define OPENSSL_HEADER_DSA_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/dtls1.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/dtls1.h index 8411561036..0e62d30a05 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/dtls1.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/dtls1.h @@ -1,16 +1,16 @@ -/* Copyright 2015 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2015 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. /* This header is provided in order to make compiling against code that expects OpenSSL easier. */ diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/e_os2.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/e_os2.h index d03f5fbf71..cebb2fc536 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/e_os2.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/e_os2.h @@ -1,16 +1,16 @@ -/* Copyright 2018 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2018 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. /* This header is provided in order to make compiling against code that expects OpenSSL easier. */ diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/ec.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/ec.h index ef1cd0a3c9..4349965849 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/ec.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/ec.h @@ -1,12 +1,17 @@ -/* - * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +// Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_EC_H #define OPENSSL_HEADER_EC_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/ec_key.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/ec_key.h index bdb60a3650..ac0ac01b7f 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/ec_key.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/ec_key.h @@ -1,12 +1,17 @@ -/* - * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +// Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_EC_KEY_H #define OPENSSL_HEADER_EC_KEY_H @@ -261,11 +266,6 @@ struct ecdsa_method_st { int (*init)(EC_KEY *key); int (*finish)(EC_KEY *key); - // group_order_size returns the number of bytes needed to represent the order - // of the group. This is used to calculate the maximum size of an ECDSA - // signature in |ECDSA_size|. - size_t (*group_order_size)(const EC_KEY *key); - // sign matches the arguments and behaviour of |ECDSA_sign|. int (*sign)(const uint8_t *digest, size_t digest_len, uint8_t *sig, unsigned int *sig_len, EC_KEY *eckey); diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/ecdh.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/ecdh.h index 6c6a63682c..14a26a04bb 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/ecdh.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/ecdh.h @@ -1,12 +1,17 @@ -/* - * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. +// Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_ECDH_H #define OPENSSL_HEADER_ECDH_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/ecdsa.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/ecdsa.h index 303e048699..5016c2d2b1 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/ecdsa.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/ecdsa.h @@ -1,11 +1,16 @@ -/* - * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_ECDSA_H #define OPENSSL_HEADER_ECDSA_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/engine.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/engine.h index aff43a8921..1addd737e7 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/engine.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/engine.h @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_ENGINE_H #define OPENSSL_HEADER_ENGINE_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/err.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/err.h index 22e9616825..8d5596d12b 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/err.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/err.h @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_ERR_H #define OPENSSL_HEADER_ERR_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/evp.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/evp.h index 28f46fe748..d99803fcc8 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/evp.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/evp.h @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_EVP_H #define OPENSSL_HEADER_EVP_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/evp_errors.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/evp_errors.h index 3e9580db08..c7fa18055b 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/evp_errors.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/evp_errors.h @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_EVP_ERRORS_H #define OPENSSL_HEADER_EVP_ERRORS_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/ex_data.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/ex_data.h index 476be7abe7..111cb0ec09 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/ex_data.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/ex_data.h @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_EX_DATA_H #define OPENSSL_HEADER_EX_DATA_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/experimental/kyber.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/experimental/kyber.h index a8e6128504..7a8d631d1d 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/experimental/kyber.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/experimental/kyber.h @@ -1,16 +1,16 @@ -/* Copyright 2023 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2023 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_KYBER_H #define OPENSSL_HEADER_KYBER_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/hkdf.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/hkdf.h index 051acfae8b..246c73ea08 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/hkdf.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/hkdf.h @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_HKDF_H #define OPENSSL_HEADER_HKDF_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/hmac.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/hmac.h index 85192d2b3c..eab50a35c6 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/hmac.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/hmac.h @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_HMAC_H #define OPENSSL_HEADER_HMAC_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/hpke.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/hpke.h index 2363fd6101..4502ec824a 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/hpke.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/hpke.h @@ -1,16 +1,16 @@ -/* Copyright 2020 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2020 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_CRYPTO_HPKE_INTERNAL_H #define OPENSSL_HEADER_CRYPTO_HPKE_INTERNAL_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/hrss.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/hrss.h index 85e2a0dc89..974a130214 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/hrss.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/hrss.h @@ -1,16 +1,16 @@ -/* Copyright 2018 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2018 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_HRSS_H #define OPENSSL_HEADER_HRSS_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/is_boringssl.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/is_boringssl.h index ee9c95c2b7..8f903261e3 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/is_boringssl.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/is_boringssl.h @@ -1,16 +1,16 @@ -/* Copyright 2017 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2017 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // This header is provided in order to catch include path errors in consuming // BoringSSL. diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/kdf.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/kdf.h index 964ae5f8e3..9a25a5fcdd 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/kdf.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/kdf.h @@ -1,16 +1,16 @@ -/* Copyright 2022 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2022 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_KDF_H #define OPENSSL_HEADER_KDF_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/lhash.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/lhash.h index 018b2b2866..4f816fa9f6 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/lhash.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/lhash.h @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_LHASH_H #define OPENSSL_HEADER_LHASH_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/md4.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/md4.h index c88d68bcec..b5ebae11b3 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/md4.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/md4.h @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_MD4_H #define OPENSSL_HEADER_MD4_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/md5.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/md5.h index 86ed87e7b1..2c7e253584 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/md5.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/md5.h @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_MD5_H #define OPENSSL_HEADER_MD5_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/mem.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/mem.h index f094a5e534..456876b063 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/mem.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/mem.h @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_MEM_H #define OPENSSL_HEADER_MEM_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/mldsa.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/mldsa.h index b57b354b96..0c1db201c0 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/mldsa.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/mldsa.h @@ -1,16 +1,16 @@ -/* Copyright 2024 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2024 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_MLDSA_H_ #define OPENSSL_HEADER_MLDSA_H_ diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/mlkem.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/mlkem.h index 28ec563838..b9b3366400 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/mlkem.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/mlkem.h @@ -1,16 +1,16 @@ -/* Copyright 2024 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2024 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_MLKEM_H #define OPENSSL_HEADER_MLKEM_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/nid.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/nid.h index 2111a942a3..bf5536dc4f 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/nid.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/nid.h @@ -1,13 +1,18 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. -/* This file is generated by crypto/obj/objects.go. */ +// This file is generated by crypto/obj/objects.go. #ifndef OPENSSL_HEADER_NID_H #define OPENSSL_HEADER_NID_H @@ -19,18 +24,18 @@ extern "C" { #endif -/* The nid library provides numbered values for ASN.1 object identifiers and - * other symbols. These values are used by other libraries to identify - * cryptographic primitives. - * - * A separate objects library, obj.h, provides functions for converting between - * nids and object identifiers. However it depends on large internal tables with - * the encodings of every nid defined. Consumers concerned with binary size - * should instead embed the encodings of the few consumed OIDs and compare - * against those. - * - * These values should not be used outside of a single process; they are not - * stable identifiers. */ +// The nid library provides numbered values for ASN.1 object identifiers and +// other symbols. These values are used by other libraries to identify +// cryptographic primitives. +// +// A separate objects library, obj.h, provides functions for converting between +// nids and object identifiers. However it depends on large internal tables with +// the encodings of every nid defined. Consumers concerned with binary size +// should instead embed the encodings of the few consumed OIDs and compare +// against those. +// +// These values should not be used outside of a single process; they are not +// stable identifiers. #define SN_undef "UNDEF" diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/obj.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/obj.h index 83d1c66503..67e3e9a093 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/obj.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/obj.h @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_OBJ_H #define OPENSSL_HEADER_OBJ_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/obj_mac.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/obj_mac.h index c84f07a9dd..2fdac44905 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/obj_mac.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/obj_mac.h @@ -1,16 +1,16 @@ -/* Copyright 2016 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2016 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. /* This header is provided in order to make compiling against code that expects OpenSSL easier. */ diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/objects.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/objects.h index 8c12c39515..ca994015ab 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/objects.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/objects.h @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. /* This header is provided in order to make compiling against code that expects OpenSSL easier. */ diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/opensslconf.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/opensslconf.h index cfbfb4d842..d06f7d00c1 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/opensslconf.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/opensslconf.h @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. /* This header is provided in order to make compiling against code that expects OpenSSL easier. */ diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/opensslv.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/opensslv.h index c9aa340459..9bddcf7a16 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/opensslv.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/opensslv.h @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. /* This header is provided in order to make compiling against code that expects OpenSSL easier. */ diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/ossl_typ.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/ossl_typ.h index eaac4aeb98..3d63dfee15 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/ossl_typ.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/ossl_typ.h @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. /* This header is provided in order to make compiling against code that expects OpenSSL easier. */ diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/pem.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/pem.h index 797e7f0977..022f042a5a 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/pem.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/pem.h @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_PEM_H #define OPENSSL_HEADER_PEM_H @@ -307,6 +312,14 @@ OPENSSL_EXPORT int PEM_ASN1_write_bio(i2d_of_void *i2d, const char *name, // on success. In this case, the caller retains ownership of |sk| in both // success and failure. // +// This function will decrypt any encrypted certificates in |bp|, using |cb|, +// but it will not decrypt encrypted private keys. Encrypted private keys are +// instead represented as placeholder |X509_INFO| objects with an empty |x_pkey| +// field. This allows this function to be used with inputs with unencrypted +// certificates, but encrypted passwords, without knowing the password. However, +// it also means that this function cannot be used to decrypt the private key +// when the password is known. +// // WARNING: If the input contains "TRUSTED CERTIFICATE" PEM blocks, this // function parses auxiliary properties as in |d2i_X509_AUX|. Passing untrusted // input to this function allows an attacker to influence those properties. See @@ -443,5 +456,6 @@ OPENSSL_EXPORT int PEM_write_PKCS8PrivateKey(FILE *fp, const EVP_PKEY *x, #define PEM_R_SHORT_HEADER 112 #define PEM_R_UNSUPPORTED_CIPHER 113 #define PEM_R_UNSUPPORTED_ENCRYPTION 114 +#define PEM_R_UNSUPPORTED_PROC_TYPE_VERSION 115 #endif // OPENSSL_HEADER_PEM_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/pkcs12.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/pkcs12.h index d1ceae0883..acf47dc275 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/pkcs12.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/pkcs12.h @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. /* This header is provided in order to make compiling against code that expects OpenSSL easier. */ diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/pkcs7.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/pkcs7.h index 8976962741..ea18c659ec 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/pkcs7.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/pkcs7.h @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_PKCS7_H #define OPENSSL_HEADER_PKCS7_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/pkcs8.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/pkcs8.h index 900a7622ad..173ff9605f 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/pkcs8.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/pkcs8.h @@ -1,11 +1,16 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_PKCS8_H #define OPENSSL_HEADER_PKCS8_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/pki/certificate.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/pki/certificate.h index bde5a1c299..a7ef188105 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/pki/certificate.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/pki/certificate.h @@ -1,16 +1,16 @@ -/* Copyright 2023 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2023 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #if !defined(OPENSSL_HEADER_BSSL_PKI_CERTIFICATE_H_) && defined(__cplusplus) #define OPENSSL_HEADER_BSSL_PKI_CERTIFICATE_H_ diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/pki/signature_verify_cache.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/pki/signature_verify_cache.h index 7068883756..a31450dbc2 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/pki/signature_verify_cache.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/pki/signature_verify_cache.h @@ -1,6 +1,16 @@ // Copyright 2022 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #if !defined(BSSL_PKI_SIGNATURE_VERIFY_CACHE_H_) && defined(__cplusplus) #define BSSL_PKI_SIGNATURE_VERIFY_CACHE_H_ diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/pki/verify_error.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/pki/verify_error.h index 5e27e779d1..34cd2bb2fa 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/pki/verify_error.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/pki/verify_error.h @@ -1,16 +1,16 @@ -/* Copyright 2024 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2024 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #if !defined(OPENSSL_HEADER_BSSL_PKI_VERIFY_ERROR_H_) && defined(__cplusplus) #define OPENSSL_HEADER_BSSL_PKI_VERIFY_ERROR_H_ diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/poly1305.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/poly1305.h index 59d4b39c7b..196427d322 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/poly1305.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/poly1305.h @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_POLY1305_H #define OPENSSL_HEADER_POLY1305_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/pool.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/pool.h index 7957532110..e739ffe91a 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/pool.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/pool.h @@ -1,16 +1,16 @@ -/* Copyright 2016 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2016 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_POOL_H #define OPENSSL_HEADER_POOL_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/posix_time.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/posix_time.h index eb4e800506..e185adf3fb 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/posix_time.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/posix_time.h @@ -1,16 +1,16 @@ -/* Copyright 2022 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2022 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_POSIX_TIME_H #define OPENSSL_HEADER_POSIX_TIME_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/rand.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/rand.h index 2a8e50393e..50cb9aef4a 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/rand.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/rand.h @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_RAND_H #define OPENSSL_HEADER_RAND_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/rc4.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/rc4.h index f666adea5a..3954625994 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/rc4.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/rc4.h @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_RC4_H #define OPENSSL_HEADER_RC4_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/ripemd.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/ripemd.h index 41d0d4e09f..6dd1b1455f 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/ripemd.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/ripemd.h @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_RIPEMD_H #define OPENSSL_HEADER_RIPEMD_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/rsa.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/rsa.h index 10dd096d03..f090927497 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/rsa.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/rsa.h @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_RSA_H #define OPENSSL_HEADER_RSA_H @@ -754,9 +759,6 @@ struct rsa_meth_st { int (*init)(RSA *rsa); int (*finish)(RSA *rsa); - // size returns the size of the RSA modulus in bytes. - size_t (*size)(const RSA *rsa); - int (*sign)(int type, const uint8_t *m, unsigned int m_length, uint8_t *sigret, unsigned int *siglen, const RSA *rsa); diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/safestack.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/safestack.h index 28090d98d9..3d36c2066d 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/safestack.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/safestack.h @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. /* This header is provided in order to make compiling against code that expects OpenSSL easier. */ diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/service_indicator.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/service_indicator.h index e426e056f1..e942f8b686 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/service_indicator.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/service_indicator.h @@ -1,16 +1,16 @@ -/* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_SERVICE_INDICATOR_H #define OPENSSL_HEADER_SERVICE_INDICATOR_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/sha.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/sha.h index 55621dc8a2..cc9bcf726a 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/sha.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/sha.h @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_SHA_H #define OPENSSL_HEADER_SHA_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/siphash.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/siphash.h index ed5585900a..3a5709b98c 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/siphash.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/siphash.h @@ -1,16 +1,16 @@ -/* Copyright 2019 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2019 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_SIPHASH_H #define OPENSSL_HEADER_SIPHASH_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/slhdsa.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/slhdsa.h index 6d6806d290..d6aa5b847f 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/slhdsa.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/slhdsa.h @@ -1,16 +1,16 @@ -/* Copyright 2024 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2024 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_SLHDSA_H #define OPENSSL_HEADER_SLHDSA_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/span.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/span.h index fa7796267d..4d7e79125a 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/span.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/span.h @@ -1,16 +1,16 @@ -/* Copyright 2017 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2017 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_SSL_SPAN_H #define OPENSSL_HEADER_SSL_SPAN_H @@ -99,10 +99,10 @@ using EnableIfContainer = std::enable_if_t< // // FooMutate(bssl::Span(vec)); // -// You can also use the |MakeSpan| and |MakeConstSpan| factory methods to -// construct Spans in order to deduce the type of the Span automatically. +// You can also use C++17 class template argument deduction to construct Spans +// in order to deduce the type of the Span automatically. // -// FooMutate(bssl::MakeSpan(vec)); +// FooMutate(bssl::Span(vec)); // // Note that Spans have value type sematics. They are cheap to construct and // copy, and should be passed by value whenever a method would otherwise accept diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/srtp.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/srtp.h index 3bb4e6f152..22b1782056 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/srtp.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/srtp.h @@ -1,16 +1,16 @@ -/* Copyright 2015 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2015 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. /* This header is provided in order to make compiling against code that expects OpenSSL easier. */ diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/ssl.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/ssl.h index d1f1006bb2..5b9489c440 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/ssl.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/ssl.h @@ -1,13 +1,18 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. - * Copyright 2005 Nokia. All rights reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. +// Copyright 2005 Nokia. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_SSL_H #define OPENSSL_HEADER_SSL_H @@ -1782,10 +1787,11 @@ OPENSSL_EXPORT int SSL_session_reused(const SSL *ssl); // renegotiation (RFC 5746) or TLS 1.3. Otherwise, it returns zero. OPENSSL_EXPORT int SSL_get_secure_renegotiation_support(const SSL *ssl); -// SSL_export_keying_material exports a value derived from the master secret, as -// specified in RFC 5705. It writes |out_len| bytes to |out| given a label and -// optional context. (Since a zero length context is allowed, the |use_context| -// flag controls whether a context is included.) +// SSL_export_keying_material exports a connection-specific secret from |ssl|, +// as specified in RFC 5705. It writes |out_len| bytes to |out| given a label +// and optional context. If |use_context| is zero, the |context| parameter is +// ignored. Prior to TLS 1.3, using a zero-length context and using no context +// would give different output. // // It returns one on success and zero otherwise. OPENSSL_EXPORT int SSL_export_keying_material( @@ -3491,6 +3497,120 @@ OPENSSL_EXPORT int SSL_CREDENTIAL_set1_delegated_credential( SSL_CREDENTIAL *cred, CRYPTO_BUFFER *dc); +// Password Authenticated Key Exchange (PAKE). +// +// Password Authenticated Key Exchange protocols allow client and server to +// mutually authenticate one another using knowledge of a password or other +// low-entropy secret. While the TLS 1.3 pre-shared key (PSK) mechanism can +// authenticate a high-entropy secret, it cannot be used with low-entropy +// secrets as the PSK binder values can be used to mount a dictionary attack on +// a low-entropy PSK. Using TLS 1.3 with a PAKE limits an attacker to confirming +// one password guess per handshake attempt. +// +// WARNING: The PAKE mode in TLS is not a general-purpose authentication scheme. +// As the underlying secret is still low-entropy, callers must limit brute force +// attacks across multiple connections, especially in multi-connection protocols +// such as HTTP. The |error_limit| and |rate_limit| parameters in the functions +// below may be used to implement this, provided the same |SSL_CREDENTIAL| +// object is used across connections. Applications using multiple connections +// should use the PAKE credential only once to authenticate a high-entropy +// secret, e.g. exporting a PSK from |SSL_export_keying_material|, and use the +// high-entropy secret for subsequent connections. +// +// TODO(crbug.com/369963041): Implement RFC 9258 so one can actually do that. +// +// WARNING: PAKE support in TLS is still experimental and may change as the +// standard evolves. See +// https://chris-wood.github.io/draft-bmw-tls-pake13/draft-bmw-tls-pake13.html +// +// Currently, only the SPAKE2PLUS_V1 named PAKE algorithm is implemented; see +// https://chris-wood.github.io/draft-bmw-tls-pake13/draft-bmw-tls-pake13.html#section-8.1. + +// SSL_PAKE_SPAKE2PLUSV1 is the codepoint for SPAKE2PLUS_V1. See +// https://chris-wood.github.io/draft-bmw-tls-pake13/draft-bmw-tls-pake13.html#name-named-pake-registry. +#define SSL_PAKE_SPAKE2PLUSV1 0x7d96 + +// SSL_spake2plusv1_register computes the values that the client (w0, +// w1) and server (w0, registration_record) require to run SPAKE2+. These values +// can be used when calling |SSL_CREDENTIAL_new_spake2plusv1_client| and +// |SSL_CREDENTIAL_new_spake2plusv1_server|. The client and server identities +// must match the values passed to those functions. +// +// Returns one on success and zero on error. +OPENSSL_EXPORT int SSL_spake2plusv1_register( + uint8_t out_w0[32], uint8_t out_w1[32], uint8_t out_registration_record[65], + const uint8_t *password, size_t password_len, + const uint8_t *client_identity, size_t client_identity_len, + const uint8_t *server_identity, size_t server_identity_len); + +// SSL_CREDENTIAL_new_spake2plusv1_client creates a new |SSL_CREDENTIAL| that +// authenticates using SPAKE2+. It is to be used with a TLS client. +// +// The |context|, |client_identity|, and |server_identity| fields serve to +// identity the SPAKE2+ settings and both sides of a connection must agree on +// these values. If |context| is |NULL|, a default value will be used. +// +// |error_limit| is the number of failed handshakes allowed on the credential. +// After the limit is reached, using the credential will fail. Ideally this +// value is set to 1. Setting it to a higher value allows an attacker to have +// that many attempts at guessing the password using this |SSL_CREDENTIAL|. +// (Assuming that multiple TLS connections are allowed.) +// +// |w0| and |w1| come from calling |SSL_spake2plusv1_register|. +// +// Unlike most |SSL_CREDENTIAL|s, PAKE client credentials must be the only +// credential configured on the connection. BoringSSL does not currently support +// configuring multiple PAKE credentials as a client, or configuring a mix of +// PAKE and non-PAKE credentials. Once a PAKE credential is configured, the +// connection will require the server to authenticate with the same secret, so a +// successful connection then implies that the server supported the PAKE and +// knew the password. +OPENSSL_EXPORT SSL_CREDENTIAL *SSL_CREDENTIAL_new_spake2plusv1_client( + const uint8_t *context, size_t context_len, const uint8_t *client_identity, + size_t client_identity_len, const uint8_t *server_identity, + size_t server_identity_len, uint32_t error_limit, const uint8_t *w0, + size_t w0_len, const uint8_t *w1, size_t w1_len); + +// SSL_CREDENTIAL_new_spake2plusv1_server creates a new |SSL_CREDENTIAL| that +// authenticates using SPAKE2+. It is to be used with a TLS server. +// +// The |context|, |client_identity|, and |server_identity| fields serve to +// identity the SPAKE2+ settings and both sides of a connection must agree on +// these values. If |context| is |NULL|, a default value will be used. +// +// |rate_limit| is the number of failed or unfinished handshakes allowed on the +// credential. After the limit is reached, using the credential will fail. +// Ideally this value is set to 1. Setting it to a higher value allows an +// attacker to have that many attempts at guessing the password using this +// |SSL_CREDENTIAL|. (Assuming that multiple TLS connections are allowed.) +// +// WARNING: |rate_limit| differs from the client's |error_limit| parameter. +// Server PAKE credentials must temporarily deduct incomplete handshakes from +// the limit, until the peer completes the handshake correctly. Thus +// applications use that multiple connections in parallel may need a higher +// limit, and thus higher attacker exposure, to avoid failures. Such +// applications should instead use one PAKE-based connection to established a +// high-entropy secret (e.g. with |SSL_export_keying_material|) instead of +// repeating the PAKE exchange for each connection. +// +// |w0| and |registration_record| come from calling |SSL_spake2plusv1_register|, +// which may be computed externally so that the server does not know the +// password, or a password-equivalent secret. +// +// A server wishing to support a PAKE should install one of these credentials. +// It is also possible to install certificate-based credentials, in which case +// both PAKE and non-PAKE clients can be supported. However, if only a PAKE +// credential is installed then the server knows that any successfully-connected +// clients also knows the password. Otherwise, the server must be careful to +// inspect the credential used for a connection before assuming that. +OPENSSL_EXPORT SSL_CREDENTIAL *SSL_CREDENTIAL_new_spake2plusv1_server( + const uint8_t *context, size_t context_len, const uint8_t *client_identity, + size_t client_identity_len, const uint8_t *server_identity, + size_t server_identity_len, uint32_t rate_limit, const uint8_t *w0, + size_t w0_len, const uint8_t *registration_record, + size_t registration_record_len); + + // QUIC integration. // // QUIC acts as an underlying transport for the TLS 1.3 handshake. The following @@ -5544,7 +5664,7 @@ enum ssl_compliance_policy_t BORINGSSL_ENUM_INT { // other than by the supported signature algorithms. But WPA3's "192-bit" // mode requires at least P-384 or 3072-bit along the chain. The caller must // enforce this themselves on the verified chain using functions such as - // `X509_STORE_CTX_get0_chain`. + // |X509_STORE_CTX_get0_chain|. // // Note that this setting is less secure than the default. The // implementation risks of using a more obscure primitive like P-384 @@ -5604,7 +5724,7 @@ OPENSSL_EXPORT enum ssl_compliance_policy_t SSL_get_compliance_policy( // // See PORTING.md in the BoringSSL source tree for a table of corresponding // functions. -// https://boringssl.googlesource.com/boringssl/+/master/PORTING.md#Replacements-for-values +// https://boringssl.googlesource.com/boringssl/+/main/PORTING.md#Replacements-for-values #define DTLS_CTRL_GET_TIMEOUT doesnt_exist #define DTLS_CTRL_HANDLE_TIMEOUT doesnt_exist @@ -6066,6 +6186,11 @@ BSSL_NAMESPACE_END #define SSL_R_INVALID_OUTER_EXTENSION 320 #define SSL_R_INCONSISTENT_ECH_NEGOTIATION 321 #define SSL_R_INVALID_ALPS_CODEPOINT 322 +#define SSL_R_NO_MATCHING_ISSUER 323 +#define SSL_R_INVALID_SPAKE2PLUSV1_VALUE 324 +#define SSL_R_PAKE_EXHAUSTED 325 +#define SSL_R_PEER_PAKE_MISMATCH 326 +#define SSL_R_UNSUPPORTED_CREDENTIAL_LIST 327 #define SSL_R_SSLV3_ALERT_CLOSE_NOTIFY 1000 #define SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE 1010 #define SSL_R_SSLV3_ALERT_BAD_RECORD_MAC 1020 @@ -6100,5 +6225,6 @@ BSSL_NAMESPACE_END #define SSL_R_TLSV1_ALERT_CERTIFICATE_REQUIRED 1116 #define SSL_R_TLSV1_ALERT_NO_APPLICATION_PROTOCOL 1120 #define SSL_R_TLSV1_ALERT_ECH_REQUIRED 1121 +#define SSL_R_PAKE_AND_KEY_SHARE_NOT_ALLOWED 1122 #endif // OPENSSL_HEADER_SSL_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/ssl3.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/ssl3.h index 353c993380..331582f8b7 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/ssl3.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/ssl3.h @@ -1,12 +1,17 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_SSL3_H #define OPENSSL_HEADER_SSL3_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/stack.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/stack.h index 74f4310f59..bdbf64202f 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/stack.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/stack.h @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_STACK_H #define OPENSSL_HEADER_STACK_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/target.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/target.h index 77f8ac935d..147ab31fe0 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/target.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/target.h @@ -1,16 +1,16 @@ -/* Copyright 2023 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2023 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_TARGET_H #define OPENSSL_HEADER_TARGET_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/thread.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/thread.h index 4a8c742815..5aac9537fb 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/thread.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/thread.h @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_THREAD_H #define OPENSSL_HEADER_THREAD_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/time.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/time.h index b53a5ae059..e35486db6f 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/time.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/time.h @@ -1,16 +1,16 @@ -/* Copyright 2024 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2024 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_TIME_H #define OPENSSL_HEADER_TIME_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/tls1.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/tls1.h index 99d48c526b..7705e9c0e7 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/tls1.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/tls1.h @@ -1,20 +1,25 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. - * Copyright 2005 Nokia. All rights reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. +// Copyright 2005 Nokia. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_TLS1_H #define OPENSSL_HEADER_TLS1_H #include -#ifdef __cplusplus +#ifdef __cplusplus extern "C" { #endif @@ -114,6 +119,10 @@ extern "C" { #define TLSEXT_TYPE_encrypted_client_hello 0xfe0d #define TLSEXT_TYPE_ech_outer_extensions 0xfd00 +// ExtensionType values from draft-bmw-tls-pake13. This is not an IANA defined +// extension number. +#define TLSEXT_TYPE_pake 0x8a3b + // ExtensionType value from RFC 6962 #define TLSEXT_TYPE_certificate_timestamp 18 @@ -153,14 +162,14 @@ extern "C" { #define TLSEXT_MAXLEN_host_name 255 // PSK ciphersuites from 4279 -#define TLS1_CK_PSK_WITH_RC4_128_SHA 0x0300008A -#define TLS1_CK_PSK_WITH_3DES_EDE_CBC_SHA 0x0300008B -#define TLS1_CK_PSK_WITH_AES_128_CBC_SHA 0x0300008C -#define TLS1_CK_PSK_WITH_AES_256_CBC_SHA 0x0300008D +#define TLS1_CK_PSK_WITH_RC4_128_SHA 0x0300008A +#define TLS1_CK_PSK_WITH_3DES_EDE_CBC_SHA 0x0300008B +#define TLS1_CK_PSK_WITH_AES_128_CBC_SHA 0x0300008C +#define TLS1_CK_PSK_WITH_AES_256_CBC_SHA 0x0300008D // PSK ciphersuites from RFC 5489 -#define TLS1_CK_ECDHE_PSK_WITH_AES_128_CBC_SHA 0x0300C035 -#define TLS1_CK_ECDHE_PSK_WITH_AES_256_CBC_SHA 0x0300C036 +#define TLS1_CK_ECDHE_PSK_WITH_AES_128_CBC_SHA 0x0300C035 +#define TLS1_CK_ECDHE_PSK_WITH_AES_256_CBC_SHA 0x0300C036 // Additional TLS ciphersuites from expired Internet Draft // draft-ietf-tls-56-bit-ciphersuites-01.txt @@ -518,7 +527,7 @@ extern "C" { #define TLS_MD_MAX_CONST_SIZE 20 -#ifdef __cplusplus +#ifdef __cplusplus } // extern C #endif diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/trust_token.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/trust_token.h index a8ccf0f597..1026bcd9be 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/trust_token.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/trust_token.h @@ -1,16 +1,16 @@ -/* Copyright 2020 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2020 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_TRUST_TOKEN_H #define OPENSSL_HEADER_TRUST_TOKEN_H @@ -31,8 +31,8 @@ extern "C" { // // References: // https://eprint.iacr.org/2020/072.pdf -// https://github.com/alxdavids/privacy-pass-ietf/tree/master/drafts -// https://github.com/WICG/trust-token-api/blob/master/README.md +// https://github.com/ietf-wg-privacypass/base-drafts +// https://github.com/WICG/trust-token-api/blob/main/README.md // // WARNING: This API is unstable and subject to change. diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/type_check.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/type_check.h index 6fb2eff2d3..8225f91173 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/type_check.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/type_check.h @@ -1,11 +1,16 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_TYPE_CHECK_H #define OPENSSL_HEADER_TYPE_CHECK_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/x509.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/x509.h index e14d0225fe..3e81b5f409 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/x509.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/x509.h @@ -1,12 +1,17 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_X509_H #define OPENSSL_HEADER_X509_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/x509_vfy.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/x509_vfy.h index a759b46567..13456aa518 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/x509_vfy.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/x509_vfy.h @@ -1,16 +1,16 @@ -/* Copyright 2021 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2021 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. /* This header is provided in order to make compiling against code that expects OpenSSL easier. */ diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/x509v3.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/x509v3.h index 0e4c16469b..3e8a7bebd9 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/x509v3.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/x509v3.h @@ -1,16 +1,16 @@ -/* Copyright 2023 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2023 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_X509V3_H #define OPENSSL_HEADER_X509V3_H diff --git a/naiveproxy/src/third_party/boringssl/src/include/openssl/x509v3_errors.h b/naiveproxy/src/third_party/boringssl/src/include/openssl/x509v3_errors.h index e80c9b2eb8..76e2505e4d 100644 --- a/naiveproxy/src/third_party/boringssl/src/include/openssl/x509v3_errors.h +++ b/naiveproxy/src/third_party/boringssl/src/include/openssl/x509v3_errors.h @@ -1,11 +1,16 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_X509V3_ERRORS_H #define OPENSSL_HEADER_X509V3_ERRORS_H diff --git a/naiveproxy/src/third_party/boringssl/src/infra/config/generated/luci-milo.cfg b/naiveproxy/src/third_party/boringssl/src/infra/config/generated/luci-milo.cfg index e91d83e35e..5ccb660961 100644 --- a/naiveproxy/src/third_party/boringssl/src/infra/config/generated/luci-milo.cfg +++ b/naiveproxy/src/third_party/boringssl/src/infra/config/generated/luci-milo.cfg @@ -8,7 +8,7 @@ consoles { id: "main" name: "BoringSSL Main Console" repo_url: "https://boringssl.googlesource.com/boringssl" - refs: "regexp:refs/heads/master" + refs: "regexp:refs/heads/main" manifest_name: "REVISION" builders { name: "buildbucket/luci.boringssl.ci/android_aarch64" diff --git a/naiveproxy/src/third_party/boringssl/src/infra/config/generated/luci-scheduler.cfg b/naiveproxy/src/third_party/boringssl/src/infra/config/generated/luci-scheduler.cfg index 75bc2bea02..137dcd554e 100644 --- a/naiveproxy/src/third_party/boringssl/src/infra/config/generated/luci-scheduler.cfg +++ b/naiveproxy/src/third_party/boringssl/src/infra/config/generated/luci-scheduler.cfg @@ -535,7 +535,7 @@ job { } } trigger { - id: "master-gitiles-trigger" + id: "main-gitiles-trigger" realm: "ci" acl_sets: "ci" triggers: "android_aarch64" @@ -593,7 +593,7 @@ trigger { triggers: "win_arm64_msvc_compile" gitiles { repo: "https://boringssl.googlesource.com/boringssl" - refs: "regexp:refs/heads/master" + refs: "regexp:refs/heads/main" } } acl_sets { diff --git a/naiveproxy/src/third_party/boringssl/src/infra/config/generated/project.cfg b/naiveproxy/src/third_party/boringssl/src/infra/config/generated/project.cfg index e2ae129f82..07a04a0ffa 100644 --- a/naiveproxy/src/third_party/boringssl/src/infra/config/generated/project.cfg +++ b/naiveproxy/src/third_party/boringssl/src/infra/config/generated/project.cfg @@ -7,7 +7,7 @@ name: "boringssl" access: "group:all" lucicfg { - version: "1.43.14" + version: "1.43.16" package_dir: ".." config_dir: "generated" entry_point: "main.star" diff --git a/naiveproxy/src/third_party/boringssl/src/infra/config/main.star b/naiveproxy/src/third_party/boringssl/src/infra/config/main.star index f875c107b2..ce59c9b95b 100755 --- a/naiveproxy/src/third_party/boringssl/src/infra/config/main.star +++ b/naiveproxy/src/third_party/boringssl/src/infra/config/main.star @@ -78,7 +78,7 @@ luci.milo( console_view = luci.console_view( name = "main", repo = REPO_URL, - refs = ["refs/heads/master"], + refs = ["refs/heads/main"], title = "BoringSSL Main Console", ) @@ -98,10 +98,10 @@ cq_group = luci.cq_group( ) poller = luci.gitiles_poller( - name = "master-gitiles-trigger", + name = "main-gitiles-trigger", bucket = "ci", repo = REPO_URL, - refs = ["refs/heads/master"], + refs = ["refs/heads/main"], ) luci.logdog( diff --git a/naiveproxy/src/third_party/boringssl/src/pki/cert_error_id.cc b/naiveproxy/src/third_party/boringssl/src/pki/cert_error_id.cc index 6c041d9292..00bd2c10f6 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/cert_error_id.cc +++ b/naiveproxy/src/third_party/boringssl/src/pki/cert_error_id.cc @@ -1,6 +1,16 @@ // Copyright 2016 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "cert_error_id.h" diff --git a/naiveproxy/src/third_party/boringssl/src/pki/cert_error_id.h b/naiveproxy/src/third_party/boringssl/src/pki/cert_error_id.h index 6f71a86b63..6b11568565 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/cert_error_id.h +++ b/naiveproxy/src/third_party/boringssl/src/pki/cert_error_id.h @@ -1,6 +1,16 @@ // Copyright 2016 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef BSSL_PKI_CERT_ERROR_ID_H_ #define BSSL_PKI_CERT_ERROR_ID_H_ diff --git a/naiveproxy/src/third_party/boringssl/src/pki/cert_error_params.cc b/naiveproxy/src/third_party/boringssl/src/pki/cert_error_params.cc index e258e98759..58d4648cfe 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/cert_error_params.cc +++ b/naiveproxy/src/third_party/boringssl/src/pki/cert_error_params.cc @@ -1,6 +1,16 @@ // Copyright 2016 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "cert_error_params.h" diff --git a/naiveproxy/src/third_party/boringssl/src/pki/cert_error_params.h b/naiveproxy/src/third_party/boringssl/src/pki/cert_error_params.h index d960435eea..11dd445e87 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/cert_error_params.h +++ b/naiveproxy/src/third_party/boringssl/src/pki/cert_error_params.h @@ -1,6 +1,16 @@ // Copyright 2016 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef BSSL_PKI_CERT_ERROR_PARAMS_H_ #define BSSL_PKI_CERT_ERROR_PARAMS_H_ diff --git a/naiveproxy/src/third_party/boringssl/src/pki/cert_errors.cc b/naiveproxy/src/third_party/boringssl/src/pki/cert_errors.cc index 8bd7084a98..e75199e29d 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/cert_errors.cc +++ b/naiveproxy/src/third_party/boringssl/src/pki/cert_errors.cc @@ -1,6 +1,16 @@ // Copyright 2016 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "cert_errors.h" diff --git a/naiveproxy/src/third_party/boringssl/src/pki/cert_errors.h b/naiveproxy/src/third_party/boringssl/src/pki/cert_errors.h index 23b88ba6d6..2538c6a484 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/cert_errors.h +++ b/naiveproxy/src/third_party/boringssl/src/pki/cert_errors.h @@ -1,6 +1,16 @@ // Copyright 2016 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // ---------------------------- // Overview of error design diff --git a/naiveproxy/src/third_party/boringssl/src/pki/cert_issuer_source.h b/naiveproxy/src/third_party/boringssl/src/pki/cert_issuer_source.h index cffad9db9a..fc9b69368b 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/cert_issuer_source.h +++ b/naiveproxy/src/third_party/boringssl/src/pki/cert_issuer_source.h @@ -1,6 +1,16 @@ // Copyright 2016 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef BSSL_PKI_CERT_ISSUER_SOURCE_H_ #define BSSL_PKI_CERT_ISSUER_SOURCE_H_ diff --git a/naiveproxy/src/third_party/boringssl/src/pki/cert_issuer_source_static.cc b/naiveproxy/src/third_party/boringssl/src/pki/cert_issuer_source_static.cc index 1c15594df2..f6fb13827e 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/cert_issuer_source_static.cc +++ b/naiveproxy/src/third_party/boringssl/src/pki/cert_issuer_source_static.cc @@ -1,6 +1,16 @@ // Copyright 2016 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "cert_issuer_source_static.h" diff --git a/naiveproxy/src/third_party/boringssl/src/pki/cert_issuer_source_static.h b/naiveproxy/src/third_party/boringssl/src/pki/cert_issuer_source_static.h index a0e11a07e2..f4e99beb6b 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/cert_issuer_source_static.h +++ b/naiveproxy/src/third_party/boringssl/src/pki/cert_issuer_source_static.h @@ -1,6 +1,16 @@ // Copyright 2016 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef BSSL_PKI_CERT_ISSUER_SOURCE_STATIC_H_ #define BSSL_PKI_CERT_ISSUER_SOURCE_STATIC_H_ diff --git a/naiveproxy/src/third_party/boringssl/src/pki/cert_issuer_source_sync_unittest.h b/naiveproxy/src/third_party/boringssl/src/pki/cert_issuer_source_sync_unittest.h index d00bd63d4e..984dd18f13 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/cert_issuer_source_sync_unittest.h +++ b/naiveproxy/src/third_party/boringssl/src/pki/cert_issuer_source_sync_unittest.h @@ -1,6 +1,16 @@ // Copyright 2016 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef BSSL_PKI_CERT_ISSUER_SOURCE_SYNC_UNITTEST_H_ #define BSSL_PKI_CERT_ISSUER_SOURCE_SYNC_UNITTEST_H_ diff --git a/naiveproxy/src/third_party/boringssl/src/pki/certificate.cc b/naiveproxy/src/third_party/boringssl/src/pki/certificate.cc index 7ad456d44d..8d50d49bc1 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/certificate.cc +++ b/naiveproxy/src/third_party/boringssl/src/pki/certificate.cc @@ -1,16 +1,16 @@ -/* Copyright 2023 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2023 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/pki/certificate_policies.cc b/naiveproxy/src/third_party/boringssl/src/pki/certificate_policies.cc index 70536b86bb..8937fbe7d5 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/certificate_policies.cc +++ b/naiveproxy/src/third_party/boringssl/src/pki/certificate_policies.cc @@ -1,6 +1,16 @@ // Copyright 2015 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/pki/certificate_policies.h b/naiveproxy/src/third_party/boringssl/src/pki/certificate_policies.h index a6c736880d..ecedbdfd73 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/certificate_policies.h +++ b/naiveproxy/src/third_party/boringssl/src/pki/certificate_policies.h @@ -1,6 +1,16 @@ // Copyright 2015 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef BSSL_PKI_CERTIFICATE_POLICIES_H_ #define BSSL_PKI_CERTIFICATE_POLICIES_H_ diff --git a/naiveproxy/src/third_party/boringssl/src/pki/common_cert_errors.cc b/naiveproxy/src/third_party/boringssl/src/pki/common_cert_errors.cc index 0e6ad0f93d..636bfc6c23 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/common_cert_errors.cc +++ b/naiveproxy/src/third_party/boringssl/src/pki/common_cert_errors.cc @@ -1,6 +1,16 @@ // Copyright 2017 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "common_cert_errors.h" diff --git a/naiveproxy/src/third_party/boringssl/src/pki/common_cert_errors.h b/naiveproxy/src/third_party/boringssl/src/pki/common_cert_errors.h index 81d67f0882..40b02deb34 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/common_cert_errors.h +++ b/naiveproxy/src/third_party/boringssl/src/pki/common_cert_errors.h @@ -1,6 +1,16 @@ // Copyright 2017 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef BSSL_PKI_COMMON_CERT_ERRORS_H_ #define BSSL_PKI_COMMON_CERT_ERRORS_H_ diff --git a/naiveproxy/src/third_party/boringssl/src/pki/crl.cc b/naiveproxy/src/third_party/boringssl/src/pki/crl.cc index 70ab07a4fe..5af3e27b76 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/crl.cc +++ b/naiveproxy/src/third_party/boringssl/src/pki/crl.cc @@ -1,6 +1,16 @@ // Copyright 2019 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/pki/crl.h b/naiveproxy/src/third_party/boringssl/src/pki/crl.h index 2fd3b2f625..4f41c0d51e 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/crl.h +++ b/naiveproxy/src/third_party/boringssl/src/pki/crl.h @@ -1,6 +1,16 @@ // Copyright 2019 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef BSSL_PKI_CRL_H_ #define BSSL_PKI_CRL_H_ diff --git a/naiveproxy/src/third_party/boringssl/src/pki/encode_values.cc b/naiveproxy/src/third_party/boringssl/src/pki/encode_values.cc index b2dbb83922..a57778027a 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/encode_values.cc +++ b/naiveproxy/src/third_party/boringssl/src/pki/encode_values.cc @@ -1,6 +1,16 @@ // Copyright 2016 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "encode_values.h" diff --git a/naiveproxy/src/third_party/boringssl/src/pki/encode_values.h b/naiveproxy/src/third_party/boringssl/src/pki/encode_values.h index f175eeb9d7..dd54716b5a 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/encode_values.h +++ b/naiveproxy/src/third_party/boringssl/src/pki/encode_values.h @@ -1,6 +1,16 @@ // Copyright 2016 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef BSSL_DER_ENCODE_VALUES_H_ #define BSSL_DER_ENCODE_VALUES_H_ diff --git a/naiveproxy/src/third_party/boringssl/src/pki/extended_key_usage.cc b/naiveproxy/src/third_party/boringssl/src/pki/extended_key_usage.cc index a3bb1d4183..d67a08abc6 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/extended_key_usage.cc +++ b/naiveproxy/src/third_party/boringssl/src/pki/extended_key_usage.cc @@ -1,6 +1,16 @@ // Copyright 2015 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "extended_key_usage.h" diff --git a/naiveproxy/src/third_party/boringssl/src/pki/extended_key_usage.h b/naiveproxy/src/third_party/boringssl/src/pki/extended_key_usage.h index 63f937a4ea..2556c246b5 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/extended_key_usage.h +++ b/naiveproxy/src/third_party/boringssl/src/pki/extended_key_usage.h @@ -1,6 +1,16 @@ // Copyright 2015 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef BSSL_PKI_EXTENDED_KEY_USAGE_H_ #define BSSL_PKI_EXTENDED_KEY_USAGE_H_ diff --git a/naiveproxy/src/third_party/boringssl/src/pki/general_names.cc b/naiveproxy/src/third_party/boringssl/src/pki/general_names.cc index f88efbb23e..d4ab2348d1 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/general_names.cc +++ b/naiveproxy/src/third_party/boringssl/src/pki/general_names.cc @@ -1,6 +1,16 @@ // Copyright 2017 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "general_names.h" diff --git a/naiveproxy/src/third_party/boringssl/src/pki/general_names.h b/naiveproxy/src/third_party/boringssl/src/pki/general_names.h index 701927eb66..158dc647dd 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/general_names.h +++ b/naiveproxy/src/third_party/boringssl/src/pki/general_names.h @@ -1,6 +1,16 @@ // Copyright 2017 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef BSSL_PKI_GENERAL_NAMES_H_ #define BSSL_PKI_GENERAL_NAMES_H_ diff --git a/naiveproxy/src/third_party/boringssl/src/pki/input.cc b/naiveproxy/src/third_party/boringssl/src/pki/input.cc index f68ece200c..801a476c64 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/input.cc +++ b/naiveproxy/src/third_party/boringssl/src/pki/input.cc @@ -1,6 +1,16 @@ // Copyright 2015 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "input.h" diff --git a/naiveproxy/src/third_party/boringssl/src/pki/input.h b/naiveproxy/src/third_party/boringssl/src/pki/input.h index 65f0102bcf..933c537775 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/input.h +++ b/naiveproxy/src/third_party/boringssl/src/pki/input.h @@ -1,6 +1,16 @@ // Copyright 2015 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef BSSL_DER_INPUT_H_ #define BSSL_DER_INPUT_H_ diff --git a/naiveproxy/src/third_party/boringssl/src/pki/ip_util.cc b/naiveproxy/src/third_party/boringssl/src/pki/ip_util.cc index d4996b6a28..26d18f1c67 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/ip_util.cc +++ b/naiveproxy/src/third_party/boringssl/src/pki/ip_util.cc @@ -1,6 +1,16 @@ // Copyright 2023 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "ip_util.h" diff --git a/naiveproxy/src/third_party/boringssl/src/pki/ip_util.h b/naiveproxy/src/third_party/boringssl/src/pki/ip_util.h index 22f27bf36e..53c3577ecc 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/ip_util.h +++ b/naiveproxy/src/third_party/boringssl/src/pki/ip_util.h @@ -1,6 +1,16 @@ // Copyright 2023 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef BSSL_PKI_IP_UTIL_H_ #define BSSL_PKI_IP_UTIL_H_ diff --git a/naiveproxy/src/third_party/boringssl/src/pki/mock_signature_verify_cache.cc b/naiveproxy/src/third_party/boringssl/src/pki/mock_signature_verify_cache.cc index 28f6f7d947..ebae97476b 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/mock_signature_verify_cache.cc +++ b/naiveproxy/src/third_party/boringssl/src/pki/mock_signature_verify_cache.cc @@ -1,6 +1,16 @@ // Copyright 2022 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "mock_signature_verify_cache.h" diff --git a/naiveproxy/src/third_party/boringssl/src/pki/mock_signature_verify_cache.h b/naiveproxy/src/third_party/boringssl/src/pki/mock_signature_verify_cache.h index ff0dc112cf..0dd48c1363 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/mock_signature_verify_cache.h +++ b/naiveproxy/src/third_party/boringssl/src/pki/mock_signature_verify_cache.h @@ -1,6 +1,16 @@ // Copyright 2022 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef BSSL_PKI_MOCK_SIGNATURE_VERIFY_CACHE_H_ #define BSSL_PKI_MOCK_SIGNATURE_VERIFY_CACHE_H_ diff --git a/naiveproxy/src/third_party/boringssl/src/pki/name_constraints.cc b/naiveproxy/src/third_party/boringssl/src/pki/name_constraints.cc index 933ac21513..e82e61a5c0 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/name_constraints.cc +++ b/naiveproxy/src/third_party/boringssl/src/pki/name_constraints.cc @@ -1,6 +1,16 @@ // Copyright 2015 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "name_constraints.h" diff --git a/naiveproxy/src/third_party/boringssl/src/pki/name_constraints.h b/naiveproxy/src/third_party/boringssl/src/pki/name_constraints.h index 444a40bc10..47108bfe13 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/name_constraints.h +++ b/naiveproxy/src/third_party/boringssl/src/pki/name_constraints.h @@ -1,6 +1,16 @@ // Copyright 2015 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef BSSL_PKI_NAME_CONSTRAINTS_H_ #define BSSL_PKI_NAME_CONSTRAINTS_H_ diff --git a/naiveproxy/src/third_party/boringssl/src/pki/nist_pkits_unittest.h b/naiveproxy/src/third_party/boringssl/src/pki/nist_pkits_unittest.h index 28d4278913..e9f364032a 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/nist_pkits_unittest.h +++ b/naiveproxy/src/third_party/boringssl/src/pki/nist_pkits_unittest.h @@ -1,6 +1,16 @@ // Copyright 2016 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef BSSL_PKI_NIST_PKITS_UNITTEST_H_ #define BSSL_PKI_NIST_PKITS_UNITTEST_H_ diff --git a/naiveproxy/src/third_party/boringssl/src/pki/ocsp.cc b/naiveproxy/src/third_party/boringssl/src/pki/ocsp.cc index 1a30b22333..7984050ab3 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/ocsp.cc +++ b/naiveproxy/src/third_party/boringssl/src/pki/ocsp.cc @@ -1,6 +1,16 @@ // Copyright 2016 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "ocsp.h" diff --git a/naiveproxy/src/third_party/boringssl/src/pki/ocsp.h b/naiveproxy/src/third_party/boringssl/src/pki/ocsp.h index a9f11d2f38..267e31c1cf 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/ocsp.h +++ b/naiveproxy/src/third_party/boringssl/src/pki/ocsp.h @@ -1,6 +1,16 @@ // Copyright 2016 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef BSSL_PKI_OCSP_H_ #define BSSL_PKI_OCSP_H_ diff --git a/naiveproxy/src/third_party/boringssl/src/pki/ocsp_revocation_status.h b/naiveproxy/src/third_party/boringssl/src/pki/ocsp_revocation_status.h index ce47e84436..fd4bc26374 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/ocsp_revocation_status.h +++ b/naiveproxy/src/third_party/boringssl/src/pki/ocsp_revocation_status.h @@ -1,6 +1,16 @@ // Copyright 2016 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef BSSL_PKI_OCSP_REVOCATION_STATUS_H_ #define BSSL_PKI_OCSP_REVOCATION_STATUS_H_ diff --git a/naiveproxy/src/third_party/boringssl/src/pki/ocsp_verify_result.cc b/naiveproxy/src/third_party/boringssl/src/pki/ocsp_verify_result.cc index c094169c2f..bf937c312b 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/ocsp_verify_result.cc +++ b/naiveproxy/src/third_party/boringssl/src/pki/ocsp_verify_result.cc @@ -1,6 +1,16 @@ // Copyright 2016 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "ocsp_verify_result.h" diff --git a/naiveproxy/src/third_party/boringssl/src/pki/ocsp_verify_result.h b/naiveproxy/src/third_party/boringssl/src/pki/ocsp_verify_result.h index 0b5194c65e..e21419c3ca 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/ocsp_verify_result.h +++ b/naiveproxy/src/third_party/boringssl/src/pki/ocsp_verify_result.h @@ -1,6 +1,16 @@ // Copyright 2016 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef BSSL_PKI_OCSP_VERIFY_RESULT_H_ #define BSSL_PKI_OCSP_VERIFY_RESULT_H_ diff --git a/naiveproxy/src/third_party/boringssl/src/pki/parse_certificate.cc b/naiveproxy/src/third_party/boringssl/src/pki/parse_certificate.cc index 29191048bc..cc2d9387a6 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/parse_certificate.cc +++ b/naiveproxy/src/third_party/boringssl/src/pki/parse_certificate.cc @@ -1,6 +1,16 @@ // Copyright 2015 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "parse_certificate.h" diff --git a/naiveproxy/src/third_party/boringssl/src/pki/parse_certificate.h b/naiveproxy/src/third_party/boringssl/src/pki/parse_certificate.h index f1337150ce..99b822ef1a 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/parse_certificate.h +++ b/naiveproxy/src/third_party/boringssl/src/pki/parse_certificate.h @@ -1,6 +1,16 @@ // Copyright 2015 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef BSSL_PKI_PARSE_CERTIFICATE_H_ #define BSSL_PKI_PARSE_CERTIFICATE_H_ diff --git a/naiveproxy/src/third_party/boringssl/src/pki/parse_name.cc b/naiveproxy/src/third_party/boringssl/src/pki/parse_name.cc index 3e0821a767..a51edf9338 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/parse_name.cc +++ b/naiveproxy/src/third_party/boringssl/src/pki/parse_name.cc @@ -1,6 +1,16 @@ // Copyright 2016 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "parse_name.h" diff --git a/naiveproxy/src/third_party/boringssl/src/pki/parse_name.h b/naiveproxy/src/third_party/boringssl/src/pki/parse_name.h index 92ebf71fd3..628e9fc773 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/parse_name.h +++ b/naiveproxy/src/third_party/boringssl/src/pki/parse_name.h @@ -1,6 +1,16 @@ // Copyright 2016 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef BSSL_PKI_PARSE_NAME_H_ #define BSSL_PKI_PARSE_NAME_H_ diff --git a/naiveproxy/src/third_party/boringssl/src/pki/parse_values.cc b/naiveproxy/src/third_party/boringssl/src/pki/parse_values.cc index d3312c7af2..1e5e14a132 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/parse_values.cc +++ b/naiveproxy/src/third_party/boringssl/src/pki/parse_values.cc @@ -1,6 +1,16 @@ // Copyright 2015 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "parse_values.h" diff --git a/naiveproxy/src/third_party/boringssl/src/pki/parse_values.h b/naiveproxy/src/third_party/boringssl/src/pki/parse_values.h index 8f808a8453..91d59a8df3 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/parse_values.h +++ b/naiveproxy/src/third_party/boringssl/src/pki/parse_values.h @@ -1,6 +1,16 @@ // Copyright 2015 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef BSSL_DER_PARSE_VALUES_H_ #define BSSL_DER_PARSE_VALUES_H_ diff --git a/naiveproxy/src/third_party/boringssl/src/pki/parsed_certificate.cc b/naiveproxy/src/third_party/boringssl/src/pki/parsed_certificate.cc index 402a6df05f..ce94394e6d 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/parsed_certificate.cc +++ b/naiveproxy/src/third_party/boringssl/src/pki/parsed_certificate.cc @@ -1,6 +1,16 @@ // Copyright 2016 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "parsed_certificate.h" diff --git a/naiveproxy/src/third_party/boringssl/src/pki/parsed_certificate.h b/naiveproxy/src/third_party/boringssl/src/pki/parsed_certificate.h index c39d1a86ef..57a7f1d199 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/parsed_certificate.h +++ b/naiveproxy/src/third_party/boringssl/src/pki/parsed_certificate.h @@ -1,6 +1,16 @@ // Copyright 2016 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef BSSL_PKI_PARSED_CERTIFICATE_H_ #define BSSL_PKI_PARSED_CERTIFICATE_H_ diff --git a/naiveproxy/src/third_party/boringssl/src/pki/parser.cc b/naiveproxy/src/third_party/boringssl/src/pki/parser.cc index 4ae76481a8..21df494c7a 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/parser.cc +++ b/naiveproxy/src/third_party/boringssl/src/pki/parser.cc @@ -1,6 +1,16 @@ // Copyright 2015 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "parser.h" diff --git a/naiveproxy/src/third_party/boringssl/src/pki/parser.h b/naiveproxy/src/third_party/boringssl/src/pki/parser.h index f2cdcc851e..dcf2e99d4f 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/parser.h +++ b/naiveproxy/src/third_party/boringssl/src/pki/parser.h @@ -1,6 +1,16 @@ // Copyright 2015 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef BSSL_DER_PARSER_H_ #define BSSL_DER_PARSER_H_ diff --git a/naiveproxy/src/third_party/boringssl/src/pki/path_builder.cc b/naiveproxy/src/third_party/boringssl/src/pki/path_builder.cc index 806cef966f..d3b396de57 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/path_builder.cc +++ b/naiveproxy/src/third_party/boringssl/src/pki/path_builder.cc @@ -1,6 +1,16 @@ // Copyright 2016 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "path_builder.h" diff --git a/naiveproxy/src/third_party/boringssl/src/pki/path_builder.h b/naiveproxy/src/third_party/boringssl/src/pki/path_builder.h index 42a16eb504..b680b01dba 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/path_builder.h +++ b/naiveproxy/src/third_party/boringssl/src/pki/path_builder.h @@ -1,6 +1,16 @@ // Copyright 2016 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef BSSL_PKI_PATH_BUILDER_H_ #define BSSL_PKI_PATH_BUILDER_H_ diff --git a/naiveproxy/src/third_party/boringssl/src/pki/pem.cc b/naiveproxy/src/third_party/boringssl/src/pki/pem.cc index d7f5f932d5..880f7ef404 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/pem.cc +++ b/naiveproxy/src/third_party/boringssl/src/pki/pem.cc @@ -1,6 +1,16 @@ // Copyright 2010 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "pem.h" #include "string_util.h" diff --git a/naiveproxy/src/third_party/boringssl/src/pki/pem.h b/naiveproxy/src/third_party/boringssl/src/pki/pem.h index c9f43146ee..42e374cac4 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/pem.h +++ b/naiveproxy/src/third_party/boringssl/src/pki/pem.h @@ -1,6 +1,16 @@ // Copyright 2011 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef BSSL_PKI_PEM_H_ #define BSSL_PKI_PEM_H_ diff --git a/naiveproxy/src/third_party/boringssl/src/pki/revocation_util.cc b/naiveproxy/src/third_party/boringssl/src/pki/revocation_util.cc index 997f12d67c..8b42ffcbcb 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/revocation_util.cc +++ b/naiveproxy/src/third_party/boringssl/src/pki/revocation_util.cc @@ -1,6 +1,16 @@ // Copyright 2019 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "revocation_util.h" diff --git a/naiveproxy/src/third_party/boringssl/src/pki/revocation_util.h b/naiveproxy/src/third_party/boringssl/src/pki/revocation_util.h index f4226d33d6..647c04eae2 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/revocation_util.h +++ b/naiveproxy/src/third_party/boringssl/src/pki/revocation_util.h @@ -1,6 +1,16 @@ // Copyright 2019 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef BSSL_PKI_REVOCATION_UTIL_H_ #define BSSL_PKI_REVOCATION_UTIL_H_ diff --git a/naiveproxy/src/third_party/boringssl/src/pki/signature_algorithm.cc b/naiveproxy/src/third_party/boringssl/src/pki/signature_algorithm.cc index f00eee2c16..a0dcb805bf 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/signature_algorithm.cc +++ b/naiveproxy/src/third_party/boringssl/src/pki/signature_algorithm.cc @@ -1,6 +1,16 @@ // Copyright 2015 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "signature_algorithm.h" diff --git a/naiveproxy/src/third_party/boringssl/src/pki/signature_algorithm.h b/naiveproxy/src/third_party/boringssl/src/pki/signature_algorithm.h index 74470b7741..6076a07367 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/signature_algorithm.h +++ b/naiveproxy/src/third_party/boringssl/src/pki/signature_algorithm.h @@ -1,6 +1,16 @@ // Copyright 2015 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef BSSL_PKI_SIGNATURE_ALGORITHM_H_ #define BSSL_PKI_SIGNATURE_ALGORITHM_H_ diff --git a/naiveproxy/src/third_party/boringssl/src/pki/simple_path_builder_delegate.cc b/naiveproxy/src/third_party/boringssl/src/pki/simple_path_builder_delegate.cc index 29306d544c..55888ad6d7 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/simple_path_builder_delegate.cc +++ b/naiveproxy/src/third_party/boringssl/src/pki/simple_path_builder_delegate.cc @@ -1,6 +1,16 @@ // Copyright 2017 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "simple_path_builder_delegate.h" diff --git a/naiveproxy/src/third_party/boringssl/src/pki/simple_path_builder_delegate.h b/naiveproxy/src/third_party/boringssl/src/pki/simple_path_builder_delegate.h index 8cfaa7fd35..95f7a7bbdc 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/simple_path_builder_delegate.h +++ b/naiveproxy/src/third_party/boringssl/src/pki/simple_path_builder_delegate.h @@ -1,6 +1,16 @@ // Copyright 2017 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef BSSL_PKI_SIMPLE_PATH_BUILDER_DELEGATE_H_ #define BSSL_PKI_SIMPLE_PATH_BUILDER_DELEGATE_H_ diff --git a/naiveproxy/src/third_party/boringssl/src/pki/string_util.cc b/naiveproxy/src/third_party/boringssl/src/pki/string_util.cc index 1cf8ea357e..c2b91b967c 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/string_util.cc +++ b/naiveproxy/src/third_party/boringssl/src/pki/string_util.cc @@ -1,6 +1,16 @@ // Copyright 2022 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "string_util.h" diff --git a/naiveproxy/src/third_party/boringssl/src/pki/string_util.h b/naiveproxy/src/third_party/boringssl/src/pki/string_util.h index 2a51809a7e..ff0569cd5a 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/string_util.h +++ b/naiveproxy/src/third_party/boringssl/src/pki/string_util.h @@ -1,6 +1,16 @@ // Copyright 2022 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef BSSL_PKI_STRING_UTIL_H_ #define BSSL_PKI_STRING_UTIL_H_ diff --git a/naiveproxy/src/third_party/boringssl/src/pki/test_helpers.cc b/naiveproxy/src/third_party/boringssl/src/pki/test_helpers.cc index 82704aa769..20f082f455 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/test_helpers.cc +++ b/naiveproxy/src/third_party/boringssl/src/pki/test_helpers.cc @@ -1,6 +1,16 @@ // Copyright 2015 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "test_helpers.h" diff --git a/naiveproxy/src/third_party/boringssl/src/pki/test_helpers.h b/naiveproxy/src/third_party/boringssl/src/pki/test_helpers.h index 8f3594abb4..68fff1797e 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/test_helpers.h +++ b/naiveproxy/src/third_party/boringssl/src/pki/test_helpers.h @@ -1,6 +1,16 @@ // Copyright 2015 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef BSSL_PKI_TEST_HELPERS_H_ #define BSSL_PKI_TEST_HELPERS_H_ diff --git a/naiveproxy/src/third_party/boringssl/src/pki/trust_store.cc b/naiveproxy/src/third_party/boringssl/src/pki/trust_store.cc index 126df3e795..ce29d8b5c1 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/trust_store.cc +++ b/naiveproxy/src/third_party/boringssl/src/pki/trust_store.cc @@ -1,6 +1,16 @@ // Copyright 2016 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/pki/trust_store.h b/naiveproxy/src/third_party/boringssl/src/pki/trust_store.h index 736970f90c..2a9fd082dd 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/trust_store.h +++ b/naiveproxy/src/third_party/boringssl/src/pki/trust_store.h @@ -1,6 +1,16 @@ // Copyright 2016 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef BSSL_PKI_TRUST_STORE_H_ #define BSSL_PKI_TRUST_STORE_H_ diff --git a/naiveproxy/src/third_party/boringssl/src/pki/trust_store_collection.cc b/naiveproxy/src/third_party/boringssl/src/pki/trust_store_collection.cc index 9540065cc6..a84524b7cf 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/trust_store_collection.cc +++ b/naiveproxy/src/third_party/boringssl/src/pki/trust_store_collection.cc @@ -1,6 +1,16 @@ // Copyright 2016 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "trust_store_collection.h" diff --git a/naiveproxy/src/third_party/boringssl/src/pki/trust_store_collection.h b/naiveproxy/src/third_party/boringssl/src/pki/trust_store_collection.h index 04c8f3e13a..e7691f1326 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/trust_store_collection.h +++ b/naiveproxy/src/third_party/boringssl/src/pki/trust_store_collection.h @@ -1,6 +1,16 @@ // Copyright 2016 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef BSSL_PKI_TRUST_STORE_COLLECTION_H_ #define BSSL_PKI_TRUST_STORE_COLLECTION_H_ diff --git a/naiveproxy/src/third_party/boringssl/src/pki/trust_store_in_memory.cc b/naiveproxy/src/third_party/boringssl/src/pki/trust_store_in_memory.cc index 89a4eb2dff..5a24db313b 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/trust_store_in_memory.cc +++ b/naiveproxy/src/third_party/boringssl/src/pki/trust_store_in_memory.cc @@ -1,6 +1,16 @@ // Copyright 2016 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "trust_store_in_memory.h" diff --git a/naiveproxy/src/third_party/boringssl/src/pki/trust_store_in_memory.h b/naiveproxy/src/third_party/boringssl/src/pki/trust_store_in_memory.h index 03d06beb97..88f9efb198 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/trust_store_in_memory.h +++ b/naiveproxy/src/third_party/boringssl/src/pki/trust_store_in_memory.h @@ -1,6 +1,16 @@ // Copyright 2016 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef BSSL_PKI_TRUST_STORE_IN_MEMORY_H_ #define BSSL_PKI_TRUST_STORE_IN_MEMORY_H_ diff --git a/naiveproxy/src/third_party/boringssl/src/pki/verify.cc b/naiveproxy/src/third_party/boringssl/src/pki/verify.cc index d992208325..09373c0d3f 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/verify.cc +++ b/naiveproxy/src/third_party/boringssl/src/pki/verify.cc @@ -1,16 +1,16 @@ -/* Copyright 2023 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2023 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/pki/verify_certificate_chain.cc b/naiveproxy/src/third_party/boringssl/src/pki/verify_certificate_chain.cc index e72915fb85..d7c5f29d8f 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/verify_certificate_chain.cc +++ b/naiveproxy/src/third_party/boringssl/src/pki/verify_certificate_chain.cc @@ -1,6 +1,16 @@ // Copyright 2015 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "verify_certificate_chain.h" @@ -1088,7 +1098,7 @@ void PathVerifier::BasicCertificateProcessing( // The key purpose is checked not just for the end-entity certificate, but // also interpreted as a constraint when it appears in intermediates. This // goes beyond what RFC 5280 describes, but is the de-facto standard. See - // https://wiki.mozilla.org/CA:CertificatePolicyV2.1#Frequently_Asked_Questions + // https://wiki.mozilla.org/CA/CertificatePolicyV2.1#Frequently_Asked_Questions VerifyExtendedKeyUsage(cert, required_key_purpose, errors, is_target_cert, is_target_cert_issuer); } diff --git a/naiveproxy/src/third_party/boringssl/src/pki/verify_certificate_chain.h b/naiveproxy/src/third_party/boringssl/src/pki/verify_certificate_chain.h index 8daf64f8bd..f2cf603174 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/verify_certificate_chain.h +++ b/naiveproxy/src/third_party/boringssl/src/pki/verify_certificate_chain.h @@ -1,6 +1,16 @@ // Copyright 2015 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef BSSL_PKI_VERIFY_CERTIFICATE_CHAIN_H_ #define BSSL_PKI_VERIFY_CERTIFICATE_CHAIN_H_ diff --git a/naiveproxy/src/third_party/boringssl/src/pki/verify_certificate_chain_typed_unittest.h b/naiveproxy/src/third_party/boringssl/src/pki/verify_certificate_chain_typed_unittest.h index 4f85959d5b..c7f9f11417 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/verify_certificate_chain_typed_unittest.h +++ b/naiveproxy/src/third_party/boringssl/src/pki/verify_certificate_chain_typed_unittest.h @@ -1,6 +1,16 @@ // Copyright 2016 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef BSSL_PKI_VERIFY_CERTIFICATE_CHAIN_TYPED_UNITTEST_H_ #define BSSL_PKI_VERIFY_CERTIFICATE_CHAIN_TYPED_UNITTEST_H_ diff --git a/naiveproxy/src/third_party/boringssl/src/pki/verify_error.cc b/naiveproxy/src/third_party/boringssl/src/pki/verify_error.cc index 57fcc38bc8..70b31f8576 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/verify_error.cc +++ b/naiveproxy/src/third_party/boringssl/src/pki/verify_error.cc @@ -1,16 +1,16 @@ -/* Copyright 2024 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2024 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/pki/verify_name_match.cc b/naiveproxy/src/third_party/boringssl/src/pki/verify_name_match.cc index e849d90b23..5ede41426f 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/verify_name_match.cc +++ b/naiveproxy/src/third_party/boringssl/src/pki/verify_name_match.cc @@ -1,6 +1,16 @@ // Copyright 2015 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "verify_name_match.h" diff --git a/naiveproxy/src/third_party/boringssl/src/pki/verify_name_match.h b/naiveproxy/src/third_party/boringssl/src/pki/verify_name_match.h index 188c7d58d8..026001b04a 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/verify_name_match.h +++ b/naiveproxy/src/third_party/boringssl/src/pki/verify_name_match.h @@ -1,6 +1,16 @@ // Copyright 2015 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef BSSL_PKI_VERIFY_NAME_MATCH_H_ #define BSSL_PKI_VERIFY_NAME_MATCH_H_ diff --git a/naiveproxy/src/third_party/boringssl/src/pki/verify_signed_data.cc b/naiveproxy/src/third_party/boringssl/src/pki/verify_signed_data.cc index d9aab82d8d..f53f03967b 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/verify_signed_data.cc +++ b/naiveproxy/src/third_party/boringssl/src/pki/verify_signed_data.cc @@ -1,6 +1,16 @@ // Copyright 2015 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "verify_signed_data.h" diff --git a/naiveproxy/src/third_party/boringssl/src/pki/verify_signed_data.h b/naiveproxy/src/third_party/boringssl/src/pki/verify_signed_data.h index e8c4c4d9ee..aed008c4ec 100644 --- a/naiveproxy/src/third_party/boringssl/src/pki/verify_signed_data.h +++ b/naiveproxy/src/third_party/boringssl/src/pki/verify_signed_data.h @@ -1,6 +1,16 @@ // Copyright 2015 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef BSSL_PKI_VERIFY_SIGNED_DATA_H_ #define BSSL_PKI_VERIFY_SIGNED_DATA_H_ diff --git a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/Cargo.toml b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/Cargo.toml index 755da8c3e0..bf28e779fb 100644 --- a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/Cargo.toml +++ b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/Cargo.toml @@ -3,11 +3,15 @@ name = "bssl-crypto" version = "0.2.0" edition = "2021" publish = false -license = "ISC" +license = "Apache-2.0" [dependencies] bssl-sys = {path = "../bssl-sys"} [features] default = [] +# `std` depends on the Rust `std` crate, but adds some useful trait impls if +# available. std = [] +# `mlalgs` enables ML-KEM and ML-DSA support. This requires Rust 1.82. +mlalgs = [] diff --git a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/deny.toml b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/deny.toml index 0f116a99d8..bfec2fe41c 100644 --- a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/deny.toml +++ b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/deny.toml @@ -13,7 +13,7 @@ # List of explicitly allowed licenses # See https://spdx.org/licenses/ for list of possible licenses # [possible values: any SPDX 3.11 short identifier (+ optional exception)]. -allow = ["ISC"] +allow = ["Apache-2.0"] # This section is considered when running `cargo deny check bans`. # More documentation about the 'bans' section can be found here: diff --git a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/aead.rs b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/aead.rs index 2b7a9ac7e4..55abada5c8 100644 --- a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/aead.rs +++ b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/aead.rs @@ -1,17 +1,16 @@ -/* Copyright 2023 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ +// Copyright 2023 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. //! Authenticated Encryption with Additional Data. //! @@ -451,7 +450,7 @@ mod test { fn aes_128_gcm() { let test_cases: &[TestCase<16, 12>] = &[ TestCase { - // TC 1 from crypto/cipher_extra/test/aes_128_gcm_tests.txt + // TC 1 from crypto/cipher/test/aes_128_gcm_tests.txt key: decode_hex("d480429666d48b400633921c5407d1d1"), nonce: decode_hex("3388c676dc754acfa66e172a"), msg: Vec::new(), @@ -475,7 +474,7 @@ mod test { fn aes_256_gcm() { let test_cases: &[TestCase<32, 12>] = &[ TestCase { - // TC 1 from crypto/cipher_extra/test/aes_128_gcm_tests.txt + // TC 1 from crypto/cipher/test/aes_128_gcm_tests.txt key: decode_hex("e5ac4a32c67e425ac4b143c83c6f161312a97d88d634afdf9f4da5bd35223f01"), nonce: decode_hex("5bf11a0951f0bfc7ea5c9e58"), msg: Vec::new(), diff --git a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/aes.rs b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/aes.rs index c19757fe48..e71ef690e7 100644 --- a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/aes.rs +++ b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/aes.rs @@ -1,17 +1,16 @@ -/* Copyright 2023 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ +// Copyright 2023 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. //! Advanced Encryption Standard. //! diff --git a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/cipher/aes_cbc.rs b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/cipher/aes_cbc.rs index 521f36b4b1..1e5dc07318 100644 --- a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/cipher/aes_cbc.rs +++ b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/cipher/aes_cbc.rs @@ -1,17 +1,16 @@ -/* Copyright 2023 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ +// Copyright 2023 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. extern crate alloc; diff --git a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/cipher/aes_ctr.rs b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/cipher/aes_ctr.rs index c1171e6390..86ad6b027d 100644 --- a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/cipher/aes_ctr.rs +++ b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/cipher/aes_ctr.rs @@ -1,17 +1,16 @@ -/* Copyright 2023 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ +// Copyright 2023 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. use crate::cipher::{ Cipher, CipherError, CipherInitPurpose, EvpAes128Ctr, EvpAes256Ctr, StreamCipher, diff --git a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/cipher/mod.rs b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/cipher/mod.rs index 4b263fbdd0..ac797cd5e1 100644 --- a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/cipher/mod.rs +++ b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/cipher/mod.rs @@ -1,17 +1,16 @@ -/* Copyright 2023 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ +// Copyright 2023 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. extern crate alloc; diff --git a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/digest.rs b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/digest.rs index 79566b5824..64e201f62a 100644 --- a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/digest.rs +++ b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/digest.rs @@ -1,17 +1,16 @@ -/* Copyright 2023 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ +// Copyright 2023 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. //! Hash functions. //! diff --git a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/ec.rs b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/ec.rs index abebee7deb..59bd1b2dde 100644 --- a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/ec.rs +++ b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/ec.rs @@ -1,17 +1,16 @@ -/* Copyright 2023 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ +// Copyright 2023 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. //! Definitions of NIST elliptic curves. //! diff --git a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/ecdh.rs b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/ecdh.rs index ff812a7827..1e845a4bdc 100644 --- a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/ecdh.rs +++ b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/ecdh.rs @@ -1,17 +1,16 @@ -/* Copyright 2023 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ +// Copyright 2023 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. //! Elliptic Curve Diffie-Hellman operations. //! diff --git a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/ecdsa.rs b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/ecdsa.rs index 42693df121..f563161c42 100644 --- a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/ecdsa.rs +++ b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/ecdsa.rs @@ -1,17 +1,16 @@ -/* Copyright 2024 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ +// Copyright 2024 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. //! Elliptic Curve Digital Signature Algorithm. //! diff --git a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/ed25519.rs b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/ed25519.rs index d77d49ee78..6644aa2687 100644 --- a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/ed25519.rs +++ b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/ed25519.rs @@ -1,17 +1,16 @@ -/* Copyright 2023 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ +// Copyright 2023 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. //! Ed25519, a signature scheme. //! diff --git a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/hkdf.rs b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/hkdf.rs index 5f6feadcab..24343ae8eb 100644 --- a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/hkdf.rs +++ b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/hkdf.rs @@ -1,17 +1,16 @@ -/* Copyright 2023 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ +// Copyright 2023 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. //! Implements the HMAC-based Key Derivation Function from //! . diff --git a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/hmac.rs b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/hmac.rs index 6d28d1fecc..9a51216b10 100644 --- a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/hmac.rs +++ b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/hmac.rs @@ -1,17 +1,16 @@ -/* Copyright 2023 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ +// Copyright 2023 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. //! Hash-based message authentication from . //! diff --git a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/hpke.rs b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/hpke.rs index d992ff4065..aa120e4788 100644 --- a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/hpke.rs +++ b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/hpke.rs @@ -1,17 +1,16 @@ -/* Copyright 2024 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ +// Copyright 2024 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. //! Hybrid Public Key Encryption //! diff --git a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/lib.rs b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/lib.rs index bd6876010b..2a03e0bfd0 100644 --- a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/lib.rs +++ b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/lib.rs @@ -1,17 +1,16 @@ -/* Copyright 2023 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ +// Copyright 2023 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #![deny( missing_docs, @@ -28,7 +27,10 @@ extern crate alloc; extern crate core; -use alloc::{boxed::Box, vec::Vec}; +#[cfg(feature = "mlalgs")] +use alloc::boxed::Box; + +use alloc::vec::Vec; use core::ffi::c_void; #[macro_use] @@ -48,7 +50,9 @@ pub mod ed25519; pub mod hkdf; pub mod hmac; pub mod hpke; +#[cfg(feature = "mlalgs")] pub mod mldsa; +#[cfg(feature = "mlalgs")] pub mod mlkem; pub mod rsa; pub mod slhdsa; @@ -247,6 +251,7 @@ where /// Requires that the given function completely initializes the value. /// /// Safety: the argument must fully initialize the pointed-to `T`. +#[cfg(feature = "mlalgs")] unsafe fn initialized_boxed_struct(init: F) -> Box where F: FnOnce(*mut T), @@ -262,6 +267,7 @@ where /// /// Safety: the argument must fully initialize the pointed-to `T` if it returns /// true. If it returns false then there are no safety requirements. +#[cfg(feature = "mlalgs")] unsafe fn initialized_boxed_struct_fallible(init: F) -> Option> where F: FnOnce(*mut T) -> bool, @@ -398,6 +404,7 @@ impl Drop for Buffer { } } +#[cfg(feature = "mlalgs")] fn as_cbs(buf: &[u8]) -> bssl_sys::CBS { bssl_sys::CBS { data: buf.as_ffi_ptr(), @@ -455,6 +462,7 @@ fn cbb_to_buffer(initial_capacity: usize, func: F unsafe { Buffer::new(ptr, len) } } +#[cfg(feature = "mlalgs")] /// Calls `func` with a `CBB` pointer that has been initialized to a vector /// of `len` bytes. That function must write exactly `len` bytes to the /// `CBB`. Those bytes are then returned as a vector. @@ -467,8 +475,7 @@ fn cbb_to_vec(len: usize, func: F) -> Vec { bssl_sys::CBB_init_fixed(cbb, boxed.as_mut_ptr() as *mut u8, len) == 1 }) } - // `CBB_init` only fails if out of memory, which isn't something that this - // crate handles. + // `CBB_init_fixed` never fails and does not allocate. .unwrap(); func(&mut cbb); diff --git a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/macros.rs b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/macros.rs index 4bbb40ccd9..51bb0b577d 100644 --- a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/macros.rs +++ b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/macros.rs @@ -1,17 +1,16 @@ -/* Copyright 2024 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ +// Copyright 2024 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // Generates a hash function from init/update/final-style FFI functions. Rust // doesn't accept function pointers as a generic arguments so this is the only diff --git a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/mem.rs b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/mem.rs index 81e4bdff83..2af22a1db2 100644 --- a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/mem.rs +++ b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/mem.rs @@ -1,17 +1,16 @@ -/* Copyright 2023 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ +// Copyright 2023 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. use crate::FfiSlice; diff --git a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/mldsa.rs b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/mldsa.rs index abdb21cbc8..9ee28c578c 100644 --- a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/mldsa.rs +++ b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/mldsa.rs @@ -1,16 +1,16 @@ -/* Copyright 2024 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2024 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. //! ML-DSA //! diff --git a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/mlkem.rs b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/mlkem.rs index 6aa40b39ce..8e4a6e47bb 100644 --- a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/mlkem.rs +++ b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/mlkem.rs @@ -1,17 +1,16 @@ -/* Copyright 2024 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ +// Copyright 2024 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. //! ML-KEM //! diff --git a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/rand.rs b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/rand.rs index 2db1c2a668..71217ffe31 100644 --- a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/rand.rs +++ b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/rand.rs @@ -1,17 +1,16 @@ -/* Copyright 2023 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ +// Copyright 2023 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. //! Getting random bytes. diff --git a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/rsa.rs b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/rsa.rs index 3e19425546..f41c3b13b7 100644 --- a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/rsa.rs +++ b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/rsa.rs @@ -1,17 +1,16 @@ -/* Copyright 2024 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ +// Copyright 2024 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. //! RSA signatures. //! diff --git a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/scoped.rs b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/scoped.rs index bf8b0a0cb3..2a19c7b62f 100644 --- a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/scoped.rs +++ b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/scoped.rs @@ -1,17 +1,16 @@ -/* Copyright 2024 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ +// Copyright 2024 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. //! Helpers to ensure that some temporary objects are always freed. diff --git a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/slhdsa.rs b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/slhdsa.rs index 6e94f0e1a7..dd822b5e4a 100644 --- a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/slhdsa.rs +++ b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/slhdsa.rs @@ -1,16 +1,16 @@ -/* Copyright 2024 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2024 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. //! SLH-DSA-SHA2-128s. //! diff --git a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/test_helpers.rs b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/test_helpers.rs index b5be83532c..1c683ff3d4 100644 --- a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/test_helpers.rs +++ b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/test_helpers.rs @@ -1,17 +1,16 @@ -/* Copyright 2023 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ +// Copyright 2023 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. use alloc::vec::Vec; #[allow(clippy::expect_used, clippy::unwrap_used, clippy::indexing_slicing)] diff --git a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/x25519.rs b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/x25519.rs index 0bee5bf143..3316b6d9d5 100644 --- a/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/x25519.rs +++ b/naiveproxy/src/third_party/boringssl/src/rust/bssl-crypto/src/x25519.rs @@ -1,17 +1,16 @@ -/* Copyright 2023 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ +// Copyright 2023 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. //! Diffie-Hellman over curve25519. //! diff --git a/naiveproxy/src/third_party/boringssl/src/rust/bssl-sys/Cargo.toml b/naiveproxy/src/third_party/boringssl/src/rust/bssl-sys/Cargo.toml index bf490e4dc3..ec1e0c3cac 100644 --- a/naiveproxy/src/third_party/boringssl/src/rust/bssl-sys/Cargo.toml +++ b/naiveproxy/src/third_party/boringssl/src/rust/bssl-sys/Cargo.toml @@ -3,7 +3,7 @@ name = "bssl-sys" version = "0.1.0" edition = "2018" publish = false -license = "ISC" +license = "Apache-2.0" # This exists to workaround a limitation in cargo: # https://github.com/rust-lang/cargo/issues/3544 diff --git a/naiveproxy/src/third_party/boringssl/src/rust/bssl-sys/build.rs b/naiveproxy/src/third_party/boringssl/src/rust/bssl-sys/build.rs index 61c615dab3..58027b593c 100644 --- a/naiveproxy/src/third_party/boringssl/src/rust/bssl-sys/build.rs +++ b/naiveproxy/src/third_party/boringssl/src/rust/bssl-sys/build.rs @@ -1,17 +1,16 @@ -/* Copyright 2021 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ +// Copyright 2021 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. use std::env; use std::path::Path; diff --git a/naiveproxy/src/third_party/boringssl/src/rust/bssl-sys/rust_wrapper.c b/naiveproxy/src/third_party/boringssl/src/rust/bssl-sys/rust_wrapper.c index 80a0f6b780..e7ff1a2d69 100644 --- a/naiveproxy/src/third_party/boringssl/src/rust/bssl-sys/rust_wrapper.c +++ b/naiveproxy/src/third_party/boringssl/src/rust/bssl-sys/rust_wrapper.c @@ -1,16 +1,16 @@ -/* Copyright 2022 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2022 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include "rust_wrapper.h" diff --git a/naiveproxy/src/third_party/boringssl/src/rust/bssl-sys/rust_wrapper.h b/naiveproxy/src/third_party/boringssl/src/rust/bssl-sys/rust_wrapper.h index a5cb876bb0..c894bd724e 100644 --- a/naiveproxy/src/third_party/boringssl/src/rust/bssl-sys/rust_wrapper.h +++ b/naiveproxy/src/third_party/boringssl/src/rust/bssl-sys/rust_wrapper.h @@ -1,16 +1,16 @@ -/* Copyright 2022 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2022 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_RUST_WRAPPER_H #define OPENSSL_HEADER_RUST_WRAPPER_H diff --git a/naiveproxy/src/third_party/boringssl/src/ssl/bio_ssl.cc b/naiveproxy/src/third_party/boringssl/src/ssl/bio_ssl.cc index a02b047835..164cd1a0f2 100644 --- a/naiveproxy/src/third_party/boringssl/src/ssl/bio_ssl.cc +++ b/naiveproxy/src/third_party/boringssl/src/ssl/bio_ssl.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/ssl/d1_both.cc b/naiveproxy/src/third_party/boringssl/src/ssl/d1_both.cc index b02a958480..4a02d260fa 100644 --- a/naiveproxy/src/third_party/boringssl/src/ssl/d1_both.cc +++ b/naiveproxy/src/third_party/boringssl/src/ssl/d1_both.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2005-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2005-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include @@ -891,7 +896,7 @@ static int send_flight(SSL *ssl) { uint32_t old_offset = ssl->d1->outgoing_offset; size_t packet_len; - if (!seal_next_packet(ssl, MakeSpan(packet), &packet_len)) { + if (!seal_next_packet(ssl, Span(packet), &packet_len)) { return -1; } @@ -1001,7 +1006,7 @@ static int send_ack(SSL *ssl) { } ssl_do_msg_callback(ssl, /*is_write=*/1, SSL3_RT_ACK, - MakeConstSpan(CBB_data(&cbb), CBB_len(&cbb))); + Span(CBB_data(&cbb), CBB_len(&cbb))); int bio_ret = BIO_write(ssl->wbio.get(), record, static_cast(record_len)); diff --git a/naiveproxy/src/third_party/boringssl/src/ssl/d1_lib.cc b/naiveproxy/src/third_party/boringssl/src/ssl/d1_lib.cc index ac434d47d9..c37e704ad2 100644 --- a/naiveproxy/src/third_party/boringssl/src/ssl/d1_lib.cc +++ b/naiveproxy/src/third_party/boringssl/src/ssl/d1_lib.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2005-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2005-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/ssl/d1_pkt.cc b/naiveproxy/src/third_party/boringssl/src/ssl/d1_pkt.cc index 82a4ee6637..442b8f224d 100644 --- a/naiveproxy/src/third_party/boringssl/src/ssl/d1_pkt.cc +++ b/naiveproxy/src/third_party/boringssl/src/ssl/d1_pkt.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2005-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2005-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/ssl/d1_srtp.cc b/naiveproxy/src/third_party/boringssl/src/ssl/d1_srtp.cc index 22fe8fd39d..198ed7b363 100644 --- a/naiveproxy/src/third_party/boringssl/src/ssl/d1_srtp.cc +++ b/naiveproxy/src/third_party/boringssl/src/ssl/d1_srtp.cc @@ -1,18 +1,20 @@ -/* - * Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved. +// Copyright (C) 2006, Network Resonance, Inc. +// Copyright (C) 2011, RTFM, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. -/* - DTLS code by Eric Rescorla - - Copyright (C) 2006, Network Resonance, Inc. - Copyright (C) 2011, RTFM, Inc. -*/ +// DTLS code by Eric Rescorla #include diff --git a/naiveproxy/src/third_party/boringssl/src/ssl/dtls_method.cc b/naiveproxy/src/third_party/boringssl/src/ssl/dtls_method.cc index 14a2c8b1a2..7be3159a4f 100644 --- a/naiveproxy/src/third_party/boringssl/src/ssl/dtls_method.cc +++ b/naiveproxy/src/third_party/boringssl/src/ssl/dtls_method.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2005-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2005-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/ssl/dtls_record.cc b/naiveproxy/src/third_party/boringssl/src/ssl/dtls_record.cc index 55cd1f2165..0077338111 100644 --- a/naiveproxy/src/third_party/boringssl/src/ssl/dtls_record.cc +++ b/naiveproxy/src/third_party/boringssl/src/ssl/dtls_record.cc @@ -1,11 +1,16 @@ -/* - * Copyright 2005-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 2005-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include @@ -115,7 +120,7 @@ uint64_t reconstruct_seqnum(uint16_t wire_seq, uint64_t seq_mask, } static Span cbs_to_writable_bytes(CBS cbs) { - return MakeSpan(const_cast(CBS_data(&cbs)), CBS_len(&cbs)); + return Span(const_cast(CBS_data(&cbs)), CBS_len(&cbs)); } struct ParsedDTLSRecord { @@ -540,8 +545,7 @@ bool dtls_seal_record(SSL *ssl, DTLSRecordNumber *out_number, uint8_t *out, CRYPTO_store_u64_be(out + 3, record_number.combined()); CRYPTO_store_u16_be(out + 11, ciphertext_len); } - Span header = MakeConstSpan(out, record_header_len); - + Span header(out, record_header_len); if (!write_epoch->aead->SealScatter( out + record_header_len, out + prefix, out + prefix + in_len, type, @@ -556,8 +560,7 @@ bool dtls_seal_record(SSL *ssl, DTLSRecordNumber *out_number, uint8_t *out, // generate the mask used for encryption. For simplicity, pass in the whole // ciphertext as the sample - GenerateRecordNumberMask will read only what // it needs (and error if |sample| is too short). - Span sample = - MakeConstSpan(out + record_header_len, ciphertext_len); + Span sample(out + record_header_len, ciphertext_len); uint8_t mask[2]; if (!write_epoch->rn_encrypter->GenerateMask(mask, sample)) { return false; diff --git a/naiveproxy/src/third_party/boringssl/src/ssl/encrypted_client_hello.cc b/naiveproxy/src/third_party/boringssl/src/ssl/encrypted_client_hello.cc index 046e0a9a56..3af46a7959 100644 --- a/naiveproxy/src/third_party/boringssl/src/ssl/encrypted_client_hello.cc +++ b/naiveproxy/src/third_party/boringssl/src/ssl/encrypted_client_hello.cc @@ -1,16 +1,16 @@ -/* Copyright 2021 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2021 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include @@ -172,8 +172,8 @@ bool ssl_decode_client_hello_inner( return false; } - auto inner_extensions = MakeConstSpan(client_hello_inner.extensions, - client_hello_inner.extensions_len); + auto inner_extensions = + Span(client_hello_inner.extensions, client_hello_inner.extensions_len); CBS ext_list_wrapper; if (!ssl_client_hello_get_extension(&client_hello_inner, &ext_list_wrapper, TLSEXT_TYPE_ech_outer_extensions)) { @@ -255,8 +255,8 @@ bool ssl_decode_client_hello_inner( return false; } - if (!is_valid_client_hello_inner( - ssl, out_alert, MakeConstSpan(CBB_data(&body), CBB_len(&body)))) { + if (!is_valid_client_hello_inner(ssl, out_alert, + Span(CBB_data(&body), CBB_len(&body)))) { return false; } @@ -277,8 +277,8 @@ bool ssl_client_hello_decrypt(SSL_HANDSHAKE *hs, uint8_t *out_alert, // point within |client_hello_outer->extensions|) replaced with zeros. See // draft-ietf-tls-esni-13, section 5.2. Array aad; - if (!aad.CopyFrom(MakeConstSpan(client_hello_outer->client_hello, - client_hello_outer->client_hello_len))) { + if (!aad.CopyFrom(Span(client_hello_outer->client_hello, + client_hello_outer->client_hello_len))) { *out_alert = SSL_AD_INTERNAL_ERROR; return false; } @@ -290,7 +290,7 @@ bool ssl_client_hello_decrypt(SSL_HANDSHAKE *hs, uint8_t *out_alert, assert(reinterpret_cast(client_hello_outer->extensions + client_hello_outer->extensions_len) >= reinterpret_cast(payload.data() + payload.size())); - Span payload_aad = MakeSpan(aad).subspan( + Span payload_aad = Span(aad).subspan( payload.data() - client_hello_outer->client_hello, payload.size()); OPENSSL_memset(payload_aad.data(), 0, payload_aad.size()); @@ -431,7 +431,7 @@ static bool parse_ech_config(CBS *cbs, ECHConfig *out, bool *out_supported, // Make a copy of the ECHConfig and parse from it, so the results alias into // the saved copy. if (!out->raw.CopyFrom( - MakeConstSpan(CBS_data(&orig), CBS_len(&orig) - CBS_len(cbs)))) { + Span(CBS_data(&orig), CBS_len(&orig) - CBS_len(cbs)))) { return false; } @@ -539,7 +539,7 @@ bool ECHServerConfig::Init(Span ech_config, return false; } if (ech_config_.kem_id != EVP_HPKE_KEM_id(EVP_HPKE_KEY_kem(key)) || - MakeConstSpan(expected_public_key, expected_public_key_len) != + Span(expected_public_key, expected_public_key_len) != ech_config_.public_key) { OPENSSL_PUT_ERROR(SSL, SSL_R_ECH_SERVER_CONFIG_AND_PRIVATE_KEY_MISMATCH); return false; @@ -650,7 +650,7 @@ bool ssl_select_ech_config(SSL_HANDSHAKE *hs, Span out_enc, } if (!hs->config->client_ech_config_list.empty()) { - CBS cbs = MakeConstSpan(hs->config->client_ech_config_list); + CBS cbs = CBS(hs->config->client_ech_config_list); CBS child; if (!CBS_get_u16_length_prefixed(&cbs, &child) || // CBS_len(&child) == 0 || // @@ -804,16 +804,16 @@ bool ssl_encrypt_client_hello(SSL_HANDSHAKE *hs, Span enc) { if (needs_psk_binder) { size_t binder_len; - if (!tls13_write_psk_binder(hs, hs->inner_transcript, MakeSpan(hello_inner), + if (!tls13_write_psk_binder(hs, hs->inner_transcript, Span(hello_inner), &binder_len)) { return false; } // Also update the EncodedClientHelloInner. auto encoded_binder = - MakeSpan(const_cast(CBB_data(encoded_cbb.get())), - CBB_len(encoded_cbb.get())) + Span(const_cast(CBB_data(encoded_cbb.get())), + CBB_len(encoded_cbb.get())) .last(binder_len); - auto hello_inner_binder = MakeConstSpan(hello_inner).last(binder_len); + auto hello_inner_binder = Span(hello_inner).last(binder_len); OPENSSL_memcpy(encoded_binder.data(), hello_inner_binder.data(), binder_len); } @@ -885,7 +885,7 @@ bool ssl_encrypt_client_hello(SSL_HANDSHAKE *hs, Span enc) { assert(!needs_psk_binder); // Replace the payload in |hs->ech_client_outer| with the encrypted value. - auto payload_span = MakeSpan(hs->ech_client_outer).last(payload_len); + auto payload_span = Span(hs->ech_client_outer).last(payload_len); #if defined(BORINGSSL_UNSAFE_FUZZER_MODE) // In fuzzer mode, the server expects a cleartext payload. assert(payload_span.size() == encoded.size()); @@ -920,7 +920,7 @@ int SSL_set1_ech_config_list(SSL *ssl, const uint8_t *ech_config_list, return 0; } - auto span = MakeConstSpan(ech_config_list, ech_config_list_len); + auto span = Span(ech_config_list, ech_config_list_len); if (!ssl_is_valid_ech_config_list(span)) { OPENSSL_PUT_ERROR(SSL, SSL_R_INVALID_ECH_CONFIG_LIST); return 0; @@ -972,8 +972,7 @@ void SSL_get0_ech_retry_configs(const SSL *ssl, int SSL_marshal_ech_config(uint8_t **out, size_t *out_len, uint8_t config_id, const EVP_HPKE_KEY *key, const char *public_name, size_t max_name_len) { - Span public_name_u8 = MakeConstSpan( - reinterpret_cast(public_name), strlen(public_name)); + Span public_name_u8 = StringAsBytes(public_name); if (!ssl_is_valid_ech_public_name(public_name_u8)) { OPENSSL_PUT_ERROR(SSL, SSL_R_INVALID_ECH_PUBLIC_NAME); return 0; @@ -1036,7 +1035,7 @@ int SSL_ECH_KEYS_add(SSL_ECH_KEYS *configs, int is_retry_config, if (!parsed_config) { return 0; } - if (!parsed_config->Init(MakeConstSpan(ech_config, ech_config_len), key, + if (!parsed_config->Init(Span(ech_config, ech_config_len), key, !!is_retry_config)) { OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR); return 0; diff --git a/naiveproxy/src/third_party/boringssl/src/ssl/extensions.cc b/naiveproxy/src/third_party/boringssl/src/ssl/extensions.cc index c6718d5732..785b4ef874 100644 --- a/naiveproxy/src/third_party/boringssl/src/ssl/extensions.cc +++ b/naiveproxy/src/third_party/boringssl/src/ssl/extensions.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include @@ -31,6 +36,7 @@ #include #include "../crypto/internal.h" +#include "../crypto/spake2plus/internal.h" #include "internal.h" @@ -436,9 +442,7 @@ static bool ext_sni_add_clienthello(const SSL_HANDSHAKE *hs, CBB *out, if (ssl->hostname == nullptr) { return true; } - hostname = - MakeConstSpan(reinterpret_cast(ssl->hostname.get()), - strlen(ssl->hostname.get())); + hostname = StringAsBytes(ssl->hostname.get()); } CBB contents, server_name_list, name; @@ -919,6 +923,10 @@ static bool ext_sigalgs_add_clienthello(const SSL_HANDSHAKE *hs, CBB *out, if (hs->max_version < TLS1_2_VERSION) { return true; } + // In PAKE mode, signature_algorithms is not used. + if (hs->pake_prover != nullptr) { + return true; + } CBB contents, sigalgs_cbb; if (!CBB_add_u16(out_compressible, TLSEXT_TYPE_signature_algorithms) || @@ -1102,8 +1110,7 @@ static bool ext_npn_parse_serverhello(SSL_HANDSHAKE *hs, uint8_t *out_alert, ssl, &selected, &selected_len, orig_contents, static_cast(orig_len), ssl->ctx->next_proto_select_cb_arg) != SSL_TLSEXT_ERR_OK || - !ssl->s3->next_proto_negotiated.CopyFrom( - MakeConstSpan(selected, selected_len))) { + !ssl->s3->next_proto_negotiated.CopyFrom(Span(selected, selected_len))) { *out_alert = SSL_AD_INTERNAL_ERROR; return false; } @@ -1437,8 +1444,7 @@ bool ssl_negotiate_alpn(SSL_HANDSHAKE *hs, uint8_t *out_alert, *out_alert = SSL_AD_INTERNAL_ERROR; return false; } - if (!ssl->s3->alpn_selected.CopyFrom( - MakeConstSpan(selected, selected_len))) { + if (!ssl->s3->alpn_selected.CopyFrom(Span(selected, selected_len))) { *out_alert = SSL_AD_INTERNAL_ERROR; return false; } @@ -1973,6 +1979,11 @@ static bool ext_psk_key_exchange_modes_add_clienthello( if (hs->max_version < TLS1_3_VERSION) { return true; } + // We do not support resumption with PAKEs, so do not offer any PSK key + // exchange modes, to signal the server not to send a ticket. + if (hs->pake_prover != nullptr) { + return true; + } CBB contents, ke_modes; if (!CBB_add_u16(out_compressible, TLSEXT_TYPE_psk_key_exchange_modes) || @@ -2120,7 +2131,9 @@ bool ssl_setup_key_shares(SSL_HANDSHAKE *hs, uint16_t override_group_id) { hs->key_shares[1].reset(); hs->key_share_bytes.Reset(); - if (hs->max_version < TLS1_3_VERSION) { + // If offering a PAKE, do not set up key shares. We do not currently support + // clients offering both PAKE and non-PAKE modes, including resumption. + if (hs->max_version < TLS1_3_VERSION || hs->pake_prover) { return true; } @@ -2185,7 +2198,9 @@ bool ssl_setup_key_shares(SSL_HANDSHAKE *hs, uint16_t override_group_id) { static bool ext_key_share_add_clienthello(const SSL_HANDSHAKE *hs, CBB *out, CBB *out_compressible, ssl_client_hello_type_t type) { - if (hs->max_version < TLS1_3_VERSION) { + // If offering a PAKE, do not set up key shares. We do not currently support + // clients offering both PAKE and non-PAKE modes, including resumption. + if (hs->max_version < TLS1_3_VERSION || hs->pake_prover) { return true; } @@ -2206,6 +2221,14 @@ static bool ext_key_share_add_clienthello(const SSL_HANDSHAKE *hs, CBB *out, bool ssl_ext_key_share_parse_serverhello(SSL_HANDSHAKE *hs, Array *out_secret, uint8_t *out_alert, CBS *contents) { + if (hs->key_shares[0] == nullptr) { + // If we did not offer key shares, the extension should have been rejected + // as unsolicited. + OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR); + *out_alert = SSL_AD_INTERNAL_ERROR; + return false; + } + CBS ciphertext; uint16_t group_id; if (!CBS_get_u16(contents, &group_id) || @@ -2241,7 +2264,8 @@ bool ssl_ext_key_share_parse_clienthello(SSL_HANDSHAKE *hs, bool *out_found, Span *out_peer_key, uint8_t *out_alert, const SSL_CLIENT_HELLO *client_hello) { - // We only support connections that include an ECDHE key exchange. + // We only support connections that include an ECDHE key exchange, or use a + // PAKE. CBS contents; if (!ssl_client_hello_get_extension(client_hello, &contents, TLSEXT_TYPE_key_share)) { @@ -2290,7 +2314,30 @@ bool ssl_ext_key_share_parse_clienthello(SSL_HANDSHAKE *hs, bool *out_found, return true; } +bool ssl_ext_pake_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) { + if (hs->pake_share_bytes.empty()) { + return true; + } + + CBB pake_ext, pake_msg; + if (!CBB_add_u16(out, TLSEXT_TYPE_pake) || + !CBB_add_u16_length_prefixed(out, &pake_ext) || + !CBB_add_u16(&pake_ext, SSL_PAKE_SPAKE2PLUSV1) || + !CBB_add_u16_length_prefixed(&pake_ext, &pake_msg) || + !CBB_add_bytes(&pake_msg, hs->pake_share_bytes.data(), + hs->pake_share_bytes.size()) || + !CBB_flush(out)) { + return false; + } + return true; +} + bool ssl_ext_key_share_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) { + if (hs->pake_verifier) { + // We don't add the key share extension if a PAKE is offered. + return true; + } + CBB entry, ciphertext; if (!CBB_add_u16(out, TLSEXT_TYPE_key_share) || !CBB_add_u16_length_prefixed(out, &entry) || @@ -2382,6 +2429,11 @@ static bool ext_supported_groups_add_clienthello(const SSL_HANDSHAKE *hs, CBB *out_compressible, ssl_client_hello_type_t type) { const SSL *const ssl = hs->ssl; + // In PAKE mode, supported_groups and key_share are not used. + if (hs->pake_prover != nullptr) { + return true; + } + CBB contents, groups_bytes; if (!CBB_add_u16(out_compressible, TLSEXT_TYPE_supported_groups) || !CBB_add_u16_length_prefixed(out_compressible, &contents) || @@ -2822,6 +2874,220 @@ static bool cert_compression_add_serverhello(SSL_HANDSHAKE *hs, CBB *out) { return true; } +// PAKEs +// +// See +// https://chris-wood.github.io/draft-bmw-tls-pake13/draft-bmw-tls-pake13.html + +bool ssl_setup_pake_shares(SSL_HANDSHAKE *hs) { + hs->pake_share_bytes.Reset(); + if (hs->max_version < TLS1_3_VERSION) { + return true; + } + + Array creds; + if (!ssl_get_credential_list(hs, &creds)) { + return false; + } + + if (std::none_of(creds.begin(), creds.end(), [](SSL_CREDENTIAL *cred) { + return cred->type == SSLCredentialType::kSPAKE2PlusV1Client; + })) { + // If there were no configured PAKE credentials, proceed without filling + // in the PAKE extension. + return true; + } + + // We currently do not support multiple PAKE credentials, or a mix of PAKE and + // non-PAKE credentials. + if (creds.size() != 1u) { + OPENSSL_PUT_ERROR(SSL, SSL_R_UNSUPPORTED_CREDENTIAL_LIST); + return false; + } + SSL_CREDENTIAL *cred = creds[0]; + assert(cred->type == SSLCredentialType::kSPAKE2PlusV1Client); + + hs->pake_prover = MakeUnique(); + uint8_t prover_share[spake2plus::kShareSize]; + if (hs->pake_prover == nullptr || + !hs->pake_prover->Init(cred->pake_context, cred->client_identity, + cred->server_identity, cred->password_verifier_w0, + cred->password_verifier_w1) || + !hs->pake_prover->GenerateShare(prover_share)) { + return false; + } + + hs->credential = UpRef(cred); + + bssl::ScopedCBB cbb; + CBB shares, client_identity, server_identity, pake_message; + if (!CBB_init(cbb.get(), 64) || + !CBB_add_u16_length_prefixed(cbb.get(), &client_identity) || + !CBB_add_bytes(&client_identity, cred->client_identity.data(), + cred->client_identity.size()) || + !CBB_add_u16_length_prefixed(cbb.get(), &server_identity) || + !CBB_add_bytes(&server_identity, cred->server_identity.data(), + cred->server_identity.size()) || + !CBB_add_u16_length_prefixed(cbb.get(), &shares) || + !CBB_add_u16(&shares, SSL_PAKE_SPAKE2PLUSV1) || + !CBB_add_u16_length_prefixed(&shares, &pake_message) || + !CBB_add_bytes(&pake_message, prover_share, sizeof(prover_share))) { + return false; + } + + return CBBFinishArray(cbb.get(), &hs->pake_share_bytes); +} + +static bool ext_pake_add_clienthello(const SSL_HANDSHAKE *hs, CBB *out, + CBB *out_compressible, + ssl_client_hello_type_t type) { + if (hs->pake_share_bytes.empty()) { + return true; + } + + CBB pake_share_bytes; + if (!CBB_add_u16(out_compressible, TLSEXT_TYPE_pake) || + !CBB_add_u16_length_prefixed(out_compressible, &pake_share_bytes) || + !CBB_add_bytes(&pake_share_bytes, hs->pake_share_bytes.data(), + hs->pake_share_bytes.size()) || + !CBB_flush(out_compressible)) { + return false; + } + + return true; +} + +bool ssl_ext_pake_parse_serverhello(SSL_HANDSHAKE *hs, + Array *out_secret, + uint8_t *out_alert, CBS *contents) { + *out_alert = SSL_AD_DECODE_ERROR; + + if (!hs->pake_prover) { + // If we did not offer a PAKE, the extension should have been rejected as + // unsolicited. + OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR); + *out_alert = SSL_AD_INTERNAL_ERROR; + return false; + } + + CBS pake_msg; + uint16_t named_pake; + if (!CBS_get_u16(contents, &named_pake) || + !CBS_get_u16_length_prefixed(contents, &pake_msg) || + CBS_len(contents) != 0 || // + named_pake != SSL_PAKE_SPAKE2PLUSV1) { + OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR); + return false; + } + + // Check that the server's PAKE share consists of the right number of + // bytes for a PAKE share and a key confirmation message. + if (CBS_len(&pake_msg) != spake2plus::kShareSize + spake2plus::kConfirmSize) { + OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR); + *out_alert = SSL_AD_ILLEGAL_PARAMETER; + return false; + } + Span pake_msg_span = pake_msg; + + // Releasing the result of |ComputeConfirmation| lets the client confirm one + // PAKE guess. If all failures are used up, no more guesses are allowed. + if (!hs->credential->HasPAKEAttempts()) { + OPENSSL_PUT_ERROR(SSL, SSL_R_PAKE_EXHAUSTED); + *out_alert = SSL_AD_INTERNAL_ERROR; + return false; + } + + uint8_t prover_confirm[spake2plus::kConfirmSize]; + uint8_t prover_secret[spake2plus::kSecretSize]; + if (!hs->pake_prover->ComputeConfirmation( + prover_confirm, prover_secret, + pake_msg_span.subspan(0, spake2plus::kShareSize), + pake_msg_span.subspan(spake2plus::kShareSize))) { + // Record a failure before releasing the answer to the client. + hs->credential->ClaimPAKEAttempt(); + OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR); + *out_alert = SSL_AD_ILLEGAL_PARAMETER; + return false; + } + + Array secret; + if (!secret.CopyFrom(prover_secret)) { + OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR); + *out_alert = SSL_AD_INTERNAL_ERROR; + return false; + } + + *out_secret = std::move(secret); + return true; +} + +static bool ext_pake_parse_clienthello(SSL_HANDSHAKE *hs, uint8_t *out_alert, + CBS *contents) { + if (contents == nullptr) { + return true; + } + + // struct { + // opaque client_identity<0..2^16-1>; + // opaque server_identity<0..2^16-1>; + // PAKEShare client_shares<0..2^16-1>; + // } PAKEClientHello; + // + // struct { + // NamedPAKE named_pake; + // opaque pake_message<1..2^16-1>; + // } PAKEShare; + + *out_alert = SSL_AD_DECODE_ERROR; + CBS client_identity, server_identity, shares; + if (!CBS_get_u16_length_prefixed(contents, &client_identity) || + !CBS_get_u16_length_prefixed(contents, &server_identity) || + !CBS_get_u16_length_prefixed(contents, &shares) || + CBS_len(contents) != 0) { + OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR); + return false; + } + + uint16_t last_named_pake = 0; + for (size_t i = 0; CBS_len(&shares) > 0; i++) { + uint16_t pake_id; + CBS message; + if (!CBS_get_u16(&shares, &pake_id) || + !CBS_get_u16_length_prefixed(&shares, &message)) { + OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR); + return false; + } + + // PAKEs must be sent in strictly monotonic order. + if (i > 0 && last_named_pake >= pake_id) { + OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR); + return false; + } + last_named_pake = pake_id; + + // We only support one PAKE. + if (pake_id != SSL_PAKE_SPAKE2PLUSV1) { + continue; + } + + // Save the PAKE share for the handshake logic to pick up later. + // TODO(crbug.com/391393404): It would be nice if the callback did not have + // to copy this. + hs->pake_share = MakeUnique(); + if (hs->pake_share == nullptr || + !hs->pake_share->client_identity.CopyFrom(client_identity) || + !hs->pake_share->server_identity.CopyFrom(server_identity) || + !hs->pake_share->pake_message.CopyFrom(message)) { + OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR); + return false; + } + hs->pake_share->named_pake = pake_id; + } + + return true; +} + + // Application-level Protocol Settings // // https://tools.ietf.org/html/draft-vvv-tls-alps-01 @@ -3019,7 +3285,7 @@ bool ssl_negotiate_alps(SSL_HANDSHAKE *hs, uint8_t *out_alert, *out_alert = SSL_AD_DECODE_ERROR; return false; } - if (protocol_name == MakeConstSpan(ssl->s3->alpn_selected)) { + if (protocol_name == Span(ssl->s3->alpn_selected)) { found = true; } } @@ -3225,6 +3491,15 @@ static const struct tls_extension kExtensions[] = { ext_certificate_authorities_parse_clienthello, dont_add_serverhello, }, + { + TLSEXT_TYPE_pake, + ext_pake_add_clienthello, + // This extension is unencrypted and so adding and parsing it from the + // ServerHello is handled elsewhere. + forbid_parse_serverhello, + ext_pake_parse_clienthello, + dont_add_serverhello, + }, }; #define kNumExtensions (sizeof(kExtensions) / sizeof(struct tls_extension)) @@ -3671,7 +3946,7 @@ static bool ssl_scan_serverhello_tlsext(SSL_HANDSHAKE *hs, const CBS *cbs, if (!(hs->extensions.sent & (1u << ext_index))) { // If the extension was never sent then it is illegal. OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_EXTENSION); - ERR_add_error_dataf("extension :%u", (unsigned)type); + ERR_add_error_dataf("extension %u", (unsigned)type); *out_alert = SSL_AD_UNSUPPORTED_EXTENSION; return false; } @@ -4076,9 +4351,8 @@ bool tls1_choose_signature_algorithm(SSL_HANDSHAKE *hs, } } - Span sigalgs = cred->sigalgs.empty() - ? MakeConstSpan(kSignSignatureAlgorithms) - : cred->sigalgs; + Span sigalgs = + cred->sigalgs.empty() ? Span(kSignSignatureAlgorithms) : cred->sigalgs; for (uint16_t sigalg : sigalgs) { if (!ssl_pkey_supports_algorithm(ssl, cred->pubkey.get(), sigalg, /*is_verify=*/false)) { diff --git a/naiveproxy/src/third_party/boringssl/src/ssl/handoff.cc b/naiveproxy/src/third_party/boringssl/src/ssl/handoff.cc index bd409f2406..356d75a5cb 100644 --- a/naiveproxy/src/third_party/boringssl/src/ssl/handoff.cc +++ b/naiveproxy/src/third_party/boringssl/src/ssl/handoff.cc @@ -1,16 +1,16 @@ -/* Copyright 2018 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2018 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include @@ -668,8 +668,10 @@ bool SSL_apply_handback(SSL *ssl, Span handback) { } s3->session_reused = session_reused; hs->channel_id_negotiated = channel_id_negotiated; - s3->next_proto_negotiated.CopyFrom(next_proto); - s3->alpn_selected.CopyFrom(alpn); + if (!s3->next_proto_negotiated.CopyFrom(next_proto) || + !s3->alpn_selected.CopyFrom(alpn)) { + return false; + } const size_t hostname_len = CBS_len(&hostname); if (hostname_len == 0) { diff --git a/naiveproxy/src/third_party/boringssl/src/ssl/handshake.cc b/naiveproxy/src/third_party/boringssl/src/ssl/handshake.cc index e10950e153..6e131b0324 100644 --- a/naiveproxy/src/third_party/boringssl/src/ssl/handshake.cc +++ b/naiveproxy/src/third_party/boringssl/src/ssl/handshake.cc @@ -1,12 +1,17 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include @@ -74,7 +79,7 @@ bool SSL_HANDSHAKE::GetClientHello(SSLMessage *out_msg, out_msg->raw = CBS(ech_client_hello_buf); size_t header_len = SSL_is_dtls(ssl) ? DTLS1_HM_HEADER_LENGTH : SSL3_HM_HEADER_LENGTH; - out_msg->body = MakeConstSpan(ech_client_hello_buf).subspan(header_len); + out_msg->body = CBS(Span(ech_client_hello_buf).subspan(header_len)); } else if (!ssl->method->get_message(ssl, out_msg)) { // The message has already been read, so this cannot fail. OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR); @@ -198,6 +203,7 @@ bool ssl_parse_extensions(const CBS *cbs, uint8_t *out_alert, continue; } OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_EXTENSION); + ERR_add_error_dataf("extension %u", unsigned{type}); *out_alert = SSL_AD_UNSUPPORTED_EXTENSION; return false; } @@ -238,10 +244,8 @@ enum ssl_verify_result_t ssl_verify_peer_cert(SSL_HANDSHAKE *hs) { sk_CRYPTO_BUFFER_value(prev_session->certs.get(), i); const CRYPTO_BUFFER *new_cert = sk_CRYPTO_BUFFER_value(hs->new_session->certs.get(), i); - if (CRYPTO_BUFFER_len(old_cert) != CRYPTO_BUFFER_len(new_cert) || - OPENSSL_memcmp(CRYPTO_BUFFER_data(old_cert), - CRYPTO_BUFFER_data(new_cert), - CRYPTO_BUFFER_len(old_cert)) != 0) { + if (Span(CRYPTO_BUFFER_data(old_cert), CRYPTO_BUFFER_len(old_cert)) != + Span(CRYPTO_BUFFER_data(new_cert), CRYPTO_BUFFER_len(new_cert))) { OPENSSL_PUT_ERROR(SSL, SSL_R_SERVER_CERT_CHANGED); ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER); return ssl_verify_invalid; @@ -398,11 +402,9 @@ enum ssl_hs_wait_t ssl_get_finished(SSL_HANDSHAKE *hs) { } if (ssl->server) { - ssl->s3->previous_client_finished.CopyFrom( - MakeConstSpan(finished, finished_len)); + ssl->s3->previous_client_finished.CopyFrom(Span(finished, finished_len)); } else { - ssl->s3->previous_server_finished.CopyFrom( - MakeConstSpan(finished, finished_len)); + ssl->s3->previous_server_finished.CopyFrom(Span(finished, finished_len)); } // The Finished message should be the end of a flight. @@ -426,7 +428,7 @@ bool ssl_send_finished(SSL_HANDSHAKE *hs) { ssl->server)) { return false; } - auto finished = MakeConstSpan(finished_buf, finished_len); + auto finished = Span(finished_buf, finished_len); // Log the master secret, if logging is enabled. if (!ssl_log_secret(ssl, "CLIENT_RANDOM", session->secret)) { diff --git a/naiveproxy/src/third_party/boringssl/src/ssl/handshake_client.cc b/naiveproxy/src/third_party/boringssl/src/ssl/handshake_client.cc index 45f5901f45..8d5221ecc6 100644 --- a/naiveproxy/src/third_party/boringssl/src/ssl/handshake_client.cc +++ b/naiveproxy/src/third_party/boringssl/src/ssl/handshake_client.cc @@ -1,13 +1,18 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. - * Copyright 2005 Nokia. All rights reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. +// Copyright 2005 Nokia. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include @@ -234,7 +239,7 @@ bool ssl_add_client_hello(SSL_HANDSHAKE *hs) { // ClientHelloOuter cannot have a PSK binder. Otherwise the // ClientHellOuterAAD computation would break. assert(type != ssl_client_hello_outer); - if (!tls13_write_psk_binder(hs, hs->transcript, MakeSpan(msg), + if (!tls13_write_psk_binder(hs, hs->transcript, Span(msg), /*out_binder_len=*/0)) { return false; } @@ -332,6 +337,7 @@ void ssl_done_writing_client_hello(SSL_HANDSHAKE *hs) { hs->ech_client_outer.Reset(); hs->cookie.Reset(); hs->key_share_bytes.Reset(); + hs->pake_share_bytes.Reset(); } static enum ssl_hs_wait_t do_start_connect(SSL_HANDSHAKE *hs) { @@ -363,6 +369,10 @@ static enum ssl_hs_wait_t do_start_connect(SSL_HANDSHAKE *hs) { hs->max_version >= TLS1_2_VERSION ? TLS1_2_VERSION : hs->max_version; } + if (!ssl_setup_pake_shares(hs)) { + return ssl_hs_error; + } + // If the configured session has expired or is not usable, drop it. We also do // not offer sessions on renegotiation. SSLSessionType session_type = SSLSessionType::kNotResumable; @@ -379,6 +389,10 @@ static enum ssl_hs_wait_t do_start_connect(SSL_HANDSHAKE *hs) { // Don't offer TLS 1.2 tickets if disabled. (session_type == SSLSessionType::kTicket && (SSL_get_options(ssl) & SSL_OP_NO_TICKET)) || + // Don't offer sessions and PAKEs at the same time. We do not currently + // support resumption with PAKEs. (Offering both together would need + // more logic to conditionally send the key_share extension.) + hs->pake_prover != nullptr || !ssl_session_is_time_valid(ssl, ssl->session.get()) || SSL_is_quic(ssl) != int{ssl->session->is_quic} || ssl->s3->initial_handshake_complete) { @@ -419,7 +433,7 @@ static enum ssl_hs_wait_t do_start_connect(SSL_HANDSHAKE *hs) { if (!ssl_setup_key_shares(hs, /*override_group_id=*/0) || !ssl_setup_extension_permutation(hs) || - !ssl_encrypt_client_hello(hs, MakeConstSpan(ech_enc, ech_enc_len)) || + !ssl_encrypt_client_hello(hs, Span(ech_enc, ech_enc_len)) || !ssl_add_client_hello(hs)) { return ssl_hs_error; } @@ -642,6 +656,14 @@ static enum ssl_hs_wait_t do_read_server_hello(SSL_HANDSHAKE *hs) { return ssl_hs_ok; } + // If this client is configured to use a PAKE, then the server must support + // TLS 1.3. + if (hs->pake_prover) { + OPENSSL_PUT_ERROR(SSL, SSL_R_UNSUPPORTED_PROTOCOL); + ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_PROTOCOL_VERSION); + return ssl_hs_error; + } + // Clear some TLS 1.3 state that no longer needs to be retained. hs->key_shares[0].reset(); hs->key_shares[1].reset(); @@ -666,8 +688,7 @@ static enum ssl_hs_wait_t do_read_server_hello(SSL_HANDSHAKE *hs) { sizeof(kJDK11DowngradeRandom) == sizeof(kTLS13DowngradeRandom), "downgrade signals have different size"); auto suffix = - MakeConstSpan(ssl->s3->server_random, sizeof(ssl->s3->server_random)) - .subspan(SSL3_RANDOM_SIZE - sizeof(kTLS13DowngradeRandom)); + Span(ssl->s3->server_random).last(sizeof(kTLS13DowngradeRandom)); if (suffix == kTLS12DowngradeRandom || suffix == kTLS13DowngradeRandom || suffix == kJDK11DowngradeRandom) { OPENSSL_PUT_ERROR(SSL, SSL_R_TLS13_DOWNGRADE); @@ -1303,6 +1324,7 @@ static enum ssl_hs_wait_t do_send_client_certificate(SSL_HANDSHAKE *hs) { } if (hs->credential == nullptr) { // The error from the last attempt is in the error queue. + assert(ERR_peek_error() != 0); ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE); return ssl_hs_error; } @@ -1473,8 +1495,7 @@ static enum ssl_hs_wait_t do_send_client_key_exchange(SSL_HANDSHAKE *hs) { } hs->new_session->secret.ResizeForOverwrite(SSL3_MASTER_SECRET_SIZE); - if (!tls1_generate_master_secret(hs, MakeSpan(hs->new_session->secret), - pms)) { + if (!tls1_generate_master_secret(hs, Span(hs->new_session->secret), pms)) { return ssl_hs_error; } diff --git a/naiveproxy/src/third_party/boringssl/src/ssl/handshake_server.cc b/naiveproxy/src/third_party/boringssl/src/ssl/handshake_server.cc index f0adbbc822..e532cf3e09 100644 --- a/naiveproxy/src/third_party/boringssl/src/ssl/handshake_server.cc +++ b/naiveproxy/src/third_party/boringssl/src/ssl/handshake_server.cc @@ -1,13 +1,18 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. - * Copyright 2005 Nokia. All rights reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. +// Copyright 2005 Nokia. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include @@ -91,7 +96,7 @@ static bool negotiate_version(SSL_HANDSHAKE *hs, uint8_t *out_alert, } else if (client_hello->version <= DTLS1_VERSION) { versions_len = 2; } - versions = MakeConstSpan(kDTLSVersions).last(versions_len); + versions = Span(kDTLSVersions).last(versions_len); } else { if (client_hello->version >= TLS1_2_VERSION) { versions_len = 6; @@ -100,7 +105,7 @@ static bool negotiate_version(SSL_HANDSHAKE *hs, uint8_t *out_alert, } else if (client_hello->version >= TLS1_VERSION) { versions_len = 2; } - versions = MakeConstSpan(kTLSVersions).last(versions_len); + versions = Span(kTLSVersions).last(versions_len); } } @@ -752,6 +757,7 @@ static enum ssl_hs_wait_t do_select_parameters(SSL_HANDSHAKE *hs) { } if (!params.ok()) { // The error from the last attempt is in the error queue. + assert(ERR_peek_error() != 0); ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE); return ssl_hs_error; } @@ -761,7 +767,7 @@ static enum ssl_hs_wait_t do_select_parameters(SSL_HANDSHAKE *hs) { // |ssl_client_hello_init| checks that |client_hello.session_id| is not too // large. hs->session_id.CopyFrom( - MakeConstSpan(client_hello.session_id, client_hello.session_id_len)); + Span(client_hello.session_id, client_hello.session_id_len)); // Determine whether we are doing session resumption. UniquePtr session; @@ -1042,7 +1048,7 @@ static enum ssl_hs_wait_t do_send_server_certificate(SSL_HANDSHAKE *hs) { hints->ecdhe_group_id == hs->new_session->group_id && !hints->ecdhe_public_key.empty() && !hints->ecdhe_private_key.empty()) { - CBS cbs = MakeConstSpan(hints->ecdhe_private_key); + CBS cbs = CBS(hints->ecdhe_private_key); hint_ok = hs->key_shares[0]->DeserializePrivateKey(&cbs); } if (hint_ok) { @@ -1060,7 +1066,7 @@ static enum ssl_hs_wait_t do_send_server_certificate(SSL_HANDSHAKE *hs) { if (hints && hs->hints_requested) { bssl::ScopedCBB private_key_cbb; if (!hints->ecdhe_public_key.CopyFrom( - MakeConstSpan(CBB_data(&child), CBB_len(&child))) || + Span(CBB_data(&child), CBB_len(&child))) || !CBB_init(private_key_cbb.get(), 32) || !hs->key_shares[0]->SerializePrivateKey(private_key_cbb.get()) || !CBBFinishArray(private_key_cbb.get(), @@ -1470,7 +1476,7 @@ static enum ssl_hs_wait_t do_read_client_key_exchange(SSL_HANDSHAKE *hs) { // Compute the master secret. hs->new_session->secret.ResizeForOverwrite(SSL3_MASTER_SECRET_SIZE); - if (!tls1_generate_master_secret(hs, MakeSpan(hs->new_session->secret), + if (!tls1_generate_master_secret(hs, Span(hs->new_session->secret), premaster_secret)) { return ssl_hs_error; } diff --git a/naiveproxy/src/third_party/boringssl/src/ssl/internal.h b/naiveproxy/src/third_party/boringssl/src/ssl/internal.h index 92e4388f78..6268bf3b65 100644 --- a/naiveproxy/src/third_party/boringssl/src/ssl/internal.h +++ b/naiveproxy/src/third_party/boringssl/src/ssl/internal.h @@ -1,13 +1,18 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. - * Copyright 2005 Nokia. All rights reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. +// Copyright 2005 Nokia. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_SSL_INTERNAL_H #define OPENSSL_HEADER_SSL_INTERNAL_H @@ -17,10 +22,12 @@ #include #include +#include #include #include #include #include +#include #include #include @@ -37,6 +44,7 @@ #include "../crypto/err/internal.h" #include "../crypto/internal.h" #include "../crypto/lhash/internal.h" +#include "../crypto/spake2plus/internal.h" #if defined(OPENSSL_WINDOWS) @@ -160,7 +168,7 @@ class Array { // value-constructed copies of |T|. It returns true on success and false on // error. If |T| is a primitive type like |uint8_t|, value-construction means // it will be zero-initialized. - bool Init(size_t new_size) { + [[nodiscard]] bool Init(size_t new_size) { if (!InitUninitialized(new_size)) { return false; } @@ -171,7 +179,7 @@ class Array { // InitForOverwrite behaves like |Init| but it default-constructs each element // instead. This means that, if |T| is a primitive type, the array will be // uninitialized and thus must be filled in by the caller. - bool InitForOverwrite(size_t new_size) { + [[nodiscard]] bool InitForOverwrite(size_t new_size) { if (!InitUninitialized(new_size)) { return false; } @@ -181,7 +189,7 @@ class Array { // CopyFrom replaces the array with a newly-allocated copy of |in|. It returns // true on success and false on error. - bool CopyFrom(Span in) { + [[nodiscard]] bool CopyFrom(Span in) { if (!InitUninitialized(in.size())) { return false; } @@ -272,7 +280,7 @@ class Vector { // Push adds |elem| at the end of the internal array, growing if necessary. It // returns false when allocation fails. - bool Push(T elem) { + [[nodiscard]] bool Push(T elem) { if (!MaybeGrow()) { return false; } @@ -283,7 +291,7 @@ class Vector { // CopyFrom replaces the contents of the array with a copy of |in|. It returns // true on success and false on allocation error. - bool CopyFrom(Span in) { + [[nodiscard]] bool CopyFrom(Span in) { Array copy; if (!copy.CopyFrom(in)) { return false; @@ -405,7 +413,7 @@ class InplaceVector { // TryResize resizes the vector to |new_size| and returns true, or returns // false if |new_size| is too large. Any newly-added elements are // value-initialized. - bool TryResize(size_t new_size) { + [[nodiscard]] bool TryResize(size_t new_size) { if (new_size <= size_) { Shrink(new_size); return true; @@ -421,7 +429,7 @@ class InplaceVector { // TryResizeForOverwrite behaves like |TryResize|, but newly-added elements // are default-initialized, so POD types may contain uninitialized values that // the caller is responsible for filling in. - bool TryResizeForOverwrite(size_t new_size) { + [[nodiscard]] bool TryResizeForOverwrite(size_t new_size) { if (new_size <= size_) { Shrink(new_size); return true; @@ -436,7 +444,7 @@ class InplaceVector { // TryCopyFrom sets the vector to a copy of |in| and returns true, or returns // false if |in| is too large. - bool TryCopyFrom(Span in) { + [[nodiscard]] bool TryCopyFrom(Span in) { if (in.size() > capacity()) { return false; } @@ -448,7 +456,7 @@ class InplaceVector { // TryPushBack appends |val| to the vector and returns a pointer to the // newly-inserted value, or nullptr if the vector is at capacity. - T *TryPushBack(T val) { + [[nodiscard]] T *TryPushBack(T val) { if (size() >= capacity()) { return nullptr; } @@ -554,7 +562,7 @@ template inline size_t GetAllNames(const char **out, size_t max_out, Span fixed_names, Name(T::*name), Span objects) { - auto span = bssl::MakeSpan(out, max_out); + auto span = bssl::Span(out, max_out); for (size_t i = 0; !span.empty() && i < fixed_names.size(); i++) { span[0] = fixed_names[i]; span = span.subspan(1); @@ -877,8 +885,8 @@ class SSLTranscript { bool CopyToHashContext(EVP_MD_CTX *ctx, const EVP_MD *digest) const; Span buffer() const { - return MakeConstSpan(reinterpret_cast(buffer_->data), - buffer_->length); + return Span(reinterpret_cast(buffer_->data), + buffer_->length); } // FreeBuffer releases the handshake buffer. Subsequent calls to @@ -932,7 +940,7 @@ class SSLTranscript { // as the secret and |label| as the label. |seed1| and |seed2| are concatenated // to form the seed parameter. It returns true on success and false on failure. bool tls1_prf(const EVP_MD *digest, Span out, - Span secret, Span label, + Span secret, std::string_view label, Span seed1, Span seed2); @@ -1466,11 +1474,9 @@ class SSLBuffer { bool empty() const { return size_ == 0; } size_t cap() const { return cap_; } - Span span() { return MakeSpan(data(), size()); } + Span span() { return Span(data(), size()); } - Span remaining() { - return MakeSpan(data() + size(), cap() - size()); - } + Span remaining() { return Span(data() + size(), cap() - size()); } // Clear releases the buffer. void Clear(); @@ -1655,7 +1661,7 @@ bool tls13_derive_resumption_secret(SSL_HANDSHAKE *hs); // |exporter_secret|. bool tls13_export_keying_material(SSL *ssl, Span out, Span secret, - Span label, + std::string_view label, Span context); // tls13_finished_mac calculates the MAC of the handshake transcript to verify @@ -1819,6 +1825,8 @@ bool ssl_encrypt_client_hello(SSL_HANDSHAKE *hs, Span enc); enum class SSLCredentialType { kX509, kDelegated, + kSPAKE2PlusV1Client, + kSPAKE2PlusV1Server, }; BSSL_NAMESPACE_END @@ -1913,6 +1921,27 @@ struct ssl_credential_st : public bssl::RefCounted { // OCSP response to be sent to the client, if requested. bssl::UniquePtr ocsp_response; + // SPAKE2+-specific information. + bssl::Array pake_context; + bssl::Array client_identity; + bssl::Array server_identity; + bssl::Array password_verifier_w0; + bssl::Array password_verifier_w1; // server-only + bssl::Array registration_record; // client-only + mutable std::atomic pake_limit; + + // Checks whether there are still permitted PAKE attempts remaining, without + // changing the counter. + bool HasPAKEAttempts() const; + + // Atomically decrement |pake_limit|. Return true if successful and false if + // |pake_limit| is already zero. + bool ClaimPAKEAttempt() const; + + // Atomically increment |pake_limit|. This must be paired with a + // |ClaimPAKEAttempt| call. + void RestorePAKEAttempt() const; + CRYPTO_EX_DATA ex_data; // must_match_issuer is a flag indicating that this credential should be @@ -1936,7 +1965,8 @@ BSSL_NAMESPACE_BEGIN bool ssl_get_credential_list(SSL_HANDSHAKE *hs, Array *out); // ssl_credential_matches_requested_issuers returns true if |cred| is a -// usable match for any requested issuers in |hs|. +// usable match for any requested issuers in |hs|, and false with an error +// otherwise. bool ssl_credential_matches_requested_issuers(SSL_HANDSHAKE *hs, const SSL_CREDENTIAL *cred); @@ -2062,6 +2092,14 @@ struct SSL_HANDSHAKE_HINTS { bool ignore_ticket = false; }; +struct SSLPAKEShare { + static constexpr bool kAllowUniquePtr = true; + uint16_t named_pake; + Array client_identity; + Array server_identity; + Array pake_message; +}; + struct SSL_HANDSHAKE { explicit SSL_HANDSHAKE(SSL *ssl); ~SSL_HANDSHAKE(); @@ -2392,6 +2430,18 @@ struct SSL_HANDSHAKE { // grease_seed is the entropy for GREASE values. uint8_t grease_seed[ssl_grease_last_index + 1] = {0}; + + // pake_share is the PAKE message received over the wire, if any. + UniquePtr pake_share; + + // pake_share_bytes are the bytes of the PAKEShare to send, if any. + Array pake_share_bytes; + + // pake_prover is the PAKE context for a client. + UniquePtr pake_prover; + + // pake_verifier is the PAKE context for a server. + UniquePtr pake_verifier; }; // kMaxTickets is the maximum number of tickets to send immediately after the @@ -2464,6 +2514,10 @@ bool ssl_setup_extension_permutation(SSL_HANDSHAKE *hs); // a single key share of the specified group. bool ssl_setup_key_shares(SSL_HANDSHAKE *hs, uint16_t override_group_id); +// ssl_setup_pake_shares computes the client PAKE shares and saves them in |hs|. +// It returns true on success and false on failure. +bool ssl_setup_pake_shares(SSL_HANDSHAKE *hs); + bool ssl_ext_key_share_parse_serverhello(SSL_HANDSHAKE *hs, Array *out_secret, uint8_t *out_alert, CBS *contents); @@ -2471,8 +2525,13 @@ bool ssl_ext_key_share_parse_clienthello(SSL_HANDSHAKE *hs, bool *out_found, Span *out_peer_key, uint8_t *out_alert, const SSL_CLIENT_HELLO *client_hello); +bool ssl_ext_pake_add_serverhello(SSL_HANDSHAKE *hs, CBB *out); bool ssl_ext_key_share_add_serverhello(SSL_HANDSHAKE *hs, CBB *out); +bool ssl_ext_pake_parse_serverhello(SSL_HANDSHAKE *hs, + Array *out_secret, + uint8_t *out_alert, CBS *contents); + bool ssl_ext_pre_shared_key_parse_serverhello(SSL_HANDSHAKE *hs, uint8_t *out_alert, CBS *contents); @@ -3241,9 +3300,9 @@ struct hm_header_st { struct DTLSIncomingMessage { static constexpr bool kAllowUniquePtr = true; - Span msg() { return MakeSpan(data).subspan(DTLS1_HM_HEADER_LENGTH); } + Span msg() { return Span(data).subspan(DTLS1_HM_HEADER_LENGTH); } Span msg() const { - return MakeSpan(data).subspan(DTLS1_HM_HEADER_LENGTH); + return Span(data).subspan(DTLS1_HM_HEADER_LENGTH); } size_t msg_len() const { return msg().size(); } diff --git a/naiveproxy/src/third_party/boringssl/src/ssl/s3_both.cc b/naiveproxy/src/third_party/boringssl/src/ssl/s3_both.cc index 7909c01816..a37a06f2a7 100644 --- a/naiveproxy/src/third_party/boringssl/src/ssl/s3_both.cc +++ b/naiveproxy/src/third_party/boringssl/src/ssl/s3_both.cc @@ -1,12 +1,17 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include @@ -144,9 +149,8 @@ bool tls_flush_pending_hs_data(SSL *ssl) { } UniquePtr pending_hs_data = std::move(ssl->s3->pending_hs_data); - auto data = - MakeConstSpan(reinterpret_cast(pending_hs_data->data), - pending_hs_data->length); + auto data = Span(reinterpret_cast(pending_hs_data->data), + pending_hs_data->length); if (SSL_is_quic(ssl)) { if ((ssl->s3->hs == nullptr || !ssl->s3->hs->hints_requested) && !ssl->quic_method->add_handshake_data(ssl, ssl->s3->quic_write_level, @@ -469,16 +473,16 @@ ssl_open_record_t tls_open_handshake(SSL *ssl, size_t *out_consumed, // Some dedicated error codes for protocol mixups should the application // wish to interpret them differently. (These do not overlap with // ClientHello or V2ClientHello.) - const char *str = reinterpret_cast(in.data()); - if (strncmp("GET ", str, 4) == 0 || // - strncmp("POST ", str, 5) == 0 || // - strncmp("HEAD ", str, 5) == 0 || // - strncmp("PUT ", str, 4) == 0) { + auto str = bssl::BytesAsStringView(in); + if (str.substr(0, 4) == "GET " || // + str.substr(0, 5) == "POST " || // + str.substr(0, 5) == "HEAD " || // + str.substr(0, 4) == "PUT ") { OPENSSL_PUT_ERROR(SSL, SSL_R_HTTP_REQUEST); *out_alert = 0; return ssl_open_record_error; } - if (strncmp("CONNE", str, 5) == 0) { + if (str.substr(0, 5) == "CONNE") { OPENSSL_PUT_ERROR(SSL, SSL_R_HTTPS_PROXY_REQUEST); *out_alert = 0; return ssl_open_record_error; diff --git a/naiveproxy/src/third_party/boringssl/src/ssl/s3_lib.cc b/naiveproxy/src/third_party/boringssl/src/ssl/s3_lib.cc index e77ee3f68c..bae2e078cf 100644 --- a/naiveproxy/src/third_party/boringssl/src/ssl/s3_lib.cc +++ b/naiveproxy/src/third_party/boringssl/src/ssl/s3_lib.cc @@ -1,13 +1,18 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. - * Copyright 2005 Nokia. All rights reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. +// Copyright 2005 Nokia. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/ssl/s3_pkt.cc b/naiveproxy/src/third_party/boringssl/src/ssl/s3_pkt.cc index 930a81636a..0f9c93fbc9 100644 --- a/naiveproxy/src/third_party/boringssl/src/ssl/s3_pkt.cc +++ b/naiveproxy/src/third_party/boringssl/src/ssl/s3_pkt.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include @@ -163,9 +168,9 @@ static int do_tls_write(SSL *ssl, size_t *out_bytes_written, uint8_t type, // NewSessionTicket. Span pending_flight; if (ssl->s3->pending_flight != nullptr) { - pending_flight = MakeConstSpan( - reinterpret_cast(ssl->s3->pending_flight->data), - ssl->s3->pending_flight->length); + pending_flight = + Span(reinterpret_cast(ssl->s3->pending_flight->data), + ssl->s3->pending_flight->length); pending_flight = pending_flight.subspan(ssl->s3->pending_flight_offset); } diff --git a/naiveproxy/src/third_party/boringssl/src/ssl/ssl_aead_ctx.cc b/naiveproxy/src/third_party/boringssl/src/ssl/ssl_aead_ctx.cc index a7873e3550..584fa849f4 100644 --- a/naiveproxy/src/third_party/boringssl/src/ssl/ssl_aead_ctx.cc +++ b/naiveproxy/src/third_party/boringssl/src/ssl/ssl_aead_ctx.cc @@ -1,16 +1,16 @@ -/* Copyright 2015 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2015 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include @@ -109,8 +109,8 @@ UniquePtr SSLAEADContext::Create( OPENSSL_memcpy(merged_key + mac_key.size(), enc_key.data(), enc_key.size()); OPENSSL_memcpy(merged_key + mac_key.size() + enc_key.size(), fixed_iv.data(), fixed_iv.size()); - enc_key = MakeConstSpan(merged_key, - enc_key.size() + mac_key.size() + fixed_iv.size()); + enc_key = + Span(merged_key, enc_key.size() + mac_key.size() + fixed_iv.size()); // The |EVP_AEAD|'s per-encryption nonce, if any, is actually the CBC IV. It // must be generated randomly and prepended to the record. @@ -226,7 +226,7 @@ Span SSLAEADContext::GetAdditionalData( storage[len++] = static_cast((plaintext_len >> 8)); storage[len++] = static_cast(plaintext_len); } - return MakeConstSpan(storage, len); + return Span(storage, len); } bool SSLAEADContext::Open(Span *out, uint8_t type, diff --git a/naiveproxy/src/third_party/boringssl/src/ssl/ssl_asn1.cc b/naiveproxy/src/third_party/boringssl/src/ssl/ssl_asn1.cc index 48c371cad4..f140f5b55b 100644 --- a/naiveproxy/src/third_party/boringssl/src/ssl/ssl_asn1.cc +++ b/naiveproxy/src/third_party/boringssl/src/ssl/ssl_asn1.cc @@ -1,12 +1,17 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * Copyright 2005 Nokia. All rights reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// Copyright 2005 Nokia. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/ssl/ssl_buffer.cc b/naiveproxy/src/third_party/boringssl/src/ssl/ssl_buffer.cc index 76c74e2941..2cdcbc3461 100644 --- a/naiveproxy/src/third_party/boringssl/src/ssl/ssl_buffer.cc +++ b/naiveproxy/src/third_party/boringssl/src/ssl/ssl_buffer.cc @@ -1,16 +1,16 @@ -/* Copyright 2015 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2015 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/ssl/ssl_c_test.c b/naiveproxy/src/third_party/boringssl/src/ssl/ssl_c_test.c index 9ed0a86177..b22e4829b0 100644 --- a/naiveproxy/src/third_party/boringssl/src/ssl/ssl_c_test.c +++ b/naiveproxy/src/third_party/boringssl/src/ssl/ssl_c_test.c @@ -1,16 +1,16 @@ -/* Copyright 2019 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2019 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/ssl/ssl_cert.cc b/naiveproxy/src/third_party/boringssl/src/ssl/ssl_cert.cc index 9c1ca8ffec..0b9ec48a9d 100644 --- a/naiveproxy/src/third_party/boringssl/src/ssl/ssl_cert.cc +++ b/naiveproxy/src/third_party/boringssl/src/ssl/ssl_cert.cc @@ -1,12 +1,17 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/ssl/ssl_cipher.cc b/naiveproxy/src/third_party/boringssl/src/ssl/ssl_cipher.cc index 5007dfe557..724a0f2722 100644 --- a/naiveproxy/src/third_party/boringssl/src/ssl/ssl_cipher.cc +++ b/naiveproxy/src/third_party/boringssl/src/ssl/ssl_cipher.cc @@ -1,13 +1,18 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. - * Copyright 2005 Nokia. All rights reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. +// Copyright 2005 Nokia. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include @@ -334,9 +339,7 @@ static constexpr SSL_CIPHER kCiphers[] = { }; -Span AllCiphers() { - return MakeConstSpan(kCiphers, OPENSSL_ARRAY_SIZE(kCiphers)); -} +Span AllCiphers() { return kCiphers; } static constexpr size_t NumTLS13Ciphers() { size_t num = 0; @@ -1567,11 +1570,11 @@ int SSL_COMP_get_id(const SSL_COMP *comp) { return comp->id; } void SSL_COMP_free_compression_methods(void) {} size_t SSL_get_all_cipher_names(const char **out, size_t max_out) { - return GetAllNames(out, max_out, MakeConstSpan(&kUnknownCipher, 1), - &SSL_CIPHER::name, MakeConstSpan(kCiphers)); + return GetAllNames(out, max_out, Span(&kUnknownCipher, 1), &SSL_CIPHER::name, + Span(kCiphers)); } size_t SSL_get_all_standard_cipher_names(const char **out, size_t max_out) { return GetAllNames(out, max_out, Span(), - &SSL_CIPHER::standard_name, MakeConstSpan(kCiphers)); + &SSL_CIPHER::standard_name, Span(kCiphers)); } diff --git a/naiveproxy/src/third_party/boringssl/src/ssl/ssl_credential.cc b/naiveproxy/src/third_party/boringssl/src/ssl/ssl_credential.cc index 361dcd1659..d50431f502 100644 --- a/naiveproxy/src/third_party/boringssl/src/ssl/ssl_credential.cc +++ b/naiveproxy/src/third_party/boringssl/src/ssl/ssl_credential.cc @@ -1,16 +1,16 @@ -/* Copyright 2024 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2024 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include @@ -19,6 +19,7 @@ #include #include "../crypto/internal.h" +#include "../crypto/spake2plus/internal.h" #include "internal.h" @@ -62,27 +63,26 @@ bool ssl_get_credential_list(SSL_HANDSHAKE *hs, Array *out) { bool ssl_credential_matches_requested_issuers(SSL_HANDSHAKE *hs, const SSL_CREDENTIAL *cred) { - if (cred->must_match_issuer) { - // If we have names sent by the CA extension, and this - // credential matches it, it is good. - if (hs->ca_names != nullptr) { - for (const CRYPTO_BUFFER *ca_name : hs->ca_names.get()) { - if (cred->ChainContainsIssuer(MakeConstSpan( - CRYPTO_BUFFER_data(ca_name), CRYPTO_BUFFER_len(ca_name)))) { - return true; - } - } - } - // TODO(bbe): Other forms of issuer matching go here. - - // If this cred must match a requested issuer and we - // get here, we should not use it. - return false; + if (!cred->must_match_issuer) { + // This credential does not need to match a requested issuer, so + // it is good to use without a match. + return true; } - // This cred does not need to match a requested issuer, so - // it is good to use without a match. - return true; + // If we have names sent by the CA extension, and this + // credential matches it, it is good. + if (hs->ca_names != nullptr) { + for (const CRYPTO_BUFFER *ca_name : hs->ca_names.get()) { + if (cred->ChainContainsIssuer( + Span(CRYPTO_BUFFER_data(ca_name), CRYPTO_BUFFER_len(ca_name)))) { + return true; + } + } + } + // TODO(bbe): Other forms of issuer matching go here. + + OPENSSL_PUT_ERROR(SSL, SSL_R_NO_MATCHING_ISSUER); + return false; } BSSL_NAMESPACE_END @@ -142,15 +142,27 @@ void ssl_credential_st::ClearCertAndKey() { } bool ssl_credential_st::UsesX509() const { - // Currently, all credential types use X.509. However, we may add other - // certificate types in the future. Add the checks in the setters now, so we - // don't forget. - return true; + switch (type) { + case SSLCredentialType::kX509: + case SSLCredentialType::kDelegated: + return true; + case SSLCredentialType::kSPAKE2PlusV1Client: + case SSLCredentialType::kSPAKE2PlusV1Server: + return false; + } + abort(); } bool ssl_credential_st::UsesPrivateKey() const { - // Currently, all credential types use private keys. However, we may add PSK - return true; + switch (type) { + case SSLCredentialType::kX509: + case SSLCredentialType::kDelegated: + return true; + case SSLCredentialType::kSPAKE2PlusV1Client: + case SSLCredentialType::kSPAKE2PlusV1Server: + return false; + } + abort(); } bool ssl_credential_st::IsComplete() const { @@ -259,6 +271,30 @@ bool ssl_credential_st::ChainContainsIssuer( return false; } +bool ssl_credential_st::HasPAKEAttempts() const { + return pake_limit.load() != 0; +} + +bool ssl_credential_st::ClaimPAKEAttempt() const { + uint32_t current = pake_limit.load(std::memory_order_relaxed); + for (;;) { + if (current == 0) { + return false; + } + if (pake_limit.compare_exchange_weak(current, current - 1)) { + break; + } + } + + return true; +} + +void ssl_credential_st::RestorePAKEAttempt() const { + // This should not overflow because it will only be paired with + // ClaimPAKEAttempt. + pake_limit.fetch_add(1); +} + bool ssl_credential_st::AppendIntermediateCert(UniquePtr cert) { if (!UsesX509()) { OPENSSL_PUT_ERROR(SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); @@ -382,7 +418,7 @@ int SSL_CREDENTIAL_set1_delegated_credential(SSL_CREDENTIAL *cred, return 0; } - if (!cred->sigalgs.CopyFrom(MakeConstSpan(&dc_cert_verify_algorithm, 1))) { + if (!cred->sigalgs.CopyFrom(Span(&dc_cert_verify_algorithm, 1))) { return 0; } @@ -426,6 +462,97 @@ int SSL_CREDENTIAL_set1_signed_cert_timestamp_list(SSL_CREDENTIAL *cred, return 1; } +int SSL_spake2plusv1_register(uint8_t out_w0[32], uint8_t out_w1[32], + uint8_t out_registration_record[65], + const uint8_t *password, size_t password_len, + const uint8_t *client_identity, + size_t client_identity_len, + const uint8_t *server_identity, + size_t server_identity_len) { + return spake2plus::Register( + Span(out_w0, 32), Span(out_w1, 32), Span(out_registration_record, 65), + Span(password, password_len), Span(client_identity, client_identity_len), + Span(server_identity, server_identity_len)); +} + +static UniquePtr ssl_credential_new_spake2plusv1( + SSLCredentialType type, Span context, + Span client_identity, Span server_identity, + uint32_t limit) { + assert(type == SSLCredentialType::kSPAKE2PlusV1Client || + type == SSLCredentialType::kSPAKE2PlusV1Server); + auto cred = MakeUnique(type); + if (cred == nullptr) { + return nullptr; + } + + if (!cred->pake_context.CopyFrom(context) || + !cred->client_identity.CopyFrom(client_identity) || + !cred->server_identity.CopyFrom(server_identity)) { + return nullptr; + } + + cred->pake_limit.store(limit); + return cred; +} + +SSL_CREDENTIAL *SSL_CREDENTIAL_new_spake2plusv1_client( + const uint8_t *context, size_t context_len, const uint8_t *client_identity, + size_t client_identity_len, const uint8_t *server_identity, + size_t server_identity_len, uint32_t error_limit, const uint8_t *w0, + size_t w0_len, const uint8_t *w1, size_t w1_len) { + if (w0_len != spake2plus::kVerifierSize || + w1_len != spake2plus::kVerifierSize || + (context == nullptr && context_len != 0)) { + OPENSSL_PUT_ERROR(SSL, SSL_R_INVALID_SPAKE2PLUSV1_VALUE); + return nullptr; + } + + UniquePtr cred = ssl_credential_new_spake2plusv1( + SSLCredentialType::kSPAKE2PlusV1Client, Span(context, context_len), + Span(client_identity, client_identity_len), + Span(server_identity, server_identity_len), error_limit); + if (!cred) { + return nullptr; + } + + if (!cred->password_verifier_w0.CopyFrom(Span(w0, w0_len)) || + !cred->password_verifier_w1.CopyFrom(Span(w1, w1_len))) { + return nullptr; + } + + return cred.release(); +} + +SSL_CREDENTIAL *SSL_CREDENTIAL_new_spake2plusv1_server( + const uint8_t *context, size_t context_len, const uint8_t *client_identity, + size_t client_identity_len, const uint8_t *server_identity, + size_t server_identity_len, uint32_t rate_limit, const uint8_t *w0, + size_t w0_len, const uint8_t *registration_record, + size_t registration_record_len) { + if (w0_len != spake2plus::kVerifierSize || + registration_record_len != spake2plus::kRegistrationRecordSize || + (context == nullptr && context_len != 0)) { + return nullptr; + } + + UniquePtr cred = ssl_credential_new_spake2plusv1( + SSLCredentialType::kSPAKE2PlusV1Server, Span(context, context_len), + Span(client_identity, client_identity_len), + Span(server_identity, server_identity_len), rate_limit); + if (!cred) { + return nullptr; + } + + if (!cred->password_verifier_w0.CopyFrom(Span(w0, w0_len)) || + !cred->registration_record.CopyFrom( + Span(registration_record, registration_record_len))) { + return nullptr; + } + + return cred.release(); +} + int SSL_CTX_add1_credential(SSL_CTX *ctx, SSL_CREDENTIAL *cred) { if (!cred->IsComplete()) { OPENSSL_PUT_ERROR(SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); diff --git a/naiveproxy/src/third_party/boringssl/src/ssl/ssl_file.cc b/naiveproxy/src/third_party/boringssl/src/ssl/ssl_file.cc index 0fb5aba355..0b55a9d950 100644 --- a/naiveproxy/src/third_party/boringssl/src/ssl/ssl_file.cc +++ b/naiveproxy/src/third_party/boringssl/src/ssl/ssl_file.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/ssl/ssl_key_share.cc b/naiveproxy/src/third_party/boringssl/src/ssl/ssl_key_share.cc index f836c23239..e60016c821 100644 --- a/naiveproxy/src/third_party/boringssl/src/ssl/ssl_key_share.cc +++ b/naiveproxy/src/third_party/boringssl/src/ssl/ssl_key_share.cc @@ -1,16 +1,16 @@ -/* Copyright 2015 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2015 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include @@ -388,9 +388,7 @@ constexpr NamedGroup kNamedGroups[] = { } // namespace -Span NamedGroups() { - return MakeConstSpan(kNamedGroups, OPENSSL_ARRAY_SIZE(kNamedGroups)); -} +Span NamedGroups() { return kNamedGroups; } UniquePtr SSLKeyShare::Create(uint16_t group_id) { switch (group_id) { @@ -464,5 +462,5 @@ const char *SSL_get_group_name(uint16_t group_id) { size_t SSL_get_all_group_names(const char **out, size_t max_out) { return GetAllNames(out, max_out, Span(), &NamedGroup::name, - MakeConstSpan(kNamedGroups)); + Span(kNamedGroups)); } diff --git a/naiveproxy/src/third_party/boringssl/src/ssl/ssl_lib.cc b/naiveproxy/src/third_party/boringssl/src/ssl/ssl_lib.cc index 56fafde23b..98bd21eed9 100644 --- a/naiveproxy/src/third_party/boringssl/src/ssl/ssl_lib.cc +++ b/naiveproxy/src/third_party/boringssl/src/ssl/ssl_lib.cc @@ -1,13 +1,18 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. - * Copyright 2005 Nokia. All rights reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. +// Copyright 2005 Nokia. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include @@ -178,10 +183,10 @@ bool ssl_log_secret(const SSL *ssl, const char *label, ScopedCBB cbb; Array line; + auto label_bytes = bssl::StringAsBytes(label); if (!CBB_init(cbb.get(), strlen(label) + 1 + SSL3_RANDOM_SIZE * 2 + 1 + secret.size() * 2 + 1) || - !CBB_add_bytes(cbb.get(), reinterpret_cast(label), - strlen(label)) || + !CBB_add_bytes(cbb.get(), label_bytes.data(), label_bytes.size()) || !CBB_add_u8(cbb.get(), ' ') || !cbb_add_hex_consttime(cbb.get(), ssl->s3->client_random) || !CBB_add_u8(cbb.get(), ' ') || @@ -377,7 +382,7 @@ static uint32_t ssl_session_hash(const SSL_SESSION *sess) { } static int ssl_session_cmp(const SSL_SESSION *a, const SSL_SESSION *b) { - return MakeConstSpan(a->session_id) == b->session_id ? 0 : 1; + return Span(a->session_id) == b->session_id ? 0 : 1; } ssl_ctx_st::ssl_ctx_st(const SSL_METHOD *ssl_method) @@ -699,7 +704,7 @@ int SSL_provide_quic_data(SSL *ssl, enum ssl_encryption_level_t level, return 0; } - return tls_append_handshake_data(ssl, MakeConstSpan(data, len)); + return tls_append_handshake_data(ssl, Span(data, len)); } int SSL_do_handshake(SSL *ssl) { @@ -963,8 +968,7 @@ int SSL_write(SSL *ssl, const void *buf, int num) { } ret = ssl->method->write_app_data( ssl, &needs_handshake, &bytes_written, - MakeConstSpan(static_cast(buf), - static_cast(num))); + Span(static_cast(buf), static_cast(num))); } while (needs_handshake); return ret <= 0 ? ret : static_cast(bytes_written); } @@ -1075,8 +1079,8 @@ int SSL_send_fatal_alert(SSL *ssl, uint8_t alert) { int SSL_set_quic_transport_params(SSL *ssl, const uint8_t *params, size_t params_len) { - return ssl->config && ssl->config->quic_transport_params.CopyFrom( - MakeConstSpan(params, params_len)); + return ssl->config && + ssl->config->quic_transport_params.CopyFrom(Span(params, params_len)); } void SSL_get_peer_quic_transport_params(const SSL *ssl, @@ -1089,7 +1093,7 @@ void SSL_get_peer_quic_transport_params(const SSL *ssl, int SSL_set_quic_early_data_context(SSL *ssl, const uint8_t *context, size_t context_len) { return ssl->config && ssl->config->quic_early_data_context.CopyFrom( - MakeConstSpan(context, context_len)); + Span(context, context_len)); } void SSL_CTX_set_early_data_enabled(SSL_CTX *ctx, int enabled) { @@ -1393,7 +1397,7 @@ int SSL_get_tls_unique(const SSL *ssl, uint8_t *out, size_t *out_len, static int set_session_id_context(CERT *cert, const uint8_t *sid_ctx, size_t sid_ctx_len) { - if (!cert->sid_ctx.TryCopyFrom(MakeConstSpan(sid_ctx, sid_ctx_len))) { + if (!cert->sid_ctx.TryCopyFrom(Span(sid_ctx, sid_ctx_len))) { OPENSSL_PUT_ERROR(SSL, SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG); return 0; } @@ -1814,7 +1818,7 @@ static bool check_group_ids(Span group_ids) { int SSL_CTX_set1_group_ids(SSL_CTX *ctx, const uint16_t *group_ids, size_t num_group_ids) { - auto span = MakeConstSpan(group_ids, num_group_ids); + auto span = Span(group_ids, num_group_ids); return check_group_ids(span) && ctx->supported_group_list.CopyFrom(span); } @@ -1823,7 +1827,7 @@ int SSL_set1_group_ids(SSL *ssl, const uint16_t *group_ids, if (!ssl->config) { return 0; } - auto span = MakeConstSpan(group_ids, num_group_ids); + auto span = Span(group_ids, num_group_ids); return check_group_ids(span) && ssl->config->supported_group_list.CopyFrom(span); } @@ -1848,7 +1852,7 @@ static bool ssl_nids_to_group_ids(Array *out_group_ids, int SSL_CTX_set1_groups(SSL_CTX *ctx, const int *groups, size_t num_groups) { return ssl_nids_to_group_ids(&ctx->supported_group_list, - MakeConstSpan(groups, num_groups)); + Span(groups, num_groups)); } int SSL_set1_groups(SSL *ssl, const int *groups, size_t num_groups) { @@ -1856,7 +1860,7 @@ int SSL_set1_groups(SSL *ssl, const int *groups, size_t num_groups) { return 0; } return ssl_nids_to_group_ids(&ssl->config->supported_group_list, - MakeConstSpan(groups, num_groups)); + Span(groups, num_groups)); } static bool ssl_str_to_group_ids(Array *out_group_ids, @@ -2129,8 +2133,8 @@ int SSL_select_next_proto(uint8_t **out, uint8_t *out_len, const uint8_t *peer, // Both |peer| and |supported| must be valid protocol lists, but |peer| may be // empty in NPN. - auto peer_span = MakeConstSpan(peer, peer_len); - auto supported_span = MakeConstSpan(supported, supported_len); + auto peer_span = Span(peer, peer_len); + auto supported_span = Span(supported, supported_len); if ((!peer_span.empty() && !ssl_is_valid_alpn_list(peer_span)) || !ssl_is_valid_alpn_list(supported_span)) { return OPENSSL_NPN_NO_OVERLAP; @@ -2143,7 +2147,7 @@ int SSL_select_next_proto(uint8_t **out, uint8_t *out_len, const uint8_t *peer, return OPENSSL_NPN_NO_OVERLAP; } - if (ssl_alpn_list_contains_protocol(MakeConstSpan(supported, supported_len), + if (ssl_alpn_list_contains_protocol(Span(supported, supported_len), proto)) { // This function is not const-correct for compatibility with existing // callers. @@ -2198,7 +2202,7 @@ void SSL_CTX_set_next_proto_select_cb(SSL_CTX *ctx, int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const uint8_t *protos, size_t protos_len) { // Note this function's return value is backwards. - auto span = MakeConstSpan(protos, protos_len); + auto span = Span(protos, protos_len); if (!span.empty() && !ssl_is_valid_alpn_list(span)) { OPENSSL_PUT_ERROR(SSL, SSL_R_INVALID_ALPN_PROTOCOL_LIST); return 1; @@ -2211,7 +2215,7 @@ int SSL_set_alpn_protos(SSL *ssl, const uint8_t *protos, size_t protos_len) { if (!ssl->config) { return 1; } - auto span = MakeConstSpan(protos, protos_len); + auto span = Span(protos, protos_len); if (!span.empty() && !ssl_is_valid_alpn_list(span)) { OPENSSL_PUT_ERROR(SSL, SSL_R_INVALID_ALPN_PROTOCOL_LIST); return 1; @@ -2253,8 +2257,8 @@ int SSL_add_application_settings(SSL *ssl, const uint8_t *proto, return 0; } ALPSConfig config; - if (!config.protocol.CopyFrom(MakeConstSpan(proto, proto_len)) || - !config.settings.CopyFrom(MakeConstSpan(settings, settings_len)) || + if (!config.protocol.CopyFrom(Span(proto, proto_len)) || + !config.settings.CopyFrom(Span(settings, settings_len)) || !ssl->config->alps_configs.Push(std::move(config))) { return 0; } diff --git a/naiveproxy/src/third_party/boringssl/src/ssl/ssl_privkey.cc b/naiveproxy/src/third_party/boringssl/src/ssl/ssl_privkey.cc index 8458d34cd3..6d46f886b1 100644 --- a/naiveproxy/src/third_party/boringssl/src/ssl/ssl_privkey.cc +++ b/naiveproxy/src/third_party/boringssl/src/ssl/ssl_privkey.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include @@ -208,9 +213,9 @@ enum ssl_private_key_result_t ssl_private_key_sign( // Replay the signature from handshake hints if available. if (hints && !hs->hints_requested && // sigalg == hints->signature_algorithm && // - in == hints->signature_input && - MakeConstSpan(spki) == hints->signature_spki && - !hints->signature.empty() && // + in == hints->signature_input && // + Span(spki) == hints->signature_spki && // + !hints->signature.empty() && // hints->signature.size() <= max_out) { // Signature algorithm and input both match. Reuse the signature from hints. *out_len = hints->signature.size(); @@ -251,7 +256,7 @@ enum ssl_private_key_result_t ssl_private_key_sign( hints->signature_algorithm = sigalg; hints->signature_spki = std::move(spki); if (!hints->signature_input.CopyFrom(in) || - !hints->signature.CopyFrom(MakeConstSpan(out, *out_len))) { + !hints->signature.CopyFrom(Span(out, *out_len))) { return ssl_private_key_failure; } } @@ -491,9 +496,9 @@ const char *SSL_get_signature_algorithm_name(uint16_t sigalg, size_t SSL_get_all_signature_algorithm_names(const char **out, size_t max_out) { const char *kPredefinedNames[] = {"ecdsa_sha256", "ecdsa_sha384", "ecdsa_sha512"}; - return GetAllNames(out, max_out, MakeConstSpan(kPredefinedNames), + return GetAllNames(out, max_out, kPredefinedNames, &SignatureAlgorithmName::name, - MakeConstSpan(kSignatureAlgorithmNames)); + Span(kSignatureAlgorithmNames)); } int SSL_get_signature_algorithm_key_type(uint16_t sigalg) { @@ -603,7 +608,7 @@ int SSL_CREDENTIAL_set1_signing_algorithm_prefs(SSL_CREDENTIAL *cred, return 0; } - return set_sigalg_prefs(&cred->sigalgs, MakeConstSpan(prefs, num_prefs)); + return set_sigalg_prefs(&cred->sigalgs, Span(prefs, num_prefs)); } int SSL_CTX_set_signing_algorithm_prefs(SSL_CTX *ctx, const uint16_t *prefs, @@ -899,8 +904,7 @@ int SSL_set1_sigalgs_list(SSL *ssl, const char *str) { int SSL_CTX_set_verify_algorithm_prefs(SSL_CTX *ctx, const uint16_t *prefs, size_t num_prefs) { - return set_sigalg_prefs(&ctx->verify_sigalgs, - MakeConstSpan(prefs, num_prefs)); + return set_sigalg_prefs(&ctx->verify_sigalgs, Span(prefs, num_prefs)); } int SSL_set_verify_algorithm_prefs(SSL *ssl, const uint16_t *prefs, @@ -910,6 +914,5 @@ int SSL_set_verify_algorithm_prefs(SSL *ssl, const uint16_t *prefs, return 0; } - return set_sigalg_prefs(&ssl->config->verify_sigalgs, - MakeConstSpan(prefs, num_prefs)); + return set_sigalg_prefs(&ssl->config->verify_sigalgs, Span(prefs, num_prefs)); } diff --git a/naiveproxy/src/third_party/boringssl/src/ssl/ssl_session.cc b/naiveproxy/src/third_party/boringssl/src/ssl/ssl_session.cc index 52ce2d1e47..6a7fd5b362 100644 --- a/naiveproxy/src/third_party/boringssl/src/ssl/ssl_session.cc +++ b/naiveproxy/src/third_party/boringssl/src/ssl/ssl_session.cc @@ -1,12 +1,17 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * Copyright 2005 Nokia. All rights reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// Copyright 2005 Nokia. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include @@ -457,7 +462,7 @@ SSLSessionType ssl_session_get_type(const SSL_SESSION *session) { bool ssl_session_is_context_valid(const SSL_HANDSHAKE *hs, const SSL_SESSION *session) { return session != nullptr && - MakeConstSpan(session->sid_ctx) == hs->config->cert->sid_ctx; + Span(session->sid_ctx) == hs->config->cert->sid_ctx; } bool ssl_session_is_time_valid(const SSL *ssl, const SSL_SESSION *session) { @@ -590,9 +595,9 @@ enum ssl_hs_wait_t ssl_get_prev_session(SSL_HANDSHAKE *hs, ssl_client_hello_get_extension(client_hello, &ticket, TLSEXT_TYPE_session_ticket); if (tickets_supported && CBS_len(&ticket) != 0) { - switch (ssl_process_ticket(hs, &session, &renew_ticket, ticket, - MakeConstSpan(client_hello->session_id, - client_hello->session_id_len))) { + switch (ssl_process_ticket( + hs, &session, &renew_ticket, ticket, + Span(client_hello->session_id, client_hello->session_id_len))) { case ssl_ticket_aead_success: break; case ssl_ticket_aead_ignore_ticket: @@ -607,7 +612,7 @@ enum ssl_hs_wait_t ssl_get_prev_session(SSL_HANDSHAKE *hs, // The client didn't send a ticket, so the session ID is a real ID. enum ssl_hs_wait_t lookup_ret = ssl_lookup_session( hs, &session, - MakeConstSpan(client_hello->session_id, client_hello->session_id_len)); + Span(client_hello->session_id, client_hello->session_id_len)); if (lookup_ret != ssl_hs_ok) { return lookup_ret; } @@ -846,7 +851,7 @@ const uint8_t *SSL_SESSION_get_id(const SSL_SESSION *session, int SSL_SESSION_set1_id(SSL_SESSION *session, const uint8_t *sid, size_t sid_len) { - if (!session->session_id.TryCopyFrom(MakeConstSpan(sid, sid_len))) { + if (!session->session_id.TryCopyFrom(Span(sid, sid_len))) { OPENSSL_PUT_ERROR(SSL, SSL_R_SSL_SESSION_ID_TOO_LONG); return 0; } @@ -939,7 +944,7 @@ const uint8_t *SSL_SESSION_get0_id_context(const SSL_SESSION *session, int SSL_SESSION_set1_id_context(SSL_SESSION *session, const uint8_t *sid_ctx, size_t sid_ctx_len) { - if (!session->sid_ctx.TryCopyFrom(MakeConstSpan(sid_ctx, sid_ctx_len))) { + if (!session->sid_ctx.TryCopyFrom(Span(sid_ctx, sid_ctx_len))) { OPENSSL_PUT_ERROR(SSL, SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG); return 0; } @@ -969,7 +974,7 @@ void SSL_SESSION_get0_ticket(const SSL_SESSION *session, int SSL_SESSION_set_ticket(SSL_SESSION *session, const uint8_t *ticket, size_t ticket_len) { - return session->ticket.CopyFrom(MakeConstSpan(ticket, ticket_len)); + return session->ticket.CopyFrom(Span(ticket, ticket_len)); } uint32_t SSL_SESSION_get_ticket_lifetime_hint(const SSL_SESSION *session) { diff --git a/naiveproxy/src/third_party/boringssl/src/ssl/ssl_stat.cc b/naiveproxy/src/third_party/boringssl/src/ssl/ssl_stat.cc index 281c287ac2..6201df9865 100644 --- a/naiveproxy/src/third_party/boringssl/src/ssl/ssl_stat.cc +++ b/naiveproxy/src/third_party/boringssl/src/ssl/ssl_stat.cc @@ -1,12 +1,17 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * Copyright 2005 Nokia. All rights reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// Copyright 2005 Nokia. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/ssl/ssl_transcript.cc b/naiveproxy/src/third_party/boringssl/src/ssl/ssl_transcript.cc index 73675548b8..b51a566ad0 100644 --- a/naiveproxy/src/third_party/boringssl/src/ssl/ssl_transcript.cc +++ b/naiveproxy/src/third_party/boringssl/src/ssl/ssl_transcript.cc @@ -1,15 +1,22 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * Copyright 2005 Nokia. All rights reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// Copyright 2005 Nokia. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include +#include + #include #include #include @@ -125,7 +132,7 @@ bool SSLTranscript::UpdateForHelloRetryRequest() { static_cast(hash_len)}; if (!EVP_DigestInit_ex(hash_.get(), Digest(), nullptr) || !AddToBufferOrHash(header) || - !AddToBufferOrHash(MakeConstSpan(old_hash, hash_len))) { + !AddToBufferOrHash(Span(old_hash, hash_len))) { return false; } return true; @@ -197,21 +204,16 @@ bool SSLTranscript::GetHash(uint8_t *out, size_t *out_len) const { bool SSLTranscript::GetFinishedMAC(uint8_t *out, size_t *out_len, const SSL_SESSION *session, bool from_server) const { - static const char kClientLabel[] = "client finished"; - static const char kServerLabel[] = "server finished"; - auto label = from_server - ? MakeConstSpan(kServerLabel, sizeof(kServerLabel) - 1) - : MakeConstSpan(kClientLabel, sizeof(kClientLabel) - 1); - uint8_t digest[EVP_MAX_MD_SIZE]; size_t digest_len; if (!GetHash(digest, &digest_len)) { return false; } + std::string_view label = from_server ? "server finished" : "client finished"; static const size_t kFinishedLen = 12; - if (!tls1_prf(Digest(), MakeSpan(out, kFinishedLen), session->secret, label, - MakeConstSpan(digest, digest_len), {})) { + if (!tls1_prf(Digest(), Span(out, kFinishedLen), session->secret, label, + Span(digest, digest_len), {})) { return false; } diff --git a/naiveproxy/src/third_party/boringssl/src/ssl/ssl_versions.cc b/naiveproxy/src/third_party/boringssl/src/ssl/ssl_versions.cc index 0d9b0c0889..4ef86e9cb7 100644 --- a/naiveproxy/src/third_party/boringssl/src/ssl/ssl_versions.cc +++ b/naiveproxy/src/third_party/boringssl/src/ssl/ssl_versions.cc @@ -1,16 +1,16 @@ -/* Copyright 2017 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2017 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include @@ -407,8 +407,8 @@ const char *SSL_get_version(const SSL *ssl) { } size_t SSL_get_all_version_names(const char **out, size_t max_out) { - return GetAllNames(out, max_out, MakeConstSpan(&kUnknownVersion, 1), - &VersionInfo::name, MakeConstSpan(kVersionNames)); + return GetAllNames(out, max_out, Span(&kUnknownVersion, 1), + &VersionInfo::name, Span(kVersionNames)); } const char *SSL_SESSION_get_version(const SSL_SESSION *session) { diff --git a/naiveproxy/src/third_party/boringssl/src/ssl/ssl_x509.cc b/naiveproxy/src/third_party/boringssl/src/ssl/ssl_x509.cc index 9fb51eb1b6..51e4ffaea1 100644 --- a/naiveproxy/src/third_party/boringssl/src/ssl/ssl_x509.cc +++ b/naiveproxy/src/third_party/boringssl/src/ssl/ssl_x509.cc @@ -1,13 +1,18 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. - * Copyright 2005 Nokia. All rights reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved. +// Copyright 2005 Nokia. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/ssl/t1_enc.cc b/naiveproxy/src/third_party/boringssl/src/ssl/t1_enc.cc index ef4550dee7..4399db1987 100644 --- a/naiveproxy/src/third_party/boringssl/src/ssl/t1_enc.cc +++ b/naiveproxy/src/third_party/boringssl/src/ssl/t1_enc.cc @@ -1,18 +1,24 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * Copyright 2005 Nokia. All rights reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// Copyright 2005 Nokia. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include #include +#include #include #include @@ -31,7 +37,7 @@ BSSL_NAMESPACE_BEGIN bool tls1_prf(const EVP_MD *digest, Span out, - Span secret, Span label, + Span secret, std::string_view label, Span seed1, Span seed2) { return 1 == CRYPTO_tls1_prf(digest, out.data(), out.size(), secret.data(), secret.size(), label.data(), label.size(), @@ -66,14 +72,11 @@ static bool get_key_block_lengths(const SSL *ssl, size_t *out_mac_secret_len, static bool generate_key_block(const SSL *ssl, Span out, const SSL_SESSION *session) { - static const char kLabel[] = "key expansion"; - auto label = MakeConstSpan(kLabel, sizeof(kLabel) - 1); - const EVP_MD *digest = ssl_session_get_digest(session); // Note this function assumes that |session|'s key material corresponds to // |ssl->s3->client_random| and |ssl->s3->server_random|. - return tls1_prf(digest, out, session->secret, label, ssl->s3->server_random, - ssl->s3->client_random); + return tls1_prf(digest, out, session->secret, "key expansion", + ssl->s3->server_random, ssl->s3->client_random); } bool tls1_configure_aead(SSL *ssl, evp_aead_direction_t direction, @@ -90,7 +93,7 @@ bool tls1_configure_aead(SSL *ssl, evp_aead_direction_t direction, const size_t key_block_size = 2 * (mac_secret_len + key_len + iv_len); if (key_block_cache->empty()) { if (!key_block_cache->InitForOverwrite(key_block_size) || - !generate_key_block(ssl, MakeSpan(*key_block_cache), session)) { + !generate_key_block(ssl, Span(*key_block_cache), session)) { return false; } } @@ -142,25 +145,19 @@ bool tls1_change_cipher_state(SSL_HANDSHAKE *hs, bool tls1_generate_master_secret(SSL_HANDSHAKE *hs, Span out, Span premaster) { - static const char kMasterSecretLabel[] = "master secret"; - static const char kExtendedMasterSecretLabel[] = "extended master secret"; BSSL_CHECK(out.size() == SSL3_MASTER_SECRET_SIZE); const SSL *ssl = hs->ssl; if (hs->extended_master_secret) { - auto label = MakeConstSpan(kExtendedMasterSecretLabel, - sizeof(kExtendedMasterSecretLabel) - 1); uint8_t digests[EVP_MAX_MD_SIZE]; size_t digests_len; if (!hs->transcript.GetHash(digests, &digests_len) || - !tls1_prf(hs->transcript.Digest(), out, premaster, label, - MakeConstSpan(digests, digests_len), {})) { + !tls1_prf(hs->transcript.Digest(), out, premaster, + "extended master secret", Span(digests, digests_len), {})) { return false; } } else { - auto label = - MakeConstSpan(kMasterSecretLabel, sizeof(kMasterSecretLabel) - 1); - if (!tls1_prf(hs->transcript.Digest(), out, premaster, label, + if (!tls1_prf(hs->transcript.Digest(), out, premaster, "master secret", ssl->s3->client_random, ssl->s3->server_random)) { return false; } @@ -199,13 +196,15 @@ int SSL_generate_key_block(const SSL *ssl, uint8_t *out, size_t out_len) { return 0; } - return generate_key_block(ssl, MakeSpan(out, out_len), SSL_get_session(ssl)); + return generate_key_block(ssl, Span(out, out_len), SSL_get_session(ssl)); } int SSL_export_keying_material(SSL *ssl, uint8_t *out, size_t out_len, const char *label, size_t label_len, const uint8_t *context, size_t context_len, int use_context) { + auto out_span = Span(out, out_len); + std::string_view label_sv(label, label_len); // In TLS 1.3, the exporter may be used whenever the secret has been derived. if (ssl->s3->version != 0 && ssl_protocol_version(ssl) >= TLS1_3_VERSION) { if (ssl->s3->exporter_secret.empty()) { @@ -216,9 +215,8 @@ int SSL_export_keying_material(SSL *ssl, uint8_t *out, size_t out_len, context = nullptr; context_len = 0; } - return tls13_export_keying_material( - ssl, MakeSpan(out, out_len), ssl->s3->exporter_secret, - MakeConstSpan(label, label_len), MakeConstSpan(context, context_len)); + return tls13_export_keying_material(ssl, out_span, ssl->s3->exporter_secret, + label_sv, Span(context, context_len)); } // Exporters may be used in False Start, where the handshake has progressed @@ -253,6 +251,5 @@ int SSL_export_keying_material(SSL *ssl, uint8_t *out, size_t out_len, const SSL_SESSION *session = SSL_get_session(ssl); const EVP_MD *digest = ssl_session_get_digest(session); - return tls1_prf(digest, MakeSpan(out, out_len), session->secret, - MakeConstSpan(label, label_len), seed, {}); + return tls1_prf(digest, out_span, session->secret, label_sv, seed, {}); } diff --git a/naiveproxy/src/third_party/boringssl/src/ssl/tls13_both.cc b/naiveproxy/src/third_party/boringssl/src/ssl/tls13_both.cc index 5594a65d3e..8202041f97 100644 --- a/naiveproxy/src/third_party/boringssl/src/ssl/tls13_both.cc +++ b/naiveproxy/src/third_party/boringssl/src/ssl/tls13_both.cc @@ -1,16 +1,16 @@ -/* Copyright 2016 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2016 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include @@ -373,7 +373,7 @@ bool tls13_process_finished(SSL_HANDSHAKE *hs, const SSLMessage &msg, if (!tls13_finished_mac(hs, verify_data_buf, &len, !ssl->server)) { return false; } - verify_data = MakeConstSpan(verify_data_buf, len); + verify_data = Span(verify_data_buf, len); } bool finished_ok = @@ -522,7 +522,7 @@ bool tls13_add_certificate(SSL_HANDSHAKE *hs) { SSL_HANDSHAKE_HINTS *const hints = hs->hints.get(); if (hints && !hs->hints_requested && hints->cert_compression_alg_id == hs->cert_compression_alg_id && - hints->cert_compression_input == MakeConstSpan(msg) && + hints->cert_compression_input == Span(msg) && !hints->cert_compression_output.empty()) { if (!CBB_add_bytes(&compressed, hints->cert_compression_output.data(), hints->cert_compression_output.size())) { @@ -538,7 +538,7 @@ bool tls13_add_certificate(SSL_HANDSHAKE *hs) { hints->cert_compression_alg_id = hs->cert_compression_alg_id; if (!hints->cert_compression_input.CopyFrom(msg) || !hints->cert_compression_output.CopyFrom( - MakeConstSpan(CBB_data(&compressed), CBB_len(&compressed)))) { + Span(CBB_data(&compressed), CBB_len(&compressed)))) { return false; } } diff --git a/naiveproxy/src/third_party/boringssl/src/ssl/tls13_client.cc b/naiveproxy/src/third_party/boringssl/src/ssl/tls13_client.cc index f8f2250baf..607a0ba9ca 100644 --- a/naiveproxy/src/third_party/boringssl/src/ssl/tls13_client.cc +++ b/naiveproxy/src/third_party/boringssl/src/ssl/tls13_client.cc @@ -1,16 +1,16 @@ -/* Copyright 2016 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2016 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include @@ -117,9 +117,8 @@ static bool parse_server_hello_tls13(const SSL_HANDSHAKE *hs, // 5). The client could have sent a session ID indicating its willingness to // resume a DTLS 1.2 session, so just checking that the session IDs match is // incorrect. - Span expected_session_id = SSL_is_dtls(hs->ssl) - ? Span() - : MakeConstSpan(hs->session_id); + Span expected_session_id = + SSL_is_dtls(hs->ssl) ? Span() : Span(hs->session_id); // RFC 8446 fixes some legacy values. Check them. if (out->legacy_version != expected_version || // @@ -252,7 +251,8 @@ static enum ssl_hs_wait_t do_read_hello_retry_request(SSL_HANDSHAKE *hs) { // The ECH extension, if present, was already parsed by // |check_ech_confirmation|. - SSLExtension cookie(TLSEXT_TYPE_cookie), key_share(TLSEXT_TYPE_key_share), + SSLExtension cookie(TLSEXT_TYPE_cookie), + key_share(TLSEXT_TYPE_key_share, !hs->key_share_bytes.empty()), supported_versions(TLSEXT_TYPE_supported_versions), ech_unused(TLSEXT_TYPE_encrypted_client_hello, hs->selected_ech_config || hs->config->ech_grease_enabled); @@ -285,6 +285,10 @@ static enum ssl_hs_wait_t do_read_hello_retry_request(SSL_HANDSHAKE *hs) { } if (key_share.present) { + // If offering PAKE, we won't send key_share extensions, in which case we + // would have rejected key_share from the peer. + assert(!hs->pake_prover); + uint16_t group_id; if (!CBS_get_u16(&key_share.data, &group_id) || CBS_len(&key_share.data) != 0) { @@ -422,12 +426,14 @@ static enum ssl_hs_wait_t do_read_server_hello(SSL_HANDSHAKE *hs) { ssl_session_get_type(ssl->session.get()) == SSLSessionType::kPreSharedKey && ssl->s3->ech_status != ssl_ech_rejected; - SSLExtension key_share(TLSEXT_TYPE_key_share), + SSLExtension key_share(TLSEXT_TYPE_key_share, hs->key_shares[0] != nullptr), + pake_share(TLSEXT_TYPE_pake, hs->pake_prover != nullptr), pre_shared_key(TLSEXT_TYPE_pre_shared_key, pre_shared_key_allowed), supported_versions(TLSEXT_TYPE_supported_versions); - if (!ssl_parse_extensions(&server_hello.extensions, &alert, - {&key_share, &pre_shared_key, &supported_versions}, - /*ignore_unknown=*/false)) { + if (!ssl_parse_extensions( + &server_hello.extensions, &alert, + {&key_share, &pre_shared_key, &supported_versions, &pake_share}, + /*ignore_unknown=*/false)) { ssl_send_alert(ssl, SSL3_AL_FATAL, alert); return ssl_hs_error; } @@ -443,6 +449,39 @@ static enum ssl_hs_wait_t do_read_server_hello(SSL_HANDSHAKE *hs) { return ssl_hs_error; } + // The combination of ServerHello extensions determines the kind of handshake + // that the server selected. Check for invalid combinations. + + // pake replaces key_share and may not be used with pre_shared_key. + if (pake_share.present && (key_share.present || pre_shared_key.present)) { + OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_EXTENSION); + ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_UNSUPPORTED_EXTENSION); + return ssl_hs_error; + } + // In PAKE mode, we require a PAKE handshake and do not support resumption. + if (hs->pake_prover != nullptr && !pake_share.present) { + OPENSSL_PUT_ERROR(SSL, SSL_R_MISSING_EXTENSION); + ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_MISSING_EXTENSION); + return ssl_hs_error; + } + // In non-PAKE modes, we require per-connection forward secrecy and do not + // support psk_ke. + if (hs->pake_prover == nullptr && !key_share.present) { + OPENSSL_PUT_ERROR(SSL, SSL_R_MISSING_KEY_SHARE); + ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_MISSING_EXTENSION); + return ssl_hs_error; + } + // The above imples only one of three handshake forms will be allowed. The + // checks for unsolicited extensions ensure the server did not select + // something we cannot respond to. + assert( + // Full handshake + (key_share.present && !pake_share.present && !pre_shared_key.present) || + // PSK/resumption handshake + (key_share.present && !pake_share.present && pre_shared_key.present) || + // PAKE handshake + (!key_share.present && pake_share.present && !pre_shared_key.present)); + alert = SSL_AD_DECODE_ERROR; if (pre_shared_key.present) { if (!ssl_ext_pre_shared_key_parse_serverhello(hs, &alert, @@ -496,29 +535,34 @@ static enum ssl_hs_wait_t do_read_server_hello(SSL_HANDSHAKE *hs) { size_t hash_len = EVP_MD_size( ssl_get_handshake_digest(ssl_protocol_version(ssl), hs->new_cipher)); if (!tls13_init_key_schedule(hs, ssl->s3->session_reused - ? MakeConstSpan(hs->new_session->secret) - : MakeConstSpan(kZeroes, hash_len))) { + ? Span(hs->new_session->secret) + : Span(kZeroes, hash_len))) { return ssl_hs_error; } - if (!key_share.present) { - // We do not support psk_ke and thus always require a key share. - OPENSSL_PUT_ERROR(SSL, SSL_R_MISSING_KEY_SHARE); - ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_MISSING_EXTENSION); - return ssl_hs_error; - } - - // Resolve ECDHE and incorporate it into the secret. - Array dhe_secret; + // Resolve ECDHE or PAKE and incorporate it into the secret. + Array shared_secret; alert = SSL_AD_DECODE_ERROR; - if (!ssl_ext_key_share_parse_serverhello(hs, &dhe_secret, &alert, - &key_share.data)) { - ssl_send_alert(ssl, SSL3_AL_FATAL, alert); + if (key_share.present) { + if (!ssl_ext_key_share_parse_serverhello(hs, &shared_secret, &alert, + &key_share.data)) { + ssl_send_alert(ssl, SSL3_AL_FATAL, alert); + return ssl_hs_error; + } + } else if (pake_share.present) { + if (!ssl_ext_pake_parse_serverhello(hs, &shared_secret, &alert, + &pake_share.data)) { + ssl_send_alert(ssl, SSL3_AL_FATAL, alert); + return ssl_hs_error; + } + } else { + OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR); + ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR); return ssl_hs_error; } - if (!tls13_advance_key_schedule(hs, dhe_secret) || // - !ssl_hash_message(hs, msg) || // + if (!tls13_advance_key_schedule(hs, shared_secret) || // + !ssl_hash_message(hs, msg) || // !tls13_derive_handshake_secrets(hs)) { return ssl_hs_error; } @@ -582,8 +626,7 @@ static enum ssl_hs_wait_t do_read_encrypted_extensions(SSL_HANDSHAKE *hs) { ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER); return ssl_hs_error; } - if (MakeConstSpan(hs->early_session->early_alpn) != - ssl->s3->alpn_selected) { + if (Span(hs->early_session->early_alpn) != ssl->s3->alpn_selected) { OPENSSL_PUT_ERROR(SSL, SSL_R_ALPN_MISMATCH_ON_EARLY_DATA); ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER); return ssl_hs_error; @@ -640,6 +683,11 @@ static enum ssl_hs_wait_t do_read_certificate_request(SSL_HANDSHAKE *hs) { return ssl_hs_ok; } + if (hs->pake_prover) { + hs->tls13_state = state_read_server_finished; + return ssl_hs_ok; + } + SSLMessage msg; if (!ssl->method->get_message(ssl, &msg)) { return ssl_hs_read_message; @@ -651,7 +699,6 @@ static enum ssl_hs_wait_t do_read_certificate_request(SSL_HANDSHAKE *hs) { return ssl_hs_ok; } - SSLExtension sigalgs(TLSEXT_TYPE_signature_algorithms), ca(TLSEXT_TYPE_certificate_authorities); CBS body = msg.body, context, extensions, supported_signature_algorithms; @@ -771,8 +818,8 @@ static enum ssl_hs_wait_t do_read_server_finished(SSL_HANDSHAKE *hs) { !tls13_process_finished(hs, msg, false /* don't use saved value */) || !ssl_hash_message(hs, msg) || // Update the secret to the master secret and derive traffic keys. - !tls13_advance_key_schedule( - hs, MakeConstSpan(kZeroes, hs->transcript.DigestLen())) || + !tls13_advance_key_schedule(hs, + Span(kZeroes, hs->transcript.DigestLen())) || !tls13_derive_application_secrets(hs)) { return ssl_hs_error; } @@ -905,6 +952,7 @@ static enum ssl_hs_wait_t do_send_client_certificate(SSL_HANDSHAKE *hs) { } if (hs->credential == nullptr) { // The error from the last attempt is in the error queue. + assert(ERR_peek_error() != 0); ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE); return ssl_hs_error; } diff --git a/naiveproxy/src/third_party/boringssl/src/ssl/tls13_enc.cc b/naiveproxy/src/third_party/boringssl/src/ssl/tls13_enc.cc index a08cb5f742..c18fe1660e 100644 --- a/naiveproxy/src/third_party/boringssl/src/ssl/tls13_enc.cc +++ b/naiveproxy/src/third_party/boringssl/src/ssl/tls13_enc.cc @@ -1,16 +1,16 @@ -/* Copyright 2016 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2016 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include @@ -18,6 +18,7 @@ #include #include +#include #include #include @@ -87,15 +88,11 @@ bool tls13_init_early_key_schedule(SSL_HANDSHAKE *hs, hkdf_extract_to_secret(hs, *transcript, session->secret); } -static Span label_to_span(const char *label) { - return MakeConstSpan(label, strlen(label)); -} - static bool hkdf_expand_label_with_prefix(Span out, const EVP_MD *digest, Span secret, - Span label_prefix, - Span label, + std::string_view label_prefix, + std::string_view label, Span hash) { // This is a copy of CRYPTO_tls13_hkdf_expand_label, but modified to take an // arbitrary prefix for the label instead of using the hardcoded "tls13 " @@ -108,7 +105,9 @@ static bool hkdf_expand_label_with_prefix(Span out, 2 + 1 + label_prefix.size() + label.size() + 1 + hash.size()) || !CBB_add_u16(&cbb, out.size()) || !CBB_add_u8_length_prefixed(&cbb, &child) || - !CBB_add_bytes(&child, label_prefix.data(), label_prefix.size()) || + !CBB_add_bytes(&child, + reinterpret_cast(label_prefix.data()), + label_prefix.size()) || !CBB_add_bytes(&child, reinterpret_cast(label.data()), label.size()) || !CBB_add_u8_length_prefixed(&cbb, &child) || @@ -126,14 +125,11 @@ static bool hkdf_expand_label_with_prefix(Span out, static bool hkdf_expand_label(Span out, const EVP_MD *digest, Span secret, - Span label, Span hash, + std::string_view label, Span hash, bool is_dtls) { if (is_dtls) { - static const uint8_t kDTLS13LabelPrefix[] = "dtls13"; - return hkdf_expand_label_with_prefix( - out, digest, secret, - MakeConstSpan(kDTLS13LabelPrefix, sizeof(kDTLS13LabelPrefix) - 1), - label, hash); + return hkdf_expand_label_with_prefix(out, digest, secret, "dtls13", label, + hash); } return CRYPTO_tls13_hkdf_expand_label( out.data(), out.size(), digest, secret.data(), secret.size(), @@ -148,9 +144,9 @@ bool tls13_advance_key_schedule(SSL_HANDSHAKE *hs, Span in) { unsigned derive_context_len; return EVP_Digest(nullptr, 0, derive_context, &derive_context_len, hs->transcript.Digest(), nullptr) && - hkdf_expand_label(MakeSpan(hs->secret), hs->transcript.Digest(), - hs->secret, label_to_span(kTLS13LabelDerived), - MakeConstSpan(derive_context, derive_context_len), + hkdf_expand_label(Span(hs->secret), hs->transcript.Digest(), + hs->secret, kTLS13LabelDerived, + Span(derive_context, derive_context_len), SSL_is_dtls(hs->ssl)) && hkdf_extract_to_secret(hs, hs->transcript, in); } @@ -161,7 +157,7 @@ bool tls13_advance_key_schedule(SSL_HANDSHAKE *hs, Span in) { // success and false on error. static bool derive_secret_with_transcript( const SSL_HANDSHAKE *hs, InplaceVector *out, - const SSLTranscript &transcript, Span label) { + const SSLTranscript &transcript, std::string_view label) { uint8_t context_hash[EVP_MAX_MD_SIZE]; size_t context_hash_len; if (!transcript.GetHash(context_hash, &context_hash_len)) { @@ -169,14 +165,14 @@ static bool derive_secret_with_transcript( } out->ResizeForOverwrite(transcript.DigestLen()); - return hkdf_expand_label(MakeSpan(*out), transcript.Digest(), hs->secret, - label, MakeConstSpan(context_hash, context_hash_len), + return hkdf_expand_label(Span(*out), transcript.Digest(), hs->secret, label, + Span(context_hash, context_hash_len), SSL_is_dtls(hs->ssl)); } static bool derive_secret(SSL_HANDSHAKE *hs, InplaceVector *out, - Span label) { + std::string_view label) { return derive_secret_with_transcript(hs, out, hs->transcript, label); } @@ -203,12 +199,10 @@ bool tls13_set_traffic_key(SSL *ssl, enum ssl_encryption_level_t level, // Derive the key and IV. uint8_t key_buf[EVP_AEAD_MAX_KEY_LENGTH], iv_buf[EVP_AEAD_MAX_NONCE_LENGTH]; - auto key = MakeSpan(key_buf).first(EVP_AEAD_key_length(aead)); - auto iv = MakeSpan(iv_buf).first(EVP_AEAD_nonce_length(aead)); - if (!hkdf_expand_label(key, digest, traffic_secret, label_to_span("key"), - {}, is_dtls) || - !hkdf_expand_label(iv, digest, traffic_secret, label_to_span("iv"), {}, - is_dtls)) { + auto key = Span(key_buf).first(EVP_AEAD_key_length(aead)); + auto iv = Span(iv_buf).first(EVP_AEAD_nonce_length(aead)); + if (!hkdf_expand_label(key, digest, traffic_secret, "key", {}, is_dtls) || + !hkdf_expand_label(iv, digest, traffic_secret, "iv", {}, is_dtls)) { return false; } @@ -338,9 +332,9 @@ UniquePtr RecordNumberEncrypter::Create( } uint8_t rne_key_buf[RecordNumberEncrypter::kMaxKeySize]; - auto rne_key = MakeSpan(rne_key_buf).first(ret->KeySize()); - if (!hkdf_expand_label(rne_key, digest, traffic_secret, label_to_span("sn"), - {}, /*is_dtls=*/true) || + auto rne_key = Span(rne_key_buf).first(ret->KeySize()); + if (!hkdf_expand_label(rne_key, digest, traffic_secret, "sn", {}, + /*is_dtls=*/true) || !ret->SetKey(rne_key)) { return nullptr; } @@ -362,9 +356,8 @@ bool tls13_derive_early_secret(SSL_HANDSHAKE *hs) { const SSLTranscript &transcript = (!ssl->server && hs->selected_ech_config) ? hs->inner_transcript : hs->transcript; - if (!derive_secret_with_transcript( - hs, &hs->early_traffic_secret, transcript, - label_to_span(kTLS13LabelClientEarlyTraffic)) || + if (!derive_secret_with_transcript(hs, &hs->early_traffic_secret, transcript, + kTLS13LabelClientEarlyTraffic) || !ssl_log_secret(ssl, "CLIENT_EARLY_TRAFFIC_SECRET", hs->early_traffic_secret)) { return false; @@ -375,11 +368,11 @@ bool tls13_derive_early_secret(SSL_HANDSHAKE *hs) { bool tls13_derive_handshake_secrets(SSL_HANDSHAKE *hs) { SSL *const ssl = hs->ssl; if (!derive_secret(hs, &hs->client_handshake_secret, - label_to_span(kTLS13LabelClientHandshakeTraffic)) || + kTLS13LabelClientHandshakeTraffic) || !ssl_log_secret(ssl, "CLIENT_HANDSHAKE_TRAFFIC_SECRET", hs->client_handshake_secret) || !derive_secret(hs, &hs->server_handshake_secret, - label_to_span(kTLS13LabelServerHandshakeTraffic)) || + kTLS13LabelServerHandshakeTraffic) || !ssl_log_secret(ssl, "SERVER_HANDSHAKE_TRAFFIC_SECRET", hs->server_handshake_secret)) { return false; @@ -391,15 +384,14 @@ bool tls13_derive_handshake_secrets(SSL_HANDSHAKE *hs) { bool tls13_derive_application_secrets(SSL_HANDSHAKE *hs) { SSL *const ssl = hs->ssl; if (!derive_secret(hs, &hs->client_traffic_secret_0, - label_to_span(kTLS13LabelClientApplicationTraffic)) || + kTLS13LabelClientApplicationTraffic) || !ssl_log_secret(ssl, "CLIENT_TRAFFIC_SECRET_0", hs->client_traffic_secret_0) || !derive_secret(hs, &hs->server_traffic_secret_0, - label_to_span(kTLS13LabelServerApplicationTraffic)) || + kTLS13LabelServerApplicationTraffic) || !ssl_log_secret(ssl, "SERVER_TRAFFIC_SECRET_0", hs->server_traffic_secret_0) || - !derive_secret(hs, &ssl->s3->exporter_secret, - label_to_span(kTLS13LabelExporter)) || + !derive_secret(hs, &ssl->s3->exporter_secret, kTLS13LabelExporter) || !ssl_log_secret(ssl, "EXPORTER_SECRET", ssl->s3->exporter_secret)) { return false; } @@ -411,13 +403,13 @@ static const char kTLS13LabelApplicationTraffic[] = "traffic upd"; bool tls13_rotate_traffic_key(SSL *ssl, enum evp_aead_direction_t direction) { Span secret = direction == evp_aead_open - ? MakeSpan(ssl->s3->read_traffic_secret) - : MakeSpan(ssl->s3->write_traffic_secret); + ? Span(ssl->s3->read_traffic_secret) + : Span(ssl->s3->write_traffic_secret); const SSL_SESSION *session = SSL_get_session(ssl); const EVP_MD *digest = ssl_session_get_digest(session); return hkdf_expand_label(secret, digest, secret, - label_to_span(kTLS13LabelApplicationTraffic), {}, + kTLS13LabelApplicationTraffic, {}, SSL_is_dtls(ssl)) && tls13_set_traffic_key(ssl, ssl_encryption_application, direction, session, secret); @@ -426,8 +418,7 @@ bool tls13_rotate_traffic_key(SSL *ssl, enum evp_aead_direction_t direction) { static const char kTLS13LabelResumption[] = "res master"; bool tls13_derive_resumption_secret(SSL_HANDSHAKE *hs) { - return derive_secret(hs, &hs->new_session->secret, - label_to_span(kTLS13LabelResumption)); + return derive_secret(hs, &hs->new_session->secret, kTLS13LabelResumption); } static const char kTLS13LabelFinished[] = "finished"; @@ -440,10 +431,10 @@ static bool tls13_verify_data(uint8_t *out, size_t *out_len, Span secret, Span context, bool is_dtls) { uint8_t key_buf[EVP_MAX_MD_SIZE]; - auto key = MakeSpan(key_buf, EVP_MD_size(digest)); + auto key = Span(key_buf, EVP_MD_size(digest)); unsigned len; - if (!hkdf_expand_label(key, digest, secret, - label_to_span(kTLS13LabelFinished), {}, is_dtls) || + if (!hkdf_expand_label(key, digest, secret, kTLS13LabelFinished, {}, + is_dtls) || HMAC(digest, key.data(), key.size(), context.data(), context.size(), out, &len) == nullptr) { return false; @@ -462,7 +453,7 @@ bool tls13_finished_mac(SSL_HANDSHAKE *hs, uint8_t *out, size_t *out_len, if (!hs->transcript.GetHash(context_hash, &context_hash_len) || !tls13_verify_data(out, out_len, hs->transcript.Digest(), hs->ssl->s3->version, traffic_secret, - MakeConstSpan(context_hash, context_hash_len), + Span(context_hash, context_hash_len), SSL_is_dtls(hs->ssl))) { return false; } @@ -477,16 +468,15 @@ bool tls13_derive_session_psk(SSL_SESSION *session, Span nonce, // The session initially stores the resumption_master_secret, which we // override with the PSK. assert(session->secret.size() == EVP_MD_size(digest)); - return hkdf_expand_label(MakeSpan(session->secret), digest, session->secret, - label_to_span(kTLS13LabelResumptionPSK), nonce, - is_dtls); + return hkdf_expand_label(Span(session->secret), digest, session->secret, + kTLS13LabelResumptionPSK, nonce, is_dtls); } static const char kTLS13LabelExportKeying[] = "exporter"; bool tls13_export_keying_material(SSL *ssl, Span out, Span secret, - Span label, + std::string_view label, Span context) { if (secret.empty()) { assert(0); @@ -507,15 +497,14 @@ bool tls13_export_keying_material(SSL *ssl, Span out, return false; } - auto hash = MakeConstSpan(hash_buf, hash_len); - auto export_context = MakeConstSpan(export_context_buf, export_context_len); + auto hash = Span(hash_buf, hash_len); + auto export_context = Span(export_context_buf, export_context_len); uint8_t derived_secret_buf[EVP_MAX_MD_SIZE]; - auto derived_secret = MakeSpan(derived_secret_buf, EVP_MD_size(digest)); + auto derived_secret = Span(derived_secret_buf, EVP_MD_size(digest)); return hkdf_expand_label(derived_secret, digest, secret, label, export_context, SSL_is_dtls(ssl)) && - hkdf_expand_label(out, digest, derived_secret, - label_to_span(kTLS13LabelExportKeying), hash, - SSL_is_dtls(ssl)); + hkdf_expand_label(out, digest, derived_secret, kTLS13LabelExportKeying, + hash, SSL_is_dtls(ssl)); } static const char kTLS13LabelPSKBinder[] = "res binder"; @@ -536,16 +525,16 @@ static bool tls13_psk_binder(uint8_t *out, size_t *out_len, uint8_t early_secret[EVP_MAX_MD_SIZE] = {0}; size_t early_secret_len; uint8_t binder_key_buf[EVP_MAX_MD_SIZE] = {0}; - auto binder_key = MakeSpan(binder_key_buf, EVP_MD_size(digest)); + auto binder_key = Span(binder_key_buf, EVP_MD_size(digest)); if (!EVP_Digest(nullptr, 0, binder_context, &binder_context_len, digest, nullptr) || !HKDF_extract(early_secret, &early_secret_len, digest, session->secret.data(), session->secret.size(), nullptr, 0) || - !hkdf_expand_label( - binder_key, digest, MakeConstSpan(early_secret, early_secret_len), - label_to_span(kTLS13LabelPSKBinder), - MakeConstSpan(binder_context, binder_context_len), is_dtls)) { + !hkdf_expand_label(binder_key, digest, + Span(early_secret, early_secret_len), + kTLS13LabelPSKBinder, + Span(binder_context, binder_context_len), is_dtls)) { return false; } @@ -584,7 +573,7 @@ static bool tls13_psk_binder(uint8_t *out, size_t *out_len, } if (!tls13_verify_data(out, out_len, digest, session->ssl_version, binder_key, - MakeConstSpan(context, context_len), is_dtls)) { + Span(context, context_len), is_dtls)) { return false; } @@ -702,10 +691,9 @@ bool ssl_ech_accept_confirmation(const SSL_HANDSHAKE *hs, Span out, assert(out.size() == ECH_CONFIRMATION_SIGNAL_LEN); return hkdf_expand_label( - out, transcript.Digest(), MakeConstSpan(secret, secret_len), - is_hrr ? label_to_span("hrr ech accept confirmation") - : label_to_span("ech accept confirmation"), - MakeConstSpan(context, context_len), SSL_is_dtls(hs->ssl)); + out, transcript.Digest(), Span(secret, secret_len), + is_hrr ? "hrr ech accept confirmation" : "ech accept confirmation", + Span(context, context_len), SSL_is_dtls(hs->ssl)); } BSSL_NAMESPACE_END diff --git a/naiveproxy/src/third_party/boringssl/src/ssl/tls13_server.cc b/naiveproxy/src/third_party/boringssl/src/ssl/tls13_server.cc index afc75d8b0f..aa06e81bf2 100644 --- a/naiveproxy/src/third_party/boringssl/src/ssl/tls13_server.cc +++ b/naiveproxy/src/third_party/boringssl/src/ssl/tls13_server.cc @@ -1,16 +1,16 @@ -/* Copyright 2016 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2016 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include @@ -43,6 +43,30 @@ static const uint8_t kZeroes[EVP_MAX_MD_SIZE] = {0}; // See RFC 8446, section 8.3. static const int32_t kMaxTicketAgeSkewSeconds = 60; +static bool resolve_pake_secret(SSL_HANDSHAKE *hs) { + uint8_t verifier_share[spake2plus::kShareSize]; + uint8_t verifier_confirm[spake2plus::kConfirmSize]; + uint8_t shared_secret[spake2plus::kSecretSize]; + if (!hs->pake_verifier->ProcessProverShare(verifier_share, verifier_confirm, + shared_secret, + hs->pake_share->pake_message)) { + OPENSSL_PUT_ERROR(SSL, SSL_R_DECODE_ERROR); + ssl_send_alert(hs->ssl, SSL3_AL_FATAL, SSL_AD_ILLEGAL_PARAMETER); + return false; + } + + bssl::ScopedCBB cbb; + if (!CBB_init(cbb.get(), sizeof(verifier_share) + sizeof(verifier_confirm)) || + !CBB_add_bytes(cbb.get(), verifier_share, sizeof(verifier_share)) || + !CBB_add_bytes(cbb.get(), verifier_confirm, sizeof(verifier_confirm)) || + !CBBFinishArray(cbb.get(), &hs->pake_share_bytes)) { + return false; + } + + return tls13_advance_key_schedule( + hs, MakeConstSpan(shared_secret, sizeof(shared_secret))); +} + static bool resolve_ecdhe_secret(SSL_HANDSHAKE *hs, const SSL_CLIENT_HELLO *client_hello) { SSL *const ssl = hs->ssl; @@ -131,7 +155,10 @@ static bool add_new_session_tickets(SSL_HANDSHAKE *hs, bool *out_sent_tickets) { !hs->accept_psk_mode || // We only implement stateless resumption in TLS 1.3, so skip sending // tickets if disabled. - (SSL_get_options(ssl) & SSL_OP_NO_TICKET)) { + (SSL_get_options(ssl) & SSL_OP_NO_TICKET) || + // Don't send tickets for PAKE connections. We don't support resumption + // with PAKEs. + hs->pake_verifier != nullptr) { *out_sent_tickets = false; return true; } @@ -220,8 +247,9 @@ static bool add_new_session_tickets(SSL_HANDSHAKE *hs, bool *out_sent_tickets) { return true; } -static bool check_credential(SSL_HANDSHAKE *hs, const SSL_CREDENTIAL *cred, - uint16_t *out_sigalg) { +static bool check_signature_credential(SSL_HANDSHAKE *hs, + const SSL_CREDENTIAL *cred, + uint16_t *out_sigalg) { switch (cred->type) { case SSLCredentialType::kX509: break; @@ -234,9 +262,12 @@ static bool check_credential(SSL_HANDSHAKE *hs, const SSL_CREDENTIAL *cred, return false; } break; + default: + OPENSSL_PUT_ERROR(SSL, SSL_R_UNKNOWN_CERTIFICATE_TYPE); + return false; } - // All currently supported credentials require a signature. If |cred| is a + // If we reach here then the credential requires a signature. If |cred| is a // delegated credential, this also checks that the peer supports delegated // credentials and matched |dc_cert_verify_algorithm|. if (!tls1_choose_signature_algorithm(hs, cred, out_sigalg)) { @@ -247,6 +278,21 @@ static bool check_credential(SSL_HANDSHAKE *hs, const SSL_CREDENTIAL *cred, return ssl_credential_matches_requested_issuers(hs, cred); } +static bool check_pake_credential(SSL_HANDSHAKE *hs, + const SSL_CREDENTIAL *cred) { + assert(cred->type == SSLCredentialType::kSPAKE2PlusV1Server); + // Look for a client PAKE share that matches |cred|. + if (hs->pake_share == nullptr || + hs->pake_share->named_pake != SSL_PAKE_SPAKE2PLUSV1 || + hs->pake_share->client_identity != Span(cred->client_identity) || + hs->pake_share->server_identity != Span(cred->server_identity)) { + OPENSSL_PUT_ERROR(SSL, SSL_R_PEER_PAKE_MISMATCH); + return false; + } + + return true; +} + static enum ssl_hs_wait_t do_select_parameters(SSL_HANDSHAKE *hs) { // At this point, most ClientHello extensions have already been processed by // the common handshake logic. Resolve the remaining non-PSK parameters. @@ -268,7 +314,7 @@ static enum ssl_hs_wait_t do_select_parameters(SSL_HANDSHAKE *hs) { // would in a TLS 1.3 handshake. if (!SSL_is_dtls(ssl)) { hs->session_id.CopyFrom( - MakeConstSpan(client_hello.session_id, client_hello.session_id_len)); + Span(client_hello.session_id, client_hello.session_id_len)); } Array creds; @@ -284,15 +330,32 @@ static enum ssl_hs_wait_t do_select_parameters(SSL_HANDSHAKE *hs) { // Select the credential to use. for (SSL_CREDENTIAL *cred : creds) { ERR_clear_error(); - uint16_t sigalg; - if (check_credential(hs, cred, &sigalg)) { - hs->credential = UpRef(cred); - hs->signature_algorithm = sigalg; - break; + if (cred->type == SSLCredentialType::kSPAKE2PlusV1Server) { + if (check_pake_credential(hs, cred)) { + hs->credential = UpRef(cred); + hs->pake_verifier = MakeUnique(); + if (hs->pake_verifier == nullptr || + !hs->pake_verifier->Init(cred->pake_context, cred->client_identity, + cred->server_identity, + cred->password_verifier_w0, + cred->registration_record)) { + ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR); + return ssl_hs_error; + } + break; + } + } else { + uint16_t sigalg; + if (check_signature_credential(hs, cred, &sigalg)) { + hs->credential = UpRef(cred); + hs->signature_algorithm = sigalg; + break; + } } } if (hs->credential == nullptr) { // The error from the last attempt is in the error queue. + assert(ERR_peek_error() != 0); ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE); return ssl_hs_error; } @@ -359,6 +422,12 @@ static enum ssl_ticket_aead_result_t select_session( return ssl_ticket_aead_ignore_ticket; } + // We do not currently support resumption with PAKEs. + if (hs->credential != nullptr && + hs->credential->type == SSLCredentialType::kSPAKE2PlusV1Server) { + return ssl_ticket_aead_ignore_ticket; + } + // TLS 1.3 session tickets are renewed separately as part of the // NewSessionTicket. bool unused_renew; @@ -484,19 +553,24 @@ static enum ssl_hs_wait_t do_select_session(SSL_HANDSHAKE *hs) { // Record connection properties in the new session. hs->new_session->cipher = hs->new_cipher; - if (!tls1_get_shared_group(hs, &hs->new_session->group_id)) { - OPENSSL_PUT_ERROR(SSL, SSL_R_NO_SHARED_GROUP); - ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE); - return ssl_hs_error; - } - // Determine if we need HelloRetryRequest. - bool found_key_share; - if (!ssl_ext_key_share_parse_clienthello(hs, &found_key_share, - /*out_key_share=*/nullptr, &alert, - &client_hello)) { - ssl_send_alert(ssl, SSL3_AL_FATAL, alert); - return ssl_hs_error; + // If using key shares, resolve the supported group and determine if we need + // HelloRetryRequest. + bool need_hrr = false; + if (hs->pake_verifier == nullptr) { + if (!tls1_get_shared_group(hs, &hs->new_session->group_id)) { + OPENSSL_PUT_ERROR(SSL, SSL_R_NO_SHARED_GROUP); + ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE); + return ssl_hs_error; + } + bool found_key_share; + if (!ssl_ext_key_share_parse_clienthello(hs, &found_key_share, + /*out_key_share=*/nullptr, &alert, + &client_hello)) { + ssl_send_alert(ssl, SSL3_AL_FATAL, alert); + return ssl_hs_error; + } + need_hrr = !found_key_share; } // Determine if we're negotiating 0-RTT. @@ -513,12 +587,12 @@ static enum ssl_hs_wait_t do_select_session(SSL_HANDSHAKE *hs) { } else if (hs->channel_id_negotiated) { // Channel ID is incompatible with 0-RTT. ssl->s3->early_data_reason = ssl_early_data_channel_id; - } else if (MakeConstSpan(ssl->s3->alpn_selected) != session->early_alpn) { + } else if (Span(ssl->s3->alpn_selected) != session->early_alpn) { // The negotiated ALPN must match the one in the ticket. ssl->s3->early_data_reason = ssl_early_data_alpn_mismatch; } else if (hs->new_session->has_application_settings != session->has_application_settings || - MakeConstSpan(hs->new_session->local_application_settings) != + Span(hs->new_session->local_application_settings) != session->local_application_settings) { ssl->s3->early_data_reason = ssl_early_data_alps_mismatch; } else if (ssl->s3->ticket_age_skew < -kMaxTicketAgeSkewSeconds || @@ -526,7 +600,7 @@ static enum ssl_hs_wait_t do_select_session(SSL_HANDSHAKE *hs) { ssl->s3->early_data_reason = ssl_early_data_ticket_age_skew; } else if (!quic_ticket_compatible(session.get(), hs->config)) { ssl->s3->early_data_reason = ssl_early_data_quic_parameter_mismatch; - } else if (!found_key_share) { + } else if (need_hrr) { ssl->s3->early_data_reason = ssl_early_data_hello_retry_request; } else { // |ssl_session_is_resumable| forbids cross-cipher resumptions even if the @@ -578,8 +652,8 @@ static enum ssl_hs_wait_t do_select_session(SSL_HANDSHAKE *hs) { // Set up the key schedule and incorporate the PSK into the running secret. if (!tls13_init_key_schedule(hs, ssl->s3->session_reused - ? MakeConstSpan(hs->new_session->secret) - : MakeConstSpan(kZeroes, hash_len)) || + ? Span(hs->new_session->secret) + : Span(kZeroes, hash_len)) || !ssl_hash_message(hs, msg)) { return ssl_hs_error; } @@ -592,7 +666,7 @@ static enum ssl_hs_wait_t do_select_session(SSL_HANDSHAKE *hs) { ssl->s3->skip_early_data = true; } - if (!found_key_share) { + if (need_hrr) { ssl->method->next_message(ssl); if (!hs->transcript.UpdateForHelloRetryRequest()) { return ssl_hs_error; @@ -601,8 +675,22 @@ static enum ssl_hs_wait_t do_select_session(SSL_HANDSHAKE *hs) { return ssl_hs_ok; } - if (!resolve_ecdhe_secret(hs, &client_hello)) { - return ssl_hs_error; + if (hs->pake_verifier) { + assert(!ssl->s3->session_reused); + // Revealing the PAKE share (notably confirmV) allows the client to confirm + // one PAKE guess, so we must deduct from the brute force limit. + if (!hs->credential->ClaimPAKEAttempt()) { + OPENSSL_PUT_ERROR(SSL, SSL_R_PAKE_EXHAUSTED); + ssl_send_alert(hs->ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR); + return ssl_hs_error; + } + if (!resolve_pake_secret(hs)) { + return ssl_hs_error; + } + } else { + if (!resolve_ecdhe_secret(hs, &client_hello)) { + return ssl_hs_error; + } } ssl->method->next_message(ssl); @@ -617,6 +705,9 @@ static enum ssl_hs_wait_t do_send_hello_retry_request(SSL_HANDSHAKE *hs) { return ssl_hs_hints_ready; } + // Although a server could HelloRetryRequest with PAKEs to request a cookie, + // we never do so. + assert(hs->pake_verifier == nullptr); ScopedCBB cbb; CBB body, session_id, extensions; if (!ssl->method->init_message(ssl, cbb.get(), &body, SSL3_MT_SERVER_HELLO) || @@ -652,7 +743,7 @@ static enum ssl_hs_wait_t do_send_hello_retry_request(SSL_HANDSHAKE *hs) { // Now that the message is encoded, fill in the whole value. size_t offset = hrr.size() - ECH_CONFIRMATION_SIGNAL_LEN; if (!ssl_ech_accept_confirmation( - hs, MakeSpan(hrr).last(ECH_CONFIRMATION_SIGNAL_LEN), + hs, Span(hrr).last(ECH_CONFIRMATION_SIGNAL_LEN), ssl->s3->client_random, hs->transcript, /*is_hrr=*/true, hrr, offset)) { return ssl_hs_error; @@ -774,6 +865,9 @@ static enum ssl_hs_wait_t do_read_second_client_hello(SSL_HANDSHAKE *hs) { } } + // Although a server could HelloRetryRequest with PAKEs to request a cookie, + // we never do so. + assert(hs->pake_verifier == nullptr); if (!resolve_ecdhe_secret(hs, &client_hello)) { return ssl_hs_error; } @@ -831,6 +925,7 @@ static enum ssl_hs_wait_t do_send_server_hello(SSL_HANDSHAKE *hs) { !CBB_add_u8(&body, 0) || !CBB_add_u16_length_prefixed(&body, &extensions) || !ssl_ext_pre_shared_key_add_serverhello(hs, &extensions) || + !ssl_ext_pake_add_serverhello(hs, &extensions) || !ssl_ext_key_share_add_serverhello(hs, &extensions) || !ssl_ext_supported_versions_add_serverhello(hs, &extensions) || !ssl->method->finish_message(ssl, cbb.get(), &server_hello)) { @@ -850,7 +945,7 @@ static enum ssl_hs_wait_t do_send_server_hello(SSL_HANDSHAKE *hs) { // Update |server_hello|. Span server_hello_out = - MakeSpan(server_hello).subspan(offset, ECH_CONFIRMATION_SIGNAL_LEN); + Span(server_hello).subspan(offset, ECH_CONFIRMATION_SIGNAL_LEN); OPENSSL_memcpy(server_hello_out.data(), random_suffix.data(), ECH_CONFIRMATION_SIGNAL_LEN); } @@ -881,7 +976,7 @@ static enum ssl_hs_wait_t do_send_server_hello(SSL_HANDSHAKE *hs) { return ssl_hs_error; } - if (!ssl->s3->session_reused) { + if (!ssl->s3->session_reused && !hs->pake_verifier) { // Determine whether to request a client certificate. hs->cert_request = !!(hs->config->verify_mode & SSL_VERIFY_PEER); // Only request a certificate if Channel ID isn't negotiated. @@ -925,7 +1020,7 @@ static enum ssl_hs_wait_t do_send_server_hello(SSL_HANDSHAKE *hs) { } // Send the server Certificate message, if necessary. - if (!ssl->s3->session_reused) { + if (!ssl->s3->session_reused && !hs->pake_verifier) { if (!tls13_add_certificate(hs)) { return ssl_hs_error; } @@ -965,8 +1060,8 @@ static enum ssl_hs_wait_t do_send_server_finished(SSL_HANDSHAKE *hs) { hs->can_release_private_key = true; if (!tls13_add_finished(hs) || // Update the secret to the master secret and derive traffic keys. - !tls13_advance_key_schedule( - hs, MakeConstSpan(kZeroes, hs->transcript.DigestLen())) || + !tls13_advance_key_schedule(hs, + Span(kZeroes, hs->transcript.DigestLen())) || !tls13_derive_application_secrets(hs) || !tls13_set_traffic_key(ssl, ssl_encryption_application, evp_aead_seal, hs->new_session.get(), @@ -1273,6 +1368,13 @@ static enum ssl_hs_wait_t do_read_client_finished(SSL_HANDSHAKE *hs) { hs->tls13_state = state13_done; } + if (hs->credential != nullptr && + hs->credential->type == SSLCredentialType::kSPAKE2PlusV1Server) { + // The client has now confirmed that it does know the correct password, so + // this connection no longer counts towards the brute force limit. + hs->credential->RestorePAKEAttempt(); + } + ssl->method->next_message(ssl); if (SSL_is_dtls(ssl)) { ssl->method->schedule_ack(ssl); diff --git a/naiveproxy/src/third_party/boringssl/src/ssl/tls_method.cc b/naiveproxy/src/third_party/boringssl/src/ssl/tls_method.cc index 27310c7857..248ac38e0a 100644 --- a/naiveproxy/src/third_party/boringssl/src/ssl/tls_method.cc +++ b/naiveproxy/src/third_party/boringssl/src/ssl/tls_method.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/ssl/tls_record.cc b/naiveproxy/src/third_party/boringssl/src/ssl/tls_record.cc index bccaaf3678..553f7941a9 100644 --- a/naiveproxy/src/third_party/boringssl/src/ssl/tls_record.cc +++ b/naiveproxy/src/third_party/boringssl/src/ssl/tls_record.cc @@ -1,11 +1,16 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the OpenSSL license (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ +// Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include @@ -179,7 +184,7 @@ ssl_open_record_t tls_open_record(SSL *ssl, uint8_t *out_type, // Decrypt the body in-place. if (!ssl->s3->aead_read_ctx->Open( out, type, version, ssl->s3->read_sequence, header, - MakeSpan(const_cast(CBS_data(&body)), CBS_len(&body)))) { + Span(const_cast(CBS_data(&body)), CBS_len(&body)))) { if (ssl->s3->skip_early_data && !ssl->s3->aead_read_ctx->is_null_cipher()) { ERR_clear_error(); return skip_early_data(ssl, out_alert, *out_consumed); @@ -292,7 +297,7 @@ static bool do_seal_record(SSL *ssl, uint8_t *out_prefix, uint8_t *out, out_prefix[2] = record_version & 0xff; out_prefix[3] = ciphertext_len >> 8; out_prefix[4] = ciphertext_len & 0xff; - Span header = MakeSpan(out_prefix, SSL3_RT_HEADER_LENGTH); + Span header = Span(out_prefix, SSL3_RT_HEADER_LENGTH); // Ensure the sequence number update does not overflow. if (ssl->s3->write_sequence + 1 == 0) { diff --git a/naiveproxy/src/third_party/boringssl/src/third_party/fiat/AUTHORS b/naiveproxy/src/third_party/boringssl/src/third_party/fiat/AUTHORS new file mode 100644 index 0000000000..b67f8f97c1 --- /dev/null +++ b/naiveproxy/src/third_party/boringssl/src/third_party/fiat/AUTHORS @@ -0,0 +1,17 @@ +# This is the official list of fiat-crypto authors for copyright purposes. +# This file is distinct from the CONTRIBUTORS files. +# See the latter for an explanation. + +# Names should be added to this file as one of +# Organization's name +# Individual's name +# Individual's name +# See CONTRIBUTORS for the meaning of multiple email addresses. + +# Please keep the list sorted. + +Andres Erbsen +Google Inc. +Jade Philipoom +Massachusetts Institute of Technology +Zoe Paraskevopoulou \ No newline at end of file diff --git a/naiveproxy/src/third_party/boringssl/src/third_party/fiat/LICENSE b/naiveproxy/src/third_party/boringssl/src/third_party/fiat/LICENSE index 70cae03773..3bc4b882eb 100644 --- a/naiveproxy/src/third_party/boringssl/src/third_party/fiat/LICENSE +++ b/naiveproxy/src/third_party/boringssl/src/third_party/fiat/LICENSE @@ -1,22 +1,15 @@ -The MIT License (MIT) +The Apache License, Version 2.0 (Apache-2.0) -Copyright (c) 2015-2020 the fiat-crypto authors (see -https://github.com/mit-plv/fiat-crypto/blob/master/AUTHORS). +Copyright 2015-2020 the fiat-crypto authors (see the AUTHORS file) -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. + http://www.apache.org/licenses/LICENSE-2.0 -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/naiveproxy/src/third_party/boringssl/src/third_party/fiat/README.chromium b/naiveproxy/src/third_party/boringssl/src/third_party/fiat/README.chromium index fdf28a4e03..b19c040afd 100644 --- a/naiveproxy/src/third_party/boringssl/src/third_party/fiat/README.chromium +++ b/naiveproxy/src/third_party/boringssl/src/third_party/fiat/README.chromium @@ -3,7 +3,7 @@ Short Name: fiat-crypto URL: https://github.com/mit-plv/fiat-crypto Version: git (see METADATA) Revision: 6ccc6638716d4632304baf1adbb5c47c3a12ea6f -License: MIT +License: Apache 2.0 License File: LICENSE Security Critical: yes Shipped: yes diff --git a/naiveproxy/src/third_party/boringssl/src/third_party/fiat/README.md b/naiveproxy/src/third_party/boringssl/src/third_party/fiat/README.md index 9c1fc870bb..1035e7f27c 100644 --- a/naiveproxy/src/third_party/boringssl/src/third_party/fiat/README.md +++ b/naiveproxy/src/third_party/boringssl/src/third_party/fiat/README.md @@ -3,7 +3,7 @@ The files in this directory are generated using [Fiat Cryptography](https://github.com/mit-plv/fiat-crypto) from the associated library of arithmetic-implementation templates. These files are included under -the MIT license. (See LICENSE file.) +the Apache 2.0 license. (See LICENSE file.) Some files are included directly from the `fiat-c/src` directory of the Fiat Cryptography repository. Their contents are `#include`d into source files, so diff --git a/naiveproxy/src/third_party/boringssl/src/tool/args.cc b/naiveproxy/src/third_party/boringssl/src/tool/args.cc index 817ec3649c..55370429e2 100644 --- a/naiveproxy/src/third_party/boringssl/src/tool/args.cc +++ b/naiveproxy/src/third_party/boringssl/src/tool/args.cc @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/tool/ciphers.cc b/naiveproxy/src/third_party/boringssl/src/tool/ciphers.cc index 4d1db62a1d..ae454e5e4a 100644 --- a/naiveproxy/src/third_party/boringssl/src/tool/ciphers.cc +++ b/naiveproxy/src/third_party/boringssl/src/tool/ciphers.cc @@ -1,16 +1,16 @@ -/* Copyright 2015 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2015 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/tool/client.cc b/naiveproxy/src/third_party/boringssl/src/tool/client.cc index ed4a5654f8..ed9b5bd92c 100644 --- a/naiveproxy/src/third_party/boringssl/src/tool/client.cc +++ b/naiveproxy/src/third_party/boringssl/src/tool/client.cc @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/tool/const.cc b/naiveproxy/src/third_party/boringssl/src/tool/const.cc index be83bc6a0c..0a02b68f40 100644 --- a/naiveproxy/src/third_party/boringssl/src/tool/const.cc +++ b/naiveproxy/src/third_party/boringssl/src/tool/const.cc @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/tool/digest.cc b/naiveproxy/src/third_party/boringssl/src/tool/digest.cc index fef9198d1e..b3b2ffd52c 100644 --- a/naiveproxy/src/third_party/boringssl/src/tool/digest.cc +++ b/naiveproxy/src/third_party/boringssl/src/tool/digest.cc @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/tool/fd.cc b/naiveproxy/src/third_party/boringssl/src/tool/fd.cc index 0cc0121fff..875ad71d82 100644 --- a/naiveproxy/src/third_party/boringssl/src/tool/fd.cc +++ b/naiveproxy/src/third_party/boringssl/src/tool/fd.cc @@ -1,16 +1,16 @@ -/* Copyright 2020 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2020 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/tool/file.cc b/naiveproxy/src/third_party/boringssl/src/tool/file.cc index 49e0315fc1..ed8754c9d7 100644 --- a/naiveproxy/src/third_party/boringssl/src/tool/file.cc +++ b/naiveproxy/src/third_party/boringssl/src/tool/file.cc @@ -1,16 +1,16 @@ -/* Copyright 2017 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2017 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/tool/generate_ech.cc b/naiveproxy/src/third_party/boringssl/src/tool/generate_ech.cc index b0d4a5b9a0..76e3ae92ff 100644 --- a/naiveproxy/src/third_party/boringssl/src/tool/generate_ech.cc +++ b/naiveproxy/src/third_party/boringssl/src/tool/generate_ech.cc @@ -1,16 +1,16 @@ -/* Copyright 2021 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2021 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include @@ -119,13 +119,12 @@ bool GenerateECH(const std::vector &args) { fprintf(stderr, "Failed to serialize the ECHConfigList\n"); return false; } - if (!WriteToFile( - args_map["-out-ech-config-list"], - bssl::MakeConstSpan(CBB_data(cbb.get()), CBB_len(cbb.get()))) || + if (!WriteToFile(args_map["-out-ech-config-list"], + bssl::Span(CBB_data(cbb.get()), CBB_len(cbb.get()))) || !WriteToFile(args_map["-out-ech-config"], - bssl::MakeConstSpan(ech_config, ech_config_len)) || + bssl::Span(ech_config, ech_config_len)) || !WriteToFile(args_map["-out-private-key"], - bssl::MakeConstSpan(private_key, private_key_len))) { + bssl::Span(private_key, private_key_len))) { fprintf(stderr, "Failed to write ECHConfig or private key to file\n"); return false; } diff --git a/naiveproxy/src/third_party/boringssl/src/tool/generate_ed25519.cc b/naiveproxy/src/third_party/boringssl/src/tool/generate_ed25519.cc index cb6e442288..4f70a528ee 100644 --- a/naiveproxy/src/third_party/boringssl/src/tool/generate_ed25519.cc +++ b/naiveproxy/src/third_party/boringssl/src/tool/generate_ed25519.cc @@ -1,16 +1,16 @@ -/* Copyright 2015 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2015 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/tool/genrsa.cc b/naiveproxy/src/third_party/boringssl/src/tool/genrsa.cc index d77ee27711..cc6eb3ec7e 100644 --- a/naiveproxy/src/third_party/boringssl/src/tool/genrsa.cc +++ b/naiveproxy/src/third_party/boringssl/src/tool/genrsa.cc @@ -1,16 +1,16 @@ -/* Copyright 2015 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2015 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/tool/internal.h b/naiveproxy/src/third_party/boringssl/src/tool/internal.h index 9b8c64320e..2c02a7436a 100644 --- a/naiveproxy/src/third_party/boringssl/src/tool/internal.h +++ b/naiveproxy/src/third_party/boringssl/src/tool/internal.h @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_TOOL_INTERNAL_H #define OPENSSL_HEADER_TOOL_INTERNAL_H diff --git a/naiveproxy/src/third_party/boringssl/src/tool/pkcs12.cc b/naiveproxy/src/third_party/boringssl/src/tool/pkcs12.cc index fd82f9344d..f587fd907e 100644 --- a/naiveproxy/src/third_party/boringssl/src/tool/pkcs12.cc +++ b/naiveproxy/src/third_party/boringssl/src/tool/pkcs12.cc @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/tool/rand.cc b/naiveproxy/src/third_party/boringssl/src/tool/rand.cc index dc11fa0091..f81f569f61 100644 --- a/naiveproxy/src/third_party/boringssl/src/tool/rand.cc +++ b/naiveproxy/src/third_party/boringssl/src/tool/rand.cc @@ -1,16 +1,16 @@ -/* Copyright 2015 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2015 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/tool/server.cc b/naiveproxy/src/third_party/boringssl/src/tool/server.cc index ddec2b59b6..ca00d2a9c7 100644 --- a/naiveproxy/src/third_party/boringssl/src/tool/server.cc +++ b/naiveproxy/src/third_party/boringssl/src/tool/server.cc @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include diff --git a/naiveproxy/src/third_party/boringssl/src/tool/sign.cc b/naiveproxy/src/third_party/boringssl/src/tool/sign.cc index da65582111..dd5532dd02 100644 --- a/naiveproxy/src/third_party/boringssl/src/tool/sign.cc +++ b/naiveproxy/src/third_party/boringssl/src/tool/sign.cc @@ -1,16 +1,16 @@ -/* Copyright 2017 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2017 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/tool/speed.cc b/naiveproxy/src/third_party/boringssl/src/tool/speed.cc index ae665a7d1b..8bc3eef179 100644 --- a/naiveproxy/src/third_party/boringssl/src/tool/speed.cc +++ b/naiveproxy/src/third_party/boringssl/src/tool/speed.cc @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include @@ -67,7 +67,7 @@ OPENSSL_MSVC_PRAGMA(warning(pop)) #include #endif -#include "../crypto/ec_extra/internal.h" +#include "../crypto/ec/internal.h" #include "../crypto/fipsmodule/ec/internal.h" #include "../crypto/internal.h" #include "../crypto/trust_token/internal.h" diff --git a/naiveproxy/src/third_party/boringssl/src/tool/tool.cc b/naiveproxy/src/third_party/boringssl/src/tool/tool.cc index 5535dee3aa..e213523709 100644 --- a/naiveproxy/src/third_party/boringssl/src/tool/tool.cc +++ b/naiveproxy/src/third_party/boringssl/src/tool/tool.cc @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #include #include diff --git a/naiveproxy/src/third_party/boringssl/src/tool/transport_common.cc b/naiveproxy/src/third_party/boringssl/src/tool/transport_common.cc index 2394a29d92..264db134da 100644 --- a/naiveproxy/src/third_party/boringssl/src/tool/transport_common.cc +++ b/naiveproxy/src/third_party/boringssl/src/tool/transport_common.cc @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. // Suppress MSVC's STL warnings. It flags |std::copy| calls with a raw output // pointer, on grounds that MSVC cannot check them. Unfortunately, there is no diff --git a/naiveproxy/src/third_party/boringssl/src/tool/transport_common.h b/naiveproxy/src/third_party/boringssl/src/tool/transport_common.h index afadc3326d..e9d4c08470 100644 --- a/naiveproxy/src/third_party/boringssl/src/tool/transport_common.h +++ b/naiveproxy/src/third_party/boringssl/src/tool/transport_common.h @@ -1,16 +1,16 @@ -/* Copyright 2014 The BoringSSL Authors - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION - * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +// Copyright 2014 The BoringSSL Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. #ifndef OPENSSL_HEADER_TOOL_TRANSPORT_COMMON_H #define OPENSSL_HEADER_TOOL_TRANSPORT_COMMON_H diff --git a/naiveproxy/src/third_party/cpu_features/README.chromium b/naiveproxy/src/third_party/cpu_features/README.chromium index 23378547e7..74f53bab37 100644 --- a/naiveproxy/src/third_party/cpu_features/README.chromium +++ b/naiveproxy/src/third_party/cpu_features/README.chromium @@ -3,7 +3,7 @@ Short Name: cpu_features URL: https://github.com/google/cpu_features Version: v0.8.0 Date: 2023-05-17 -License: Apache 2.0 +License: BSD-2-Clause, Apache-2.0 License File: src/LICENSE Security Critical: Yes Shipped: yes diff --git a/naiveproxy/src/third_party/depot_tools/download_from_google_storage.py b/naiveproxy/src/third_party/depot_tools/download_from_google_storage.py index bfc8eace2c..76c4fffcc4 100755 --- a/naiveproxy/src/third_party/depot_tools/download_from_google_storage.py +++ b/naiveproxy/src/third_party/depot_tools/download_from_google_storage.py @@ -33,8 +33,7 @@ PLATFORM_MAPPING = { 'linux': 'linux', # Python 3.3+. 'linux2': 'linux', # Python < 3.3 uses "linux2" / "linux3". 'win32': 'win', - 'aix6': 'aix', - 'aix7': 'aix', + 'aix': 'aix', # Python 3.8+ 'zos': 'zos', } diff --git a/naiveproxy/src/third_party/depot_tools/gn_helper.py b/naiveproxy/src/third_party/depot_tools/gn_helper.py index 36aa2dbae3..440d8be7ee 100644 --- a/naiveproxy/src/third_party/depot_tools/gn_helper.py +++ b/naiveproxy/src/third_party/depot_tools/gn_helper.py @@ -34,7 +34,25 @@ def _gn_lines(output_dir, path): import_path = os.path.normpath( os.path.join(_find_root(output_dir), raw_import_path[2:])) + elif raw_import_path.startswith('/'): + # GN uses "/"-prefix as absolute path, + # https://gn.googlesource.com/gn/+/main/docs/reference.md#labels + # e.g. + # /usr/local/foo:bar + # /C:/Program Files/MyLibs:bar + # but Win32's absolute path doesn't have "/"-prefix. + if sys.platform.startswith('win32'): + import_path = raw_import_path[1:] + else: + import_path = raw_import_path + if not os.path.isabs(import_path): + raise Exception('Wrong absolute path for import %s' % + raw_import_path) else: + if os.path.isabs(raw_import_path): + raise Execption( + 'Absolute path "%s" should start with "/" in GN' % + raw_import_path) import_path = os.path.normpath( os.path.join(os.path.dirname(path), raw_import_path)) yield from _gn_lines(output_dir, import_path) diff --git a/naiveproxy/src/third_party/jni_zero/codegen/called_by_native_header.py b/naiveproxy/src/third_party/jni_zero/codegen/called_by_native_header.py index d0a2bccf07..7c30fbe7dd 100644 --- a/naiveproxy/src/third_party/jni_zero/codegen/called_by_native_header.py +++ b/naiveproxy/src/third_party/jni_zero/codegen/called_by_native_header.py @@ -89,6 +89,8 @@ def method_definition(sb, cbn): for p in cbn.params) with sb.block(after='\n'): + sb(f'jni_zero::CallNativeToJavaCallback("{java_class.full_name_with_slashes}", "{cbn.name}");\n' + ) sb('static std::atomic cached_method_id(nullptr);\n') class_accessor = header_common.class_accessor_expression(java_class) receiver_arg = 'clazz' if reciever_arg_is_class else 'obj.obj()' diff --git a/naiveproxy/src/third_party/jni_zero/codegen/convert_type.py b/naiveproxy/src/third_party/jni_zero/codegen/convert_type.py index 38ddb88303..22a1fc9667 100644 --- a/naiveproxy/src/third_party/jni_zero/codegen/convert_type.py +++ b/naiveproxy/src/third_party/jni_zero/codegen/convert_type.py @@ -4,10 +4,15 @@ """Codegen related to @JniType.""" from codegen import header_common +import common import java_types +import common -def to_jni_expression(sb, rvalue, java_type, clazz_snippet=None): +def to_jni_expression(sb: common.StringBuilder, + rvalue: str, + java_type: java_types.JavaType, + clazz_snippet=None): """Writes a ToJniType() expression to |sb|. Args: @@ -15,9 +20,12 @@ def to_jni_expression(sb, rvalue, java_type, clazz_snippet=None): java_type: Type containing the @JniType annotation. clazz_snippet: Snippet to use as the third parameter for array conversions. """ - assert java_type.converted_type + T = java_type.converted_type + assert T if java_type.is_primitive(): - sb(f'static_cast<{java_type.to_cpp()}>({rvalue})') + sb('jni_zero::internal::PrimitiveConvert' + f'<{T}, {java_type.to_cpp()}>::ToJniType') + sb.param_list(['env', rvalue]) return if java_type == java_types.LIST: @@ -34,7 +42,7 @@ def to_jni_expression(sb, rvalue, java_type, clazz_snippet=None): if element_type.is_array(): raise Exception( '@JniType() for multi-dimensional arrays are not yet supported. ' - 'Found ' + java_type.converted_type) + 'Found ' + T) sb(f'jni_zero::ToJniArray') with sb.param_list() as plist: plist += ['env', rvalue] @@ -47,7 +55,8 @@ def to_jni_expression(sb, rvalue, java_type, clazz_snippet=None): ] -def to_jni_assignment(sb, dest_var_name, src_var_name, java_type): +def to_jni_assignment(sb: common.StringBuilder, dest_var_name: str, + src_var_name: str, java_type: java_types.JavaType): """Writes a ToJniType() assignment to |sb|.""" with sb.statement(): if java_type.is_primitive(): @@ -58,7 +67,10 @@ def to_jni_assignment(sb, dest_var_name, src_var_name, java_type): to_jni_expression(sb, src_var_name, java_type) -def from_jni_expression(sb, rvalue, java_type, release_ref=False): +def from_jni_expression(sb: common.StringBuilder, + rvalue: str, + java_type: java_types.JavaType, + release_ref=False): """Writes a FromJniType() expression to |sb|. Args: @@ -69,7 +81,9 @@ def from_jni_expression(sb, rvalue, java_type, release_ref=False): T = java_type.converted_type assert T if java_type.is_primitive(): - sb(f'static_cast<{T}>({rvalue})') + sb('jni_zero::internal::PrimitiveConvert' + f'<{T}, {java_type.to_cpp()}>::FromJniType') + sb.param_list(['env', rvalue]) return if java_type.is_array(): diff --git a/naiveproxy/src/third_party/jni_zero/codegen/proxy_impl_java.py b/naiveproxy/src/third_party/jni_zero/codegen/proxy_impl_java.py index 98a995e0f8..75af6f298e 100644 --- a/naiveproxy/src/third_party/jni_zero/codegen/proxy_impl_java.py +++ b/naiveproxy/src/third_party/jni_zero/codegen/proxy_impl_java.py @@ -50,7 +50,7 @@ public {return_type_str} {native.name}({sig_params})""") sb(f'assert {native.params[0].name} != 0;\n') for p in native.params: if not p.java_type.is_primitive() and not p.java_type.nullable: - sb(f'assert {p.name} != null;\n') + sb(f'assert {p.name} != null : "Parameter \\"{p.name}\\" was null. Add @Nullable to it?";\n') with sb.statement(): if not native.return_type.is_void(): sb(f'return ({return_type_str}) ') diff --git a/naiveproxy/src/third_party/jni_zero/common_apis.cc b/naiveproxy/src/third_party/jni_zero/common_apis.cc index a007ae6a4c..bdd1b4555e 100644 --- a/naiveproxy/src/third_party/jni_zero/common_apis.cc +++ b/naiveproxy/src/third_party/jni_zero/common_apis.cc @@ -6,8 +6,11 @@ #include "third_party/jni_zero/generate_jni/JniUtil_jni.h" #include "third_party/jni_zero/system_jni/Arrays_jni.h" +#include "third_party/jni_zero/system_jni/Boolean_jni.h" #include "third_party/jni_zero/system_jni/Collection_jni.h" +#include "third_party/jni_zero/system_jni/Integer_jni.h" #include "third_party/jni_zero/system_jni/List_jni.h" +#include "third_party/jni_zero/system_jni/Long_jni.h" #include "third_party/jni_zero/system_jni/Map_jni.h" namespace jni_zero { @@ -73,4 +76,28 @@ jint MapSize(JNIEnv* env, const JavaRef& map) { return JNI_Map::Java_Map_size(env, map); } +bool FromJavaBoolean(JNIEnv* env, const JavaRef& j_bool) { + return static_cast(JNI_Boolean::Java_Boolean_booleanValue(env, j_bool)); +} + +ScopedJavaLocalRef ToJavaBoolean(JNIEnv* env, bool val) { + return JNI_Boolean::Java_Boolean_valueOf__boolean(env, val); +} + +int32_t FromJavaInteger(JNIEnv* env, const JavaRef& j_int) { + return static_cast(JNI_Integer::Java_Integer_intValue(env, j_int)); +} + +ScopedJavaLocalRef ToJavaInteger(JNIEnv* env, int32_t val) { + return JNI_Integer::Java_Integer_valueOf__int(env, val); +} + +int64_t FromJavaLong(JNIEnv* env, const JavaRef& j_long) { + return static_cast(JNI_Long::Java_Long_longValue(env, j_long)); +} + +ScopedJavaLocalRef ToJavaLong(JNIEnv* env, int64_t val) { + return JNI_Long::Java_Long_valueOf__long(env, val); +} + } // namespace jni_zero diff --git a/naiveproxy/src/third_party/jni_zero/common_apis.h b/naiveproxy/src/third_party/jni_zero/common_apis.h index dce4338aef..1a22c4b178 100644 --- a/naiveproxy/src/third_party/jni_zero/common_apis.h +++ b/naiveproxy/src/third_party/jni_zero/common_apis.h @@ -53,6 +53,27 @@ CollectionSize(JNIEnv* env, const JavaRef& collection); JNI_ZERO_COMPONENT_BUILD_EXPORT jint MapSize(JNIEnv* env, const JavaRef& map); +JNI_ZERO_COMPONENT_BUILD_EXPORT bool FromJavaBoolean( + JNIEnv* env, + const JavaRef& j_bool); + +JNI_ZERO_COMPONENT_BUILD_EXPORT ScopedJavaLocalRef ToJavaBoolean( + JNIEnv* env, + bool val); + +JNI_ZERO_COMPONENT_BUILD_EXPORT int32_t +FromJavaInteger(JNIEnv* env, const JavaRef& j_int); + +JNI_ZERO_COMPONENT_BUILD_EXPORT ScopedJavaLocalRef ToJavaInteger( + JNIEnv* env, + int32_t val); + +JNI_ZERO_COMPONENT_BUILD_EXPORT int64_t +FromJavaLong(JNIEnv* env, const JavaRef& j_long); + +JNI_ZERO_COMPONENT_BUILD_EXPORT ScopedJavaLocalRef ToJavaLong( + JNIEnv* env, + int64_t val); } // namespace jni_zero #endif // JNI_ZERO_COMMON_APIS_H_ diff --git a/naiveproxy/src/third_party/jni_zero/default_conversions.h b/naiveproxy/src/third_party/jni_zero/default_conversions.h index 35c0ab7436..9d6fbe3d0a 100644 --- a/naiveproxy/src/third_party/jni_zero/default_conversions.h +++ b/naiveproxy/src/third_party/jni_zero/default_conversions.h @@ -13,41 +13,6 @@ #include "third_party/jni_zero/jni_zero.h" namespace jni_zero { -namespace internal { -template -concept IsJavaRef = std::is_base_of_v, T>; - -template -concept HasReserve = requires(T t) { t.reserve(0); }; - -template -concept HasPushBack = requires(T t, T::value_type v) { t.push_back(v); }; - -template -concept HasInsert = requires(T t, T::value_type v) { t.insert(v); }; - -template -concept IsMap = requires(T t) { - typename T::key_type; - typename T::mapped_type; -}; - -template -concept IsContainer = requires(T t) { - !IsMap; - typename T::value_type; - t.begin(); - t.end(); - t.size(); -}; - -template -concept IsObjectContainer = - IsContainer && !std::is_arithmetic_v; - -template -concept IsOptional = std::same_as>; -} // namespace internal // Allow conversions using std::optional by wrapping non-optional conversions. template @@ -155,14 +120,6 @@ inline ByteArrayView FromJniArray( return ByteArrayView(env, j_array); } -// There is a circular dependency between common_apis.cc and here. -JNI_ZERO_COMPONENT_BUILD_EXPORT ScopedJavaLocalRef -CollectionToArray(JNIEnv* env, const JavaRef& collection); - -JNI_ZERO_COMPONENT_BUILD_EXPORT ScopedJavaLocalRef ArrayToList( - JNIEnv* env, - const JavaRef& array); - template inline ContainerType FromJniCollection(JNIEnv* env, const JavaRef& j_collection) { @@ -174,18 +131,14 @@ inline ContainerType FromJniCollection(JNIEnv* env, template inline ScopedJavaLocalRef ToJniList(JNIEnv* env, const ContainerType& collection) { + if (collection.empty()) { + return g_empty_list.AsLocalRef(env); + } ScopedJavaLocalRef arr = ToJniArray(env, collection, g_object_class); return ArrayToList(env, arr); } -JNI_ZERO_COMPONENT_BUILD_EXPORT ScopedJavaLocalRef MapToArray( - JNIEnv* env, - const JavaRef& map); -JNI_ZERO_COMPONENT_BUILD_EXPORT ScopedJavaLocalRef ArrayToMap( - JNIEnv* env, - const JavaRef& array); - // Convert Map -> stl map type using FromJniType() on each key & value. template inline ContainerType FromJniType(JNIEnv* env, @@ -236,6 +189,9 @@ inline ScopedJavaLocalRef ToJniType(JNIEnv* env, using KeyType = ContainerType::key_type; using ValueType = ContainerType::mapped_type; jsize map_jsize = static_cast(map.size()); + if (map_jsize == 0) { + return g_empty_map.AsLocalRef(env); + } jobjectArray j_array = env->NewObjectArray(map_jsize * 2, g_object_class, nullptr); CheckException(env); @@ -262,5 +218,40 @@ inline ScopedJavaLocalRef ToJniType(JNIEnv* env, auto array = ScopedJavaLocalRef::Adopt(env, j_array); return ArrayToMap(env, array); } + +template <> +inline bool FromJniType(JNIEnv* env, const JavaRef& j_bool) { + return FromJavaBoolean(env, j_bool); +} + +template <> +inline ScopedJavaLocalRef ToJniType(JNIEnv* env, bool val) { + return ToJavaBoolean(env, val); +} + +template <> +inline int32_t FromJniType(JNIEnv* env, + const JavaRef& j_int) { + return FromJavaInteger(env, j_int); +} + +template <> +inline ScopedJavaLocalRef ToJniType(JNIEnv* env, + int32_t val) { + return ToJavaInteger(env, val); +} + +template <> +inline int64_t FromJniType(JNIEnv* env, + const JavaRef& j_long) { + return FromJavaLong(env, j_long); +} + +template <> +inline ScopedJavaLocalRef ToJniType(JNIEnv* env, + int64_t val) { + return ToJavaLong(env, val); +} + } // namespace jni_zero #endif // JNI_ZERO_DEFAULT_CONVERSIONS_H_ diff --git a/naiveproxy/src/third_party/jni_zero/java/src/org/jni_zero/JniInit.java b/naiveproxy/src/third_party/jni_zero/java/src/org/jni_zero/JniInit.java index df9c703a2b..d5f827258a 100644 --- a/naiveproxy/src/third_party/jni_zero/java/src/org/jni_zero/JniInit.java +++ b/naiveproxy/src/third_party/jni_zero/java/src/org/jni_zero/JniInit.java @@ -4,9 +4,19 @@ package org.jni_zero; +import java.util.Collections; + /** Used by jni_zero.cc. */ @JNINamespace("jni_zero") public class JniInit { + @CalledByNative + private static Object[] init() { + // For JVM (works fine on ART), cannot call from Java -> Native during InitVM because the + // System.loadLibrary() call has not yet completed. Could work around this by using + // RegisterNatives(), but simpler to return an array than to make Java->Native work. + return new Object[] {Collections.EMPTY_LIST, Collections.EMPTY_MAP}; + } + @CalledByNative private static void crashIfMultiplexingMisaligned(long wholeHash, long priorityHash) { try { diff --git a/naiveproxy/src/third_party/jni_zero/jni_methods.h b/naiveproxy/src/third_party/jni_zero/jni_methods.h index 1a84d2b23a..bba84adc97 100644 --- a/naiveproxy/src/third_party/jni_zero/jni_methods.h +++ b/naiveproxy/src/third_party/jni_zero/jni_methods.h @@ -46,6 +46,13 @@ JNI_ZERO_COMPONENT_BUILD_EXPORT void DisableJvmForTesting(); JNI_ZERO_COMPONENT_BUILD_EXPORT void SetExceptionHandler( void (*callback)(JNIEnv*)); +JNI_ZERO_COMPONENT_BUILD_EXPORT void SetNativeToJavaCallback( + void (*callback)(char const*, char const*)); + +JNI_ZERO_COMPONENT_BUILD_EXPORT void CallNativeToJavaCallback( + char const* className, + char const* methodName); + // Returns true if an exception is pending in the provided JNIEnv*. JNI_ZERO_COMPONENT_BUILD_EXPORT bool HasException(JNIEnv* env); diff --git a/naiveproxy/src/third_party/jni_zero/jni_zero.cc b/naiveproxy/src/third_party/jni_zero/jni_zero.cc index 0b433208d6..acd3c5ce82 100644 --- a/naiveproxy/src/third_party/jni_zero/jni_zero.cc +++ b/naiveproxy/src/third_party/jni_zero/jni_zero.cc @@ -23,6 +23,7 @@ JavaVM* g_jvm = nullptr; jclass (*g_class_resolver)(JNIEnv*, const char*, const char*) = nullptr; void (*g_exception_handler_callback)(JNIEnv*) = nullptr; +void (*g_native_to_java_callback)(const char*, const char*) = nullptr; jclass GetClassInternal(JNIEnv* env, const char* class_name, @@ -63,6 +64,9 @@ jclass GetSystemClassGlobalRef(JNIEnv* env, const char* class_name) { jclass g_object_class = nullptr; jclass g_string_class = nullptr; +LeakedJavaGlobalRef g_empty_string = nullptr; +LeakedJavaGlobalRef g_empty_list = nullptr; +LeakedJavaGlobalRef g_empty_map = nullptr; JNIEnv* AttachCurrentThread() { JNI_ZERO_DCHECK(g_jvm); @@ -154,6 +158,16 @@ void SetExceptionHandler(void (*callback)(JNIEnv*)) { g_exception_handler_callback = callback; } +void SetNativeToJavaCallback(void (*callback)(char const*, char const*)) { + g_native_to_java_callback = callback; +} + +void CallNativeToJavaCallback(char const* class_name, char const* method_name) { + if (g_native_to_java_callback) { + g_native_to_java_callback(class_name, method_name); + } +} + void CheckException(JNIEnv* env) { if (!HasException(env)) { return; @@ -162,6 +176,7 @@ void CheckException(JNIEnv* env) { if (g_exception_handler_callback) { return g_exception_handler_callback(env); } + env->ExceptionDescribe(); JNI_ZERO_FLOG("jni_zero crashing due to uncaught Java exception"); } diff --git a/naiveproxy/src/third_party/jni_zero/jni_zero.h b/naiveproxy/src/third_party/jni_zero/jni_zero.h index 8cf3e6a031..a04c654ff4 100644 --- a/naiveproxy/src/third_party/jni_zero/jni_zero.h +++ b/naiveproxy/src/third_party/jni_zero/jni_zero.h @@ -15,10 +15,17 @@ #include "third_party/jni_zero/type_conversions.h" namespace jni_zero { + + // Commonly needed jclasses: extern JNI_ZERO_COMPONENT_BUILD_EXPORT jclass g_object_class; extern JNI_ZERO_COMPONENT_BUILD_EXPORT jclass g_string_class; - +// Singletons for empty things. +extern JNI_ZERO_COMPONENT_BUILD_EXPORT LeakedJavaGlobalRef + g_empty_string; +extern JNI_ZERO_COMPONENT_BUILD_EXPORT LeakedJavaGlobalRef + g_empty_list; +extern JNI_ZERO_COMPONENT_BUILD_EXPORT LeakedJavaGlobalRef g_empty_map; } // namespace jni_zero #endif // JNI_ZERO_JNI_ZERO_H_ diff --git a/naiveproxy/src/third_party/jni_zero/jni_zero_internal.h b/naiveproxy/src/third_party/jni_zero/jni_zero_internal.h index 292c047cf9..89a3c91633 100644 --- a/naiveproxy/src/third_party/jni_zero/jni_zero_internal.h +++ b/naiveproxy/src/third_party/jni_zero/jni_zero_internal.h @@ -7,14 +7,11 @@ #include +#include "third_party/jni_zero/default_conversions.h" #include "third_party/jni_zero/jni_export.h" #include "third_party/jni_zero/jni_zero.h" #include "third_party/jni_zero/logging.h" -#if JNI_ZERO_ENABLE_TYPE_CONVERSIONS -#include "third_party/jni_zero/default_conversions.h" -#endif - // Project-specific macros used by the header files generated by // jni_generator.py. Different projects can then specify their own // implementation for this file. diff --git a/naiveproxy/src/third_party/jni_zero/proxy.py b/naiveproxy/src/third_party/jni_zero/proxy.py index 1d61ce5ad5..b4b02f74a9 100644 --- a/naiveproxy/src/third_party/jni_zero/proxy.py +++ b/naiveproxy/src/third_party/jni_zero/proxy.py @@ -38,10 +38,10 @@ def muxed_name(muxed_signature): params_list = [_muxed_type_char(t) for t in muxed_signature.param_types] params_part = '' if params_list: - params_part = '_' + ''.join(p for p in params_list) + params_part = ''.join(p for p in params_list) return_value_part = _muxed_type_char(muxed_signature.return_type) - return '_' + return_value_part + params_part + return return_value_part + params_part def muxed_signature(proxy_signature): diff --git a/naiveproxy/src/third_party/jni_zero/sample/BUILD.gn b/naiveproxy/src/third_party/jni_zero/sample/BUILD.gn index 717b0db9c1..5579999f09 100644 --- a/naiveproxy/src/third_party/jni_zero/sample/BUILD.gn +++ b/naiveproxy/src/third_party/jni_zero/sample/BUILD.gn @@ -27,11 +27,7 @@ source_set("sample_native_side") { } shared_library_with_jni("libjni_zero_sample") { - if (enable_jni_multiplexing) { - _linker_script = "sample_lib_multiplexing_version_script.txt" - } else { - _linker_script = "sample_lib_version_script.txt" - } + _linker_script = "sample_lib_version_script.txt" sources = [ "sample_entry_point.cc" ] deps = [ diff --git a/naiveproxy/src/third_party/jni_zero/sample/sample_lib_multiplexing_version_script.txt b/naiveproxy/src/third_party/jni_zero/sample/sample_lib_multiplexing_version_script.txt deleted file mode 100644 index 5f20f675aa..0000000000 --- a/naiveproxy/src/third_party/jni_zero/sample/sample_lib_multiplexing_version_script.txt +++ /dev/null @@ -1,7 +0,0 @@ -{ - global: - JNI_OnLoad; - Java_J_N__*; - local: - *; -}; diff --git a/naiveproxy/src/third_party/jni_zero/test/stub_conversions.h b/naiveproxy/src/third_party/jni_zero/test/stub_conversions.h index e9da49d212..d3164055d1 100644 --- a/naiveproxy/src/third_party/jni_zero/test/stub_conversions.h +++ b/naiveproxy/src/third_party/jni_zero/test/stub_conversions.h @@ -11,6 +11,7 @@ #include #include +#include "third_party/jni_zero/default_conversions.h" #include "third_party/jni_zero/jni_zero.h" #include "third_party/jni_zero/test/sample_for_tests.h" @@ -83,49 +84,5 @@ tests::CPPClass* FromJniType(JNIEnv* env, return nullptr; } -// If concepts are unavailable, we need these stubs to replace -// default_conversions.h/cc -#ifndef JNI_ZERO_ENABLE_TYPE_CONVERSIONS -EMPTY_PRIMITIVE_ARRAY_CONVERSIONS(int64_t) -EMPTY_PRIMITIVE_ARRAY_CONVERSIONS(int32_t) -EMPTY_PRIMITIVE_ARRAY_CONVERSIONS(int16_t) -EMPTY_PRIMITIVE_ARRAY_CONVERSIONS(uint16_t) -EMPTY_PRIMITIVE_ARRAY_CONVERSIONS(uint8_t) -EMPTY_PRIMITIVE_ARRAY_CONVERSIONS(float) -EMPTY_PRIMITIVE_ARRAY_CONVERSIONS(double) -EMPTY_PRIMITIVE_ARRAY_CONVERSIONS(bool) - -EMPTY_OBJECT_ARRAY_CONVERSIONS(const char*) -EMPTY_OBJECT_ARRAY_CONVERSIONS(std::string) -EMPTY_OBJECT_ARRAY_CONVERSIONS(ScopedJavaLocalRef) -EMPTY_OBJECT_ARRAY_CONVERSIONS(tests::CPPClass) - -EMPTY_LIST_CONVERSIONS(std::string) -EMPTY_LIST_CONVERSIONS(ScopedJavaLocalRef) - -EMPTY_COLLECTION_CONVERSIONS(std::string) -EMPTY_COLLECTION_CONVERSIONS(ScopedJavaLocalRef) - -template <> -std::map -FromJniType>(JNIEnv* env, - const JavaRef& input) { - return {}; -} -template <> -ScopedJavaLocalRef ToJniType>( - JNIEnv* env, - const std::map& input) { - return {}; -} - -template <> -inline ByteArrayView FromJniArray( - JNIEnv* env, - const JavaRef& j_object) { - return ByteArrayView(env, nullptr); -} -#endif // #ifndef JNI_ZERO_ENABLE_TYPE_CONVERSIONS - } // namespace jni_zero #endif diff --git a/naiveproxy/src/third_party/jni_zero/type_conversions.h b/naiveproxy/src/third_party/jni_zero/type_conversions.h index 3b0b255db5..9b3390bfe2 100644 --- a/naiveproxy/src/third_party/jni_zero/type_conversions.h +++ b/naiveproxy/src/third_party/jni_zero/type_conversions.h @@ -7,17 +7,15 @@ #include +#include +#include + #include "third_party/jni_zero/java_refs.h" -#if defined(__cpp_concepts) && __cpp_concepts >= 201907L #define JNI_ZERO_ENABLE_TYPE_CONVERSIONS 1 -#else -#define JNI_ZERO_ENABLE_TYPE_CONVERSIONS 0 -#endif namespace jni_zero { -#if JNI_ZERO_ENABLE_TYPE_CONVERSIONS #define JNI_ZERO_CONVERSION_FAILED_MSG(name) \ "Failed to find a " name \ " specialization for the given type. Did you forget to include the " \ @@ -25,9 +23,74 @@ namespace jni_zero { "If this error originates from a generated _jni.h file, make sure that " \ "the header that declares the specialization is #included before the " \ "_jni.h one." -#else -#define JNI_ZERO_CONVERSION_FAILED_MSG(x) "Use of @JniType requires C++20." -#endif + +namespace internal { +template +concept IsJavaRef = std::is_base_of_v, T>; + +template +concept HasReserve = requires(T t) { t.reserve(0); }; + +template +concept HasPushBack = requires(T t, T::value_type v) { t.push_back(v); }; + +template +concept HasInsert = requires(T t, T::value_type v) { t.insert(v); }; + +template +concept IsMap = requires(T t) { + typename T::key_type; + typename T::mapped_type; +}; + +template +concept IsContainer = requires(T t) { + requires !IsMap; + typename T::value_type; + t.begin(); + t.end(); + t.size(); +}; + +template +concept IsObjectContainer = + IsContainer && !std::is_arithmetic_v; + +template +concept IsOptional = !std::is_arithmetic_v && + std::same_as>; + +template +concept IsPrimitive = std::is_arithmetic::value; + +template +concept HasSpecificSpecialization = requires(T t) { + requires IsMap || IsObjectContainer || IsOptional || IsPrimitive; +}; + +// Used to allow for the c++ type to be non-primitive even if the java type is +// primitive, when doing type conversions. primitive<->primitive conversions use +// static_cast while From/ToJniType is used when the c++ type is non-primitive. +template +struct PrimitiveConvert { + static constexpr CppType FromJniType(JNIEnv* env, JavaType v) { + if constexpr (std::is_arithmetic_v || std::is_enum_v) { + return static_cast(v); + } else { + return FromJniType(env, v); + } + } + + static constexpr JavaType ToJniType(JNIEnv* env, CppType v) { + if constexpr (std::is_arithmetic_v || std::is_enum_v) { + return static_cast(v); + } else { + return ToJniType(env, v); + } + } +}; + +} // namespace internal template inline T FromJniType(JNIEnv* env, const JavaRef& obj) { @@ -35,10 +98,17 @@ inline T FromJniType(JNIEnv* env, const JavaRef& obj) { } template + requires(!internal::HasSpecificSpecialization) inline ScopedJavaLocalRef ToJniType(JNIEnv* env, const T& obj) { static_assert(sizeof(T) == 0, JNI_ZERO_CONVERSION_FAILED_MSG("ToJniType")); } +template + requires internal::IsPrimitive +inline ScopedJavaLocalRef ToJniType(JNIEnv* env, T obj) { + static_assert(sizeof(T) == 0, JNI_ZERO_CONVERSION_FAILED_MSG("ToJniType")); +} + // Allow conversions using pointers by wrapping non-pointer conversions. // Cannot live in default_conversions.h because we want code to be able to // specialize it. @@ -50,17 +120,15 @@ inline ScopedJavaLocalRef ToJniType(JNIEnv* env, T* value) { return ToJniType(env, *value); } -#if JNI_ZERO_ENABLE_TYPE_CONVERSIONS #undef JNI_ZERO_CONVERSION_FAILED_MSG #define JNI_ZERO_CONVERSION_FAILED_MSG(name) \ "Failed to find a " name \ " specialization for the given type.\n" \ "If this error is from a generated _jni.h file, ensure that the type " \ "conforms to the container concepts defined in " \ - "jni_zero/default_conversions.h.\n" \ + "jni_zero/type_conversions.h.\n" \ "If this error is from a non-generated call, ensure that there " \ "exists an #include for jni_zero/default_conversions.h." -#endif // Convert from an stl container to a Java array. Uses ToJniType() on each // element. diff --git a/naiveproxy/src/third_party/libc++/README.chromium b/naiveproxy/src/third_party/libc++/README.chromium index 235c7d6070..51a04ffb43 100644 --- a/naiveproxy/src/third_party/libc++/README.chromium +++ b/naiveproxy/src/third_party/libc++/README.chromium @@ -2,7 +2,7 @@ Name: libcxx Short Name: libc++ URL: http://libcxx.llvm.org/ Version: 1.0 -License: MIT, University of Illinois/NCSA Open Source License +License: NCSA, Apache-with-LLVM-Exception, MIT License File: src/LICENSE.TXT Security Critical: yes Shipped: yes diff --git a/naiveproxy/src/third_party/libc++/src/docs/FeatureTestMacroTable.rst b/naiveproxy/src/third_party/libc++/src/docs/FeatureTestMacroTable.rst index 3c4a133326..cfb0e5cfb1 100644 --- a/naiveproxy/src/third_party/libc++/src/docs/FeatureTestMacroTable.rst +++ b/naiveproxy/src/third_party/libc++/src/docs/FeatureTestMacroTable.rst @@ -458,6 +458,8 @@ Status ---------------------------------------------------------- ----------------- ``__cpp_lib_mdspan`` ``202406L`` ---------------------------------------------------------- ----------------- + ``__cpp_lib_not_fn`` ``202306L`` + ---------------------------------------------------------- ----------------- ``__cpp_lib_optional_range_support`` *unimplemented* ---------------------------------------------------------- ----------------- ``__cpp_lib_out_ptr`` ``202311L`` diff --git a/naiveproxy/src/third_party/libc++/src/docs/Hardening.rst b/naiveproxy/src/third_party/libc++/src/docs/Hardening.rst index 4002f40e1d..d399b94d27 100644 --- a/naiveproxy/src/third_party/libc++/src/docs/Hardening.rst +++ b/naiveproxy/src/third_party/libc++/src/docs/Hardening.rst @@ -311,7 +311,10 @@ ABI configuration. ABI options ----------- -Vendors can use the following ABI options to enable additional hardening checks: +Vendors can use some ABI options at CMake configuration time (when building libc++ +itself) to enable additional hardening checks. This is done by passing these +macros as ``-DLIBCXX_ABI_DEFINES="_LIBCPP_ABI_FOO;_LIBCPP_ABI_BAR;etc"`` at +CMake configuration time. The available options are: - ``_LIBCPP_ABI_BOUNDED_ITERATORS`` -- changes the iterator type of select containers (see below) to a bounded iterator that keeps track of whether it's @@ -341,7 +344,7 @@ Vendors can use the following ABI options to enable additional hardening checks: ABI impact: changes the iterator type of ``vector`` (except ``vector``). -- ``_LIBCPP_ABI_BOUNDED_UNIQUE_PTR``` -- tracks the bounds of the array stored inside +- ``_LIBCPP_ABI_BOUNDED_UNIQUE_PTR`` -- tracks the bounds of the array stored inside a ``std::unique_ptr``, allowing it to trap when accessed out-of-bounds. This requires the ``std::unique_ptr`` to be created using an API like ``std::make_unique`` or ``std::make_unique_for_overwrite``, otherwise the bounds information is not available @@ -407,7 +410,7 @@ Hardened containers status - ✅ - ❌ * - ``forward_list`` - - ❌ + - ✅ - ❌ * - ``deque`` - ✅ diff --git a/naiveproxy/src/third_party/libc++/src/docs/ReleaseNotes/19.rst b/naiveproxy/src/third_party/libc++/src/docs/ReleaseNotes/19.rst index e8f76773c5..aec7865d52 100644 --- a/naiveproxy/src/third_party/libc++/src/docs/ReleaseNotes/19.rst +++ b/naiveproxy/src/third_party/libc++/src/docs/ReleaseNotes/19.rst @@ -126,6 +126,8 @@ Improvements and New Features - In C++23 and C++26 the number of transitive includes in several headers has been reduced, improving the compilation speed. +- ``std::stable_sort`` uses radix sort for integral types now, which can improve the performance up to 10 times, depending + on type of sorted elements and the initial state of the sorted array. Deprecations and Removals ------------------------- diff --git a/naiveproxy/src/third_party/libc++/src/docs/ReleaseNotes/20.rst b/naiveproxy/src/third_party/libc++/src/docs/ReleaseNotes/20.rst index c8a07fb8b7..228c3f3432 100644 --- a/naiveproxy/src/third_party/libc++/src/docs/ReleaseNotes/20.rst +++ b/naiveproxy/src/third_party/libc++/src/docs/ReleaseNotes/20.rst @@ -73,6 +73,39 @@ Improvements and New Features optimized, resulting in a performance improvement of up to 2x for trivial element types (e.g., `std::vector`), and up to 3.4x for non-trivial element types (e.g., `std::vector>`). +- On Windows, ````'s ``std::system_category`` is now distinct from ``std::generic_category``. The behavior + on other operating systems is unchanged. + + On Windows -- unlike on Unix systems -- the libc and system APIs use distinct error codes. The libc functions return + ``errno.h`` error codes via the ``errno`` global, while Win32 API functions return ``winerror.h`` error codes via + ``GetLastError()``. + + The C++ standard's ``std::error_code`` and ``std::error_category`` functionality was designed to support multiple + error domains, precisely in order to handle situations such as this. However, libc++ formerly treated + ``generic_category()`` and ``system_category()`` as equivalent, even on Windows. It now implements the intended split, + where ``system_category`` represents native ``winerror.h`` error codes, and ``generic_category`` represents libc error + codes (and, equivalently, ``std::errc::*`` errors). + + This change enables code like ``std::error_code(GetLastError(), std::system_category()) == + std::errc::invalid_argument`` to function as desired: constructing an ``error_code`` with the Windows error number in + the "system" category, and then mapping it to a generic code with ``error_condition``, for comparison with the + ``std::errc`` constant. + + This is an incompatible change: ``std::error_code(ENOSYS, std::system_category()) == + std::errc::function_not_supported`` would formerly have returned true, but now returns false on Windows. Code + providing a number from the ``errno.h`` domain should be migrated to construct a ``generic_category`` error_code, + instead. (E.g., use ``std::error_code(ENOSYS, std::generic_category())``). The new behavior matches MSVC. + +- On Windows, the ``std::filesystem`` library now returns the Win32 ``system_category`` error codes, where it's feasible + to do so. This allows interrogation and reporting of the original error code, which is useful if multiple Windows + errors map to a single generic error (such as with ``std::errc::no_such_file_or_directory``). + + This is also a slightly-incompatible API change: code inspecting the raw integer value from the returned error_code + expecting an integer from ``generic_category`` (e.g. ``err.value() == ENOTDIR``) will not work as desired. Instead, + such code should use the comparison operators which implicitly handle eror mappings, ``err == + std::errc::not_a_directory``, or use ``err.default_error_condition()`` to map to an ``error_condition``, and then test + its ``value()`` and ``category()``. + Deprecations and Removals ------------------------- @@ -84,17 +117,17 @@ Deprecations and Removals removed in language modes prior to C++20. If you are using these features prior to C++20, you will need to update to ``-std=c++20``. -- TODO: The relational operators for ``std::chrono::weekday`` will be removed entirely, and the - ``_LIBCPP_ENABLE_REMOVED_WEEKDAY_RELATIONAL_OPERATORS`` macro that was used to re-enable this extension will be - ignored in LLVM 20. +- The relational operators for ``std::chrono::weekday`` has been removed entirely, and the + ``_LIBCPP_ENABLE_REMOVED_WEEKDAY_RELATIONAL_OPERATORS`` macro is now ignored. - The ``_LIBCPP_ENABLE_REMOVED_ALLOCATOR_CONST`` macro no longer has any effect. ``std::allocator`` is not supported as an extension anymore, please migrate any code that uses e.g. ``std::vector`` to be standards conforming. -- Non-conforming member typedefs ``base``, ``iterator`` and ``const_iterator`` of ``std::bitset``, and member typedef - ``base`` of ``std::forward_list`` and ``std::list`` are removed. Previously, they were private but could cause - ambiguity in name lookup. Code that expects such ambiguity will possibly not compile in LLVM 20. +- Non-conforming member typedefs ``base``, ``iterator``, ``const_iterator``, and ``const_reference`` of ``std::bitset``, + and member typedef ``base`` of ``std::forward_list`` and ``std::list`` are removed. Previously, these member typedefs + (except ``const_reference``) were private but could cause ambiguity in name lookup. Code that expects such ambiguity + will possibly not compile in LLVM 20. - The function ``__libcpp_verbose_abort()`` is now ``noexcept``, to match ``std::terminate()``. (The combination of ``noexcept`` and ``[[noreturn]]`` has special significance for function effects analysis.) For backwards compatibility, diff --git a/naiveproxy/src/third_party/libc++/src/docs/Status/Cxx2cPapers.csv b/naiveproxy/src/third_party/libc++/src/docs/Status/Cxx2cPapers.csv index 3a8a794ca4..aa896e85fc 100644 --- a/naiveproxy/src/third_party/libc++/src/docs/Status/Cxx2cPapers.csv +++ b/naiveproxy/src/third_party/libc++/src/docs/Status/Cxx2cPapers.csv @@ -24,7 +24,7 @@ "`P1383R2 `__","More ``constexpr`` for ```` and ````","2023-06 (Varna)","","","" "`P2734R0 `__","Adding the new SI prefixes","2023-06 (Varna)","|Complete|","17","" "`P2548R6 `__","``copyable_function``","2023-06 (Varna)","","","" -"`P2714R1 `__","Bind front and back to NTTP callables","2023-06 (Varna)","","","" +"`P2714R1 `__","Bind front and back to NTTP callables","2023-06 (Varna)","|Partial|","20","``not_fn`` only" "`P2630R4 `__","``submdspan``","2023-06 (Varna)","","","" "","","","","","" "`P0543R3 `__","Saturation arithmetic","2023-11 (Kona)","|Complete|","18","" diff --git a/naiveproxy/src/third_party/libc++/src/docs/TestingLibcxx.rst b/naiveproxy/src/third_party/libc++/src/docs/TestingLibcxx.rst index cf092fabd0..e98b96bfb4 100644 --- a/naiveproxy/src/third_party/libc++/src/docs/TestingLibcxx.rst +++ b/naiveproxy/src/third_party/libc++/src/docs/TestingLibcxx.rst @@ -459,6 +459,29 @@ we only want to make sure they don't rot. Do not rely on the results of benchmar run through ``check-cxx`` for anything, instead run the benchmarks manually using the instructions for running individual tests. +If you want to compare the results of different benchmark runs, we recommend using the +``libcxx-compare-benchmarks`` helper tool. First, configure CMake in a build directory +and run the benchmark: + +.. code-block:: bash + + $ cmake -S runtimes -B [...] + $ libcxx/utils/libcxx-lit libcxx/test/benchmarks/string.bench.cpp --param optimization=speed + +Then, do the same for the second configuration you want to test. Use a different build +directory for that configuration: + +.. code-block:: bash + + $ cmake -S runtimes -B [...] + $ libcxx/utils/libcxx-lit libcxx/test/benchmarks/string.bench.cpp --param optimization=speed + +Finally, use ``libcxx-compare-benchmarks`` to compare both: + +.. code-block:: bash + + $ libcxx/utils/libcxx-compare-benchmarks libcxx/test/benchmarks/string.bench.cpp + .. _`Google Benchmark`: https://github.com/google/benchmark .. _testing-hardening-assertions: diff --git a/naiveproxy/src/third_party/libc++/src/include/CMakeLists.txt b/naiveproxy/src/third_party/libc++/src/include/CMakeLists.txt index 0b484ebe5e..f7721b1047 100644 --- a/naiveproxy/src/third_party/libc++/src/include/CMakeLists.txt +++ b/naiveproxy/src/third_party/libc++/src/include/CMakeLists.txt @@ -73,6 +73,7 @@ set(files __algorithm/prev_permutation.h __algorithm/pstl.h __algorithm/push_heap.h + __algorithm/radix_sort.h __algorithm/ranges_adjacent_find.h __algorithm/ranges_all_of.h __algorithm/ranges_any_of.h @@ -497,7 +498,6 @@ set(files __locale __locale_dir/locale_base_api.h __locale_dir/locale_base_api/android.h - __locale_dir/locale_base_api/bsd_locale_defaults.h __locale_dir/locale_base_api/bsd_locale_fallbacks.h __locale_dir/locale_base_api/fuchsia.h __locale_dir/locale_base_api/ibm.h diff --git a/naiveproxy/src/third_party/libc++/src/include/__algorithm/comp_ref_type.h b/naiveproxy/src/third_party/libc++/src/include/__algorithm/comp_ref_type.h index c367fbb91a..6a9d5cef26 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__algorithm/comp_ref_type.h +++ b/naiveproxy/src/third_party/libc++/src/include/__algorithm/comp_ref_type.h @@ -56,10 +56,10 @@ struct __debug_less { // Pass the comparator by lvalue reference. Or in the debug mode, using a debugging wrapper that stores a reference. #if _LIBCPP_HARDENING_MODE == _LIBCPP_HARDENING_MODE_DEBUG template -using __comp_ref_type = __debug_less<_Comp>; +using __comp_ref_type _LIBCPP_NODEBUG = __debug_less<_Comp>; #else template -using __comp_ref_type = _Comp&; +using __comp_ref_type _LIBCPP_NODEBUG = _Comp&; #endif _LIBCPP_END_NAMESPACE_STD diff --git a/naiveproxy/src/third_party/libc++/src/include/__algorithm/copy.h b/naiveproxy/src/third_party/libc++/src/include/__algorithm/copy.h index 4f30b2050a..962aa90059 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__algorithm/copy.h +++ b/naiveproxy/src/third_party/libc++/src/include/__algorithm/copy.h @@ -47,7 +47,7 @@ struct __copy_impl { template struct _CopySegment { - using _Traits = __segmented_iterator_traits<_InIter>; + using _Traits _LIBCPP_NODEBUG = __segmented_iterator_traits<_InIter>; _OutIter& __result_; diff --git a/naiveproxy/src/third_party/libc++/src/include/__algorithm/iterator_operations.h b/naiveproxy/src/third_party/libc++/src/include/__algorithm/iterator_operations.h index 6cdb0aec9b..e5c89c1e67 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__algorithm/iterator_operations.h +++ b/naiveproxy/src/third_party/libc++/src/include/__algorithm/iterator_operations.h @@ -48,13 +48,13 @@ struct _RangeAlgPolicy {}; template <> struct _IterOps<_RangeAlgPolicy> { template - using __value_type = iter_value_t<_Iter>; + using __value_type _LIBCPP_NODEBUG = iter_value_t<_Iter>; template - using __iterator_category = ranges::__iterator_concept<_Iter>; + using __iterator_category _LIBCPP_NODEBUG = ranges::__iterator_concept<_Iter>; template - using __difference_type = iter_difference_t<_Iter>; + using __difference_type _LIBCPP_NODEBUG = iter_difference_t<_Iter>; static constexpr auto advance = ranges::advance; static constexpr auto distance = ranges::distance; @@ -72,13 +72,13 @@ struct _ClassicAlgPolicy {}; template <> struct _IterOps<_ClassicAlgPolicy> { template - using __value_type = typename iterator_traits<_Iter>::value_type; + using __value_type _LIBCPP_NODEBUG = typename iterator_traits<_Iter>::value_type; template - using __iterator_category = typename iterator_traits<_Iter>::iterator_category; + using __iterator_category _LIBCPP_NODEBUG = typename iterator_traits<_Iter>::iterator_category; template - using __difference_type = typename iterator_traits<_Iter>::difference_type; + using __difference_type _LIBCPP_NODEBUG = typename iterator_traits<_Iter>::difference_type; // advance template @@ -94,10 +94,10 @@ struct _IterOps<_ClassicAlgPolicy> { } template - using __deref_t = decltype(*std::declval<_Iter&>()); + using __deref_t _LIBCPP_NODEBUG = decltype(*std::declval<_Iter&>()); template - using __move_t = decltype(std::move(*std::declval<_Iter&>())); + using __move_t _LIBCPP_NODEBUG = decltype(std::move(*std::declval<_Iter&>())); template _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 static void __validate_iter_reference() { @@ -217,7 +217,7 @@ private: }; template -using __policy_iter_diff_t = typename _IterOps<_AlgPolicy>::template __difference_type<_Iter>; +using __policy_iter_diff_t _LIBCPP_NODEBUG = typename _IterOps<_AlgPolicy>::template __difference_type<_Iter>; _LIBCPP_END_NAMESPACE_STD diff --git a/naiveproxy/src/third_party/libc++/src/include/__algorithm/mismatch.h b/naiveproxy/src/third_party/libc++/src/include/__algorithm/mismatch.h index f5855379f6..a6836792c0 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__algorithm/mismatch.h +++ b/naiveproxy/src/third_party/libc++/src/include/__algorithm/mismatch.h @@ -78,7 +78,7 @@ __mismatch_vectorized(_Iter __first1, _Iter __last1, _Iter __first2) { } for (size_t __i = 0; __i != __unroll_count; ++__i) { - if (auto __cmp_res = std::__as_mask(__lhs[__i] == __rhs[__i]); !std::__all_of(__cmp_res)) { + if (auto __cmp_res = __lhs[__i] == __rhs[__i]; !std::__all_of(__cmp_res)) { auto __offset = __i * __vec_size + std::__find_first_not_set(__cmp_res); return {__first1 + __offset, __first2 + __offset}; } @@ -90,7 +90,7 @@ __mismatch_vectorized(_Iter __first1, _Iter __last1, _Iter __first2) { // check the remaining 0-3 vectors while (static_cast(__last1 - __first1) >= __vec_size) { - if (auto __cmp_res = std::__as_mask(std::__load_vector<__vec>(__first1) == std::__load_vector<__vec>(__first2)); + if (auto __cmp_res = std::__load_vector<__vec>(__first1) == std::__load_vector<__vec>(__first2); !std::__all_of(__cmp_res)) { auto __offset = std::__find_first_not_set(__cmp_res); return {__first1 + __offset, __first2 + __offset}; @@ -107,8 +107,8 @@ __mismatch_vectorized(_Iter __first1, _Iter __last1, _Iter __first2) { if (static_cast(__first1 - __orig_first1) >= __vec_size) { __first1 = __last1 - __vec_size; __first2 = __last2 - __vec_size; - auto __offset = std::__find_first_not_set( - std::__as_mask(std::__load_vector<__vec>(__first1) == std::__load_vector<__vec>(__first2))); + auto __offset = + std::__find_first_not_set(std::__load_vector<__vec>(__first1) == std::__load_vector<__vec>(__first2)); return {__first1 + __offset, __first2 + __offset}; } // else loop over the elements individually } diff --git a/naiveproxy/src/third_party/libc++/src/include/__algorithm/move.h b/naiveproxy/src/third_party/libc++/src/include/__algorithm/move.h index 005099dcac..6f3b0eb5d2 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__algorithm/move.h +++ b/naiveproxy/src/third_party/libc++/src/include/__algorithm/move.h @@ -50,7 +50,7 @@ struct __move_impl { template struct _MoveSegment { - using _Traits = __segmented_iterator_traits<_InIter>; + using _Traits _LIBCPP_NODEBUG = __segmented_iterator_traits<_InIter>; _OutIter& __result_; diff --git a/naiveproxy/src/third_party/libc++/src/include/__algorithm/radix_sort.h b/naiveproxy/src/third_party/libc++/src/include/__algorithm/radix_sort.h new file mode 100644 index 0000000000..95f04a8bb3 --- /dev/null +++ b/naiveproxy/src/third_party/libc++/src/include/__algorithm/radix_sort.h @@ -0,0 +1,332 @@ +// -*- C++ -*- +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef _LIBCPP___ALGORITHM_RADIX_SORT_H +#define _LIBCPP___ALGORITHM_RADIX_SORT_H + +// This is an implementation of classic LSD radix sort algorithm, running in linear time and using `O(max(N, M))` +// additional memory, where `N` is size of an input range, `M` - maximum value of +// a radix of the sorted integer type. Type of the radix and its maximum value are determined at compile time +// based on type returned by function `__radix`. The default radix is uint8. + +// The algorithm is equivalent to several consecutive calls of counting sort for each +// radix of the sorted numbers from low to high byte. +// The algorithm uses a temporary buffer of size equal to size of the input range. Each `i`-th pass +// of the algorithm sorts values by `i`-th radix and moves values to the temporary buffer (for each even `i`, counted +// from zero), or moves them back to the initial range (for each odd `i`). If there is only one radix in sorted integers +// (e.g. int8), the sorted values are placed to the buffer, and then moved back to the initial range. + +// The implementation also has several optimizations: +// - the counters for the counting sort are calculated in one pass for all radices; +// - if all values of a radix are the same, we do not sort that radix, and just move items to the buffer; +// - if two consecutive radices satisfies condition above, we do nothing for these two radices. + +#include <__algorithm/for_each.h> +#include <__algorithm/move.h> +#include <__bit/bit_log2.h> +#include <__bit/countl.h> +#include <__config> +#include <__functional/identity.h> +#include <__iterator/distance.h> +#include <__iterator/iterator_traits.h> +#include <__iterator/move_iterator.h> +#include <__iterator/next.h> +#include <__iterator/reverse_iterator.h> +#include <__numeric/partial_sum.h> +#include <__type_traits/decay.h> +#include <__type_traits/enable_if.h> +#include <__type_traits/invoke.h> +#include <__type_traits/is_assignable.h> +#include <__type_traits/is_integral.h> +#include <__type_traits/is_unsigned.h> +#include <__type_traits/make_unsigned.h> +#include <__utility/forward.h> +#include <__utility/integer_sequence.h> +#include <__utility/move.h> +#include <__utility/pair.h> +#include +#include +#include +#include + +#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) +# pragma GCC system_header +#endif + +_LIBCPP_PUSH_MACROS +#include <__undef_macros> + +_LIBCPP_BEGIN_NAMESPACE_STD + +#if _LIBCPP_STD_VER >= 14 + +template +_LIBCPP_HIDE_FROM_ABI pair<_OutputIterator, __iter_value_type<_InputIterator>> +__partial_sum_max(_InputIterator __first, _InputIterator __last, _OutputIterator __result) { + if (__first == __last) + return {__result, 0}; + + auto __max = *__first; + __iter_value_type<_InputIterator> __sum = *__first; + *__result = __sum; + + while (++__first != __last) { + if (__max < *__first) { + __max = *__first; + } + __sum = std::move(__sum) + *__first; + *++__result = __sum; + } + return {++__result, __max}; +} + +template +struct __radix_sort_traits { + using __image_type _LIBCPP_NODEBUG = decay_t::type>; + static_assert(is_unsigned<__image_type>::value); + + using __radix_type _LIBCPP_NODEBUG = decay_t::type>; + static_assert(is_integral<__radix_type>::value); + + static constexpr auto __radix_value_range = numeric_limits<__radix_type>::max() + 1; + static constexpr auto __radix_size = std::__bit_log2(__radix_value_range); + static constexpr auto __radix_count = sizeof(__image_type) * CHAR_BIT / __radix_size; +}; + +template +struct __counting_sort_traits { + using __image_type _LIBCPP_NODEBUG = decay_t::type>; + static_assert(is_unsigned<__image_type>::value); + + static constexpr const auto __value_range = numeric_limits<__image_type>::max() + 1; + static constexpr auto __radix_size = std::__bit_log2(__value_range); +}; + +template +_LIBCPP_HIDE_FROM_ABI auto __nth_radix(size_t __radix_number, _Radix __radix, _Integer __n) { + static_assert(is_unsigned<_Integer>::value); + using __traits = __counting_sort_traits<_Integer, _Radix>; + + return __radix(static_cast<_Integer>(__n >> __traits::__radix_size * __radix_number)); +} + +template +_LIBCPP_HIDE_FROM_ABI void +__collect(_ForwardIterator __first, _ForwardIterator __last, _Map __map, _RandomAccessIterator __counters) { + using __value_type = __iter_value_type<_ForwardIterator>; + using __traits = __counting_sort_traits<__value_type, _Map>; + + std::for_each(__first, __last, [&__counters, &__map](const auto& __preimage) { ++__counters[__map(__preimage)]; }); + + const auto __counters_end = __counters + __traits::__value_range; + std::partial_sum(__counters, __counters_end, __counters); +} + +template +_LIBCPP_HIDE_FROM_ABI void +__dispose(_ForwardIterator __first, + _ForwardIterator __last, + _RandomAccessIterator1 __result, + _Map __map, + _RandomAccessIterator2 __counters) { + std::for_each(__first, __last, [&__result, &__counters, &__map](auto&& __preimage) { + auto __index = __counters[__map(__preimage)]++; + __result[__index] = std::move(__preimage); + }); +} + +template +_LIBCPP_HIDE_FROM_ABI bool __collect_impl( + _ForwardIterator __first, + _ForwardIterator __last, + _Map __map, + _Radix __radix, + _RandomAccessIterator1 __counters, + _RandomAccessIterator2 __maximums, + index_sequence<_Radices...>) { + using __value_type = __iter_value_type<_ForwardIterator>; + constexpr auto __radix_value_range = __radix_sort_traits<__value_type, _Map, _Radix>::__radix_value_range; + + auto __previous = numeric_limits::type>::min(); + auto __is_sorted = true; + std::for_each(__first, __last, [&__counters, &__map, &__radix, &__previous, &__is_sorted](const auto& __value) { + auto __current = __map(__value); + __is_sorted &= (__current >= __previous); + __previous = __current; + + (++__counters[_Radices][std::__nth_radix(_Radices, __radix, __current)], ...); + }); + + ((__maximums[_Radices] = + std::__partial_sum_max(__counters[_Radices], __counters[_Radices] + __radix_value_range, __counters[_Radices]) + .second), + ...); + + return __is_sorted; +} + +template +_LIBCPP_HIDE_FROM_ABI bool +__collect(_ForwardIterator __first, + _ForwardIterator __last, + _Map __map, + _Radix __radix, + _RandomAccessIterator1 __counters, + _RandomAccessIterator2 __maximums) { + using __value_type = __iter_value_type<_ForwardIterator>; + constexpr auto __radix_count = __radix_sort_traits<__value_type, _Map, _Radix>::__radix_count; + return std::__collect_impl( + __first, __last, __map, __radix, __counters, __maximums, make_index_sequence<__radix_count>()); +} + +template +_LIBCPP_HIDE_FROM_ABI void __dispose_backward( + _BidirectionalIterator __first, + _BidirectionalIterator __last, + _RandomAccessIterator1 __result, + _Map __map, + _RandomAccessIterator2 __counters) { + std::for_each(std::make_reverse_iterator(__last), + std::make_reverse_iterator(__first), + [&__result, &__counters, &__map](auto&& __preimage) { + auto __index = --__counters[__map(__preimage)]; + __result[__index] = std::move(__preimage); + }); +} + +template +_LIBCPP_HIDE_FROM_ABI _RandomAccessIterator +__counting_sort_impl(_ForwardIterator __first, _ForwardIterator __last, _RandomAccessIterator __result, _Map __map) { + using __value_type = __iter_value_type<_ForwardIterator>; + using __traits = __counting_sort_traits<__value_type, _Map>; + + __iter_diff_t<_RandomAccessIterator> __counters[__traits::__value_range + 1] = {0}; + + std::__collect(__first, __last, __map, std::next(std::begin(__counters))); + std::__dispose(__first, __last, __result, __map, std::begin(__counters)); + + return __result + __counters[__traits::__value_range]; +} + +template , _Map, _Radix>::__radix_count == 1, + int> = 0> +_LIBCPP_HIDE_FROM_ABI void __radix_sort_impl( + _RandomAccessIterator1 __first, + _RandomAccessIterator1 __last, + _RandomAccessIterator2 __buffer, + _Map __map, + _Radix __radix) { + auto __buffer_end = std::__counting_sort_impl(__first, __last, __buffer, [&__map, &__radix](const auto& __value) { + return __radix(__map(__value)); + }); + + std::move(__buffer, __buffer_end, __first); +} + +template < + class _RandomAccessIterator1, + class _RandomAccessIterator2, + class _Map, + class _Radix, + enable_if_t< __radix_sort_traits<__iter_value_type<_RandomAccessIterator1>, _Map, _Radix>::__radix_count % 2 == 0, + int> = 0 > +_LIBCPP_HIDE_FROM_ABI void __radix_sort_impl( + _RandomAccessIterator1 __first, + _RandomAccessIterator1 __last, + _RandomAccessIterator2 __buffer_begin, + _Map __map, + _Radix __radix) { + using __value_type = __iter_value_type<_RandomAccessIterator1>; + using __traits = __radix_sort_traits<__value_type, _Map, _Radix>; + + __iter_diff_t<_RandomAccessIterator1> __counters[__traits::__radix_count][__traits::__radix_value_range] = {{0}}; + __iter_diff_t<_RandomAccessIterator1> __maximums[__traits::__radix_count] = {0}; + const auto __is_sorted = std::__collect(__first, __last, __map, __radix, __counters, __maximums); + if (!__is_sorted) { + const auto __range_size = std::distance(__first, __last); + auto __buffer_end = __buffer_begin + __range_size; + for (size_t __radix_number = 0; __radix_number < __traits::__radix_count; __radix_number += 2) { + const auto __n0th_is_single = __maximums[__radix_number] == __range_size; + const auto __n1th_is_single = __maximums[__radix_number + 1] == __range_size; + + if (__n0th_is_single && __n1th_is_single) { + continue; + } + + if (__n0th_is_single) { + std::move(__first, __last, __buffer_begin); + } else { + auto __n0th = [__radix_number, &__map, &__radix](const auto& __v) { + return std::__nth_radix(__radix_number, __radix, __map(__v)); + }; + std::__dispose_backward(__first, __last, __buffer_begin, __n0th, __counters[__radix_number]); + } + + if (__n1th_is_single) { + std::move(__buffer_begin, __buffer_end, __first); + } else { + auto __n1th = [__radix_number, &__map, &__radix](const auto& __v) { + return std::__nth_radix(__radix_number + 1, __radix, __map(__v)); + }; + std::__dispose_backward(__buffer_begin, __buffer_end, __first, __n1th, __counters[__radix_number + 1]); + } + } + } +} + +_LIBCPP_HIDE_FROM_ABI constexpr auto __shift_to_unsigned(bool __b) { return __b; } + +template +_LIBCPP_HIDE_FROM_ABI constexpr auto __shift_to_unsigned(_Ip __n) { + constexpr const auto __min_value = numeric_limits<_Ip>::min(); + return static_cast >(__n ^ __min_value); +} + +struct __low_byte_fn { + template + _LIBCPP_HIDE_FROM_ABI constexpr uint8_t operator()(_Ip __integer) const { + static_assert(is_unsigned<_Ip>::value); + + return static_cast(__integer & 0xff); + } +}; + +template +_LIBCPP_HIDE_FROM_ABI void +__radix_sort(_RandomAccessIterator1 __first, + _RandomAccessIterator1 __last, + _RandomAccessIterator2 __buffer, + _Map __map, + _Radix __radix) { + auto __map_to_unsigned = [__map = std::move(__map)](const auto& __x) { return std::__shift_to_unsigned(__map(__x)); }; + std::__radix_sort_impl(__first, __last, __buffer, __map_to_unsigned, __radix); +} + +template +_LIBCPP_HIDE_FROM_ABI void +__radix_sort(_RandomAccessIterator1 __first, _RandomAccessIterator1 __last, _RandomAccessIterator2 __buffer) { + std::__radix_sort(__first, __last, __buffer, __identity{}, __low_byte_fn{}); +} + +#endif // _LIBCPP_STD_VER >= 14 + +_LIBCPP_END_NAMESPACE_STD + +_LIBCPP_POP_MACROS + +#endif // _LIBCPP___ALGORITHM_RADIX_SORT_H diff --git a/naiveproxy/src/third_party/libc++/src/include/__algorithm/ranges_iterator_concept.h b/naiveproxy/src/third_party/libc++/src/include/__algorithm/ranges_iterator_concept.h index 2af891d3af..58790e95aa 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__algorithm/ranges_iterator_concept.h +++ b/naiveproxy/src/third_party/libc++/src/include/__algorithm/ranges_iterator_concept.h @@ -44,7 +44,7 @@ consteval auto __get_iterator_concept() { } template -using __iterator_concept = decltype(__get_iterator_concept<_Iter>()); +using __iterator_concept _LIBCPP_NODEBUG = decltype(__get_iterator_concept<_Iter>()); } // namespace ranges _LIBCPP_END_NAMESPACE_STD diff --git a/naiveproxy/src/third_party/libc++/src/include/__algorithm/ranges_unique_copy.h b/naiveproxy/src/third_party/libc++/src/include/__algorithm/ranges_unique_copy.h index 3b4a64e94c..ee7f0a0187 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__algorithm/ranges_unique_copy.h +++ b/naiveproxy/src/third_party/libc++/src/include/__algorithm/ranges_unique_copy.h @@ -60,7 +60,7 @@ struct __unique_copy { } template - using __algo_tag_t = decltype(__get_algo_tag<_InIter, _OutIter>()); + using __algo_tag_t _LIBCPP_NODEBUG = decltype(__get_algo_tag<_InIter, _OutIter>()); template _Sent, diff --git a/naiveproxy/src/third_party/libc++/src/include/__algorithm/simd_utils.h b/naiveproxy/src/third_party/libc++/src/include/__algorithm/simd_utils.h index 3ca79247bb..4e03723a32 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__algorithm/simd_utils.h +++ b/naiveproxy/src/third_party/libc++/src/include/__algorithm/simd_utils.h @@ -70,7 +70,7 @@ struct __get_as_integer_type_impl<8> { }; template -using __get_as_integer_type_t = typename __get_as_integer_type_impl::type; +using __get_as_integer_type_t _LIBCPP_NODEBUG = typename __get_as_integer_type_impl::type; // This isn't specialized for 64 byte vectors on purpose. They have the potential to significantly reduce performance // in mixed simd/non-simd workloads and don't provide any performance improvement for currently vectorized algorithms @@ -90,7 +90,7 @@ inline constexpr size_t __native_vector_size = 1; # endif template -using __simd_vector __attribute__((__ext_vector_type__(_Np))) = _ArithmeticT; +using __simd_vector __attribute__((__ext_vector_type__(_Np))) _LIBCPP_NODEBUG = _ArithmeticT; template inline constexpr size_t __simd_vector_size_v = []() -> size_t { @@ -106,7 +106,7 @@ _LIBCPP_HIDE_FROM_ABI _Tp __simd_vector_underlying_type_impl(__simd_vector<_Tp, } template -using __simd_vector_underlying_type_t = decltype(std::__simd_vector_underlying_type_impl(_VecT{})); +using __simd_vector_underlying_type_t _LIBCPP_NODEBUG = decltype(std::__simd_vector_underlying_type_impl(_VecT{})); // This isn't inlined without always_inline when loading chars. template @@ -116,65 +116,42 @@ template }(make_index_sequence<__simd_vector_size_v<_VecT>>{}); } -template -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI bool __all_of(__simd_vector __vec) noexcept { - return __builtin_reduce_and(__vec); +template +[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI bool __all_of(__simd_vector<_Tp, _Np> __vec) noexcept { + return __builtin_reduce_and(__builtin_convertvector(__vec, __simd_vector)); } template -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI auto __as_mask(__simd_vector<_Tp, _Np> __vec) noexcept { - static_assert(!is_same<_Tp, bool>::value, "vector type should not be a bool!"); - return __builtin_convertvector(__vec, __simd_vector); -} +[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI size_t __find_first_set(__simd_vector<_Tp, _Np> __vec) noexcept { + using __mask_vec = __simd_vector; -// This uses __builtin_convertvector around the __builtin_shufflevector to work around #107981. -template -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI __simd_vector -__extend_vector(__simd_vector __vec) noexcept { - using _VecT = __simd_vector; - if constexpr (_Np == 4) { - return __builtin_convertvector( - __builtin_shufflevector(__vec, _VecT{}, 0, 1, 2, 3, 4, 5, 6, 7), __simd_vector); - } else if constexpr (_Np == 2) { - return std::__extend_vector( - __builtin_convertvector(__builtin_shufflevector(__vec, _VecT{}, 0, 1, 2, 3), __simd_vector)); - } else if constexpr (_Np == 1) { - return std::__extend_vector( - __builtin_convertvector(__builtin_shufflevector(__vec, _VecT{}, 0, 1), __simd_vector)); - } else { - static_assert(sizeof(_VecT) == 0, "Unexpected vector size"); - } -} + // This has MSan disabled du to https://github.com/llvm/llvm-project/issues/85876 + auto __impl = [&](_MaskT) _LIBCPP_NO_SANITIZE("memory") noexcept { +# if defined(_LIBCPP_BIG_ENDIAN) + return std::min( + _Np, std::__countl_zero(__builtin_bit_cast(_MaskT, __builtin_convertvector(__vec, __mask_vec)))); +# else + return std::min( + _Np, std::__countr_zero(__builtin_bit_cast(_MaskT, __builtin_convertvector(__vec, __mask_vec)))); +# endif + }; -template -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI auto __to_int_mask(__simd_vector __vec) { - if constexpr (_Np < 8) { - return std::__bit_cast(std::__extend_vector(__vec)); - } else if constexpr (_Np == 8) { - return std::__bit_cast(__vec); - } else if constexpr (_Np == 16) { - return std::__bit_cast(__vec); - } else if constexpr (_Np == 32) { - return std::__bit_cast(__vec); - } else if constexpr (_Np == 64) { - return std::__bit_cast(__vec); + if constexpr (sizeof(__mask_vec) == sizeof(uint8_t)) { + return __impl(uint8_t{}); + } else if constexpr (sizeof(__mask_vec) == sizeof(uint16_t)) { + return __impl(uint16_t{}); + } else if constexpr (sizeof(__mask_vec) == sizeof(uint32_t)) { + return __impl(uint32_t{}); + } else if constexpr (sizeof(__mask_vec) == sizeof(uint64_t)) { + return __impl(uint64_t{}); } else { - static_assert(sizeof(__simd_vector) == 0, "Unexpected vector size"); + static_assert(sizeof(__mask_vec) == 0, "unexpected required size for mask integer type"); return 0; } } -template -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI size_t __find_first_set(__simd_vector __vec) noexcept { -# if defined(_LIBCPP_BIG_ENDIAN) - return std::min(_Np, std::__countl_zero(std::__to_int_mask(__vec))); -# else - return std::min(_Np, std::__countr_zero(std::__to_int_mask(__vec))); -# endif -} - -template -[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI size_t __find_first_not_set(__simd_vector __vec) noexcept { +template +[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI size_t __find_first_not_set(__simd_vector<_Tp, _Np> __vec) noexcept { return std::__find_first_set(~__vec); } diff --git a/naiveproxy/src/third_party/libc++/src/include/__algorithm/sort.h b/naiveproxy/src/third_party/libc++/src/include/__algorithm/sort.h index ed828b6d72..5c60b23931 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__algorithm/sort.h +++ b/naiveproxy/src/third_party/libc++/src/include/__algorithm/sort.h @@ -890,10 +890,10 @@ __sort_dispatch(_RandomAccessIterator __first, _RandomAccessIterator __last, _Co } template -using __is_any_of = _Or...>; +using __is_any_of _LIBCPP_NODEBUG = _Or...>; template -using __sort_is_specialized_in_library = __is_any_of< +using __sort_is_specialized_in_library _LIBCPP_NODEBUG = __is_any_of< _Type, char, #if _LIBCPP_HAS_WIDE_CHARACTERS diff --git a/naiveproxy/src/third_party/libc++/src/include/__algorithm/stable_sort.h b/naiveproxy/src/third_party/libc++/src/include/__algorithm/stable_sort.h index 1111f5509b..70a85023a1 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__algorithm/stable_sort.h +++ b/naiveproxy/src/third_party/libc++/src/include/__algorithm/stable_sort.h @@ -13,6 +13,7 @@ #include <__algorithm/comp_ref_type.h> #include <__algorithm/inplace_merge.h> #include <__algorithm/iterator_operations.h> +#include <__algorithm/radix_sort.h> #include <__algorithm/sort.h> #include <__config> #include <__cstddef/ptrdiff_t.h> @@ -21,7 +22,12 @@ #include <__memory/destruct_n.h> #include <__memory/unique_ptr.h> #include <__memory/unique_temporary_buffer.h> +#include <__type_traits/desugars_to.h> +#include <__type_traits/enable_if.h> +#include <__type_traits/is_integral.h> +#include <__type_traits/is_same.h> #include <__type_traits/is_trivially_assignable.h> +#include <__type_traits/remove_cvref.h> #include <__utility/move.h> #include <__utility/pair.h> @@ -189,6 +195,28 @@ struct __stable_sort_switch { static const unsigned value = 128 * is_trivially_copy_assignable<_Tp>::value; }; +#if _LIBCPP_STD_VER >= 17 +template +_LIBCPP_HIDE_FROM_ABI constexpr unsigned __radix_sort_min_bound() { + static_assert(is_integral<_Tp>::value); + if constexpr (sizeof(_Tp) == 1) { + return 1 << 8; + } + + return 1 << 10; +} + +template +_LIBCPP_HIDE_FROM_ABI constexpr unsigned __radix_sort_max_bound() { + static_assert(is_integral<_Tp>::value); + if constexpr (sizeof(_Tp) >= 8) { + return 1 << 15; + } + + return 1 << 16; +} +#endif // _LIBCPP_STD_VER >= 17 + template void __stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last, @@ -211,6 +239,22 @@ void __stable_sort(_RandomAccessIterator __first, std::__insertion_sort<_AlgPolicy, _Compare>(__first, __last, __comp); return; } + +#if _LIBCPP_STD_VER >= 17 + constexpr auto __default_comp = + __desugars_to_v<__totally_ordered_less_tag, __remove_cvref_t<_Compare>, value_type, value_type >; + constexpr auto __integral_value = + is_integral_v && is_same_v< value_type&, __iter_reference<_RandomAccessIterator>>; + constexpr auto __allowed_radix_sort = __default_comp && __integral_value; + if constexpr (__allowed_radix_sort) { + if (__len <= __buff_size && __len >= static_cast(__radix_sort_min_bound()) && + __len <= static_cast(__radix_sort_max_bound())) { + std::__radix_sort(__first, __last, __buff); + return; + } + } +#endif // _LIBCPP_STD_VER >= 17 + typename iterator_traits<_RandomAccessIterator>::difference_type __l2 = __len / 2; _RandomAccessIterator __m = __first + __l2; if (__len <= __buff_size) { diff --git a/naiveproxy/src/third_party/libc++/src/include/__algorithm/three_way_comp_ref_type.h b/naiveproxy/src/third_party/libc++/src/include/__algorithm/three_way_comp_ref_type.h index 5702a1fee0..f6f76455e4 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__algorithm/three_way_comp_ref_type.h +++ b/naiveproxy/src/third_party/libc++/src/include/__algorithm/three_way_comp_ref_type.h @@ -61,10 +61,10 @@ struct __debug_three_way_comp { // Pass the comparator by lvalue reference. Or in the debug mode, using a debugging wrapper that stores a reference. # if _LIBCPP_HARDENING_MODE == _LIBCPP_HARDENING_MODE_DEBUG template -using __three_way_comp_ref_type = __debug_three_way_comp<_Comp>; +using __three_way_comp_ref_type _LIBCPP_NODEBUG = __debug_three_way_comp<_Comp>; # else template -using __three_way_comp_ref_type = _Comp&; +using __three_way_comp_ref_type _LIBCPP_NODEBUG = _Comp&; # endif #endif // _LIBCPP_STD_VER >= 20 diff --git a/naiveproxy/src/third_party/libc++/src/include/__algorithm/unwrap_iter.h b/naiveproxy/src/third_party/libc++/src/include/__algorithm/unwrap_iter.h index 8cc0d22d4f..b66a682e76 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__algorithm/unwrap_iter.h +++ b/naiveproxy/src/third_party/libc++/src/include/__algorithm/unwrap_iter.h @@ -46,7 +46,7 @@ struct __unwrap_iter_impl { // It's a contiguous iterator, so we can use a raw pointer instead template struct __unwrap_iter_impl<_Iter, true> { - using _ToAddressT = decltype(std::__to_address(std::declval<_Iter>())); + using _ToAddressT _LIBCPP_NODEBUG = decltype(std::__to_address(std::declval<_Iter>())); static _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR _Iter __rewrap(_Iter __orig_iter, _ToAddressT __unwrapped_iter) { return __orig_iter + (__unwrapped_iter - std::__to_address(__orig_iter)); diff --git a/naiveproxy/src/third_party/libc++/src/include/__atomic/aliases.h b/naiveproxy/src/third_party/libc++/src/include/__atomic/aliases.h index 37d11dd0aa..4fccebab25 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__atomic/aliases.h +++ b/naiveproxy/src/third_party/libc++/src/include/__atomic/aliases.h @@ -84,19 +84,19 @@ using atomic_uintmax_t = atomic; // C++20 atomic_{signed,unsigned}_lock_free: prefer the contention type most highly, then the largest lock-free type #if _LIBCPP_STD_VER >= 20 # if ATOMIC_LLONG_LOCK_FREE == 2 -using __largest_lock_free_type = long long; +using __largest_lock_free_type _LIBCPP_NODEBUG = long long; # elif ATOMIC_INT_LOCK_FREE == 2 -using __largest_lock_free_type = int; +using __largest_lock_free_type _LIBCPP_NODEBUG = int; # elif ATOMIC_SHORT_LOCK_FREE == 2 -using __largest_lock_free_type = short; +using __largest_lock_free_type _LIBCPP_NODEBUG = short; # elif ATOMIC_CHAR_LOCK_FREE == 2 -using __largest_lock_free_type = char; +using __largest_lock_free_type _LIBCPP_NODEBUG = char; # else # define _LIBCPP_NO_LOCK_FREE_TYPES // There are no lockfree types (this can happen on unusual platforms) # endif # ifndef _LIBCPP_NO_LOCK_FREE_TYPES -using __contention_t_or_largest = +using __contention_t_or_largest _LIBCPP_NODEBUG = __conditional_t<__libcpp_is_always_lock_free<__cxx_contention_t>::__value, __cxx_contention_t, __largest_lock_free_type>; diff --git a/naiveproxy/src/third_party/libc++/src/include/__atomic/atomic.h b/naiveproxy/src/third_party/libc++/src/include/__atomic/atomic.h index 8029b52770..975a479e20 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__atomic/atomic.h +++ b/naiveproxy/src/third_party/libc++/src/include/__atomic/atomic.h @@ -143,7 +143,7 @@ struct __atomic_base // false template struct __atomic_base<_Tp, true> : public __atomic_base<_Tp, false> { - using __base = __atomic_base<_Tp, false>; + using __base _LIBCPP_NODEBUG = __atomic_base<_Tp, false>; _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 __atomic_base() _NOEXCEPT = default; @@ -228,9 +228,9 @@ struct __atomic_waitable_traits<__atomic_base<_Tp, _IsIntegral> > { template struct atomic : public __atomic_base<_Tp> { - using __base = __atomic_base<_Tp>; - using value_type = _Tp; - using difference_type = value_type; + using __base _LIBCPP_NODEBUG = __atomic_base<_Tp>; + using value_type = _Tp; + using difference_type = value_type; #if _LIBCPP_STD_VER >= 20 _LIBCPP_HIDE_FROM_ABI atomic() = default; @@ -257,9 +257,9 @@ struct atomic : public __atomic_base<_Tp> { template struct atomic<_Tp*> : public __atomic_base<_Tp*> { - using __base = __atomic_base<_Tp*>; - using value_type = _Tp*; - using difference_type = ptrdiff_t; + using __base _LIBCPP_NODEBUG = __atomic_base<_Tp*>; + using value_type = _Tp*; + using difference_type = ptrdiff_t; _LIBCPP_HIDE_FROM_ABI atomic() _NOEXCEPT = default; @@ -389,9 +389,9 @@ private: } public: - using __base = __atomic_base<_Tp>; - using value_type = _Tp; - using difference_type = value_type; + using __base _LIBCPP_NODEBUG = __atomic_base<_Tp>; + using value_type = _Tp; + using difference_type = value_type; _LIBCPP_HIDE_FROM_ABI constexpr atomic() noexcept = default; _LIBCPP_HIDE_FROM_ABI constexpr atomic(_Tp __d) noexcept : __base(__d) {} diff --git a/naiveproxy/src/third_party/libc++/src/include/__atomic/atomic_ref.h b/naiveproxy/src/third_party/libc++/src/include/__atomic/atomic_ref.h index eef15983b9..177ea646b6 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__atomic/atomic_ref.h +++ b/naiveproxy/src/third_party/libc++/src/include/__atomic/atomic_ref.h @@ -221,7 +221,7 @@ public: _LIBCPP_HIDE_FROM_ABI void notify_all() const noexcept { std::__atomic_notify_all(*this); } protected: - using _Aligned_Tp [[__gnu__::__aligned__(required_alignment)]] = _Tp; + using _Aligned_Tp [[__gnu__::__aligned__(required_alignment), __gnu__::__nodebug__]] = _Tp; _Aligned_Tp* __ptr_; _LIBCPP_HIDE_FROM_ABI __atomic_ref_base(_Tp& __obj) : __ptr_(std::addressof(__obj)) {} @@ -241,7 +241,7 @@ template struct atomic_ref : public __atomic_ref_base<_Tp> { static_assert(is_trivially_copyable_v<_Tp>, "std::atomic_ref requires that 'T' be a trivially copyable type"); - using __base = __atomic_ref_base<_Tp>; + using __base _LIBCPP_NODEBUG = __atomic_ref_base<_Tp>; _LIBCPP_HIDE_FROM_ABI explicit atomic_ref(_Tp& __obj) : __base(__obj) { _LIBCPP_ASSERT_ARGUMENT_WITHIN_DOMAIN( @@ -259,7 +259,7 @@ struct atomic_ref : public __atomic_ref_base<_Tp> { template requires(std::integral<_Tp> && !std::same_as) struct atomic_ref<_Tp> : public __atomic_ref_base<_Tp> { - using __base = __atomic_ref_base<_Tp>; + using __base _LIBCPP_NODEBUG = __atomic_ref_base<_Tp>; using difference_type = __base::value_type; @@ -305,7 +305,7 @@ struct atomic_ref<_Tp> : public __atomic_ref_base<_Tp> { template requires std::floating_point<_Tp> struct atomic_ref<_Tp> : public __atomic_ref_base<_Tp> { - using __base = __atomic_ref_base<_Tp>; + using __base _LIBCPP_NODEBUG = __atomic_ref_base<_Tp>; using difference_type = __base::value_type; @@ -344,7 +344,7 @@ struct atomic_ref<_Tp> : public __atomic_ref_base<_Tp> { template struct atomic_ref<_Tp*> : public __atomic_ref_base<_Tp*> { - using __base = __atomic_ref_base<_Tp*>; + using __base _LIBCPP_NODEBUG = __atomic_ref_base<_Tp*>; using difference_type = ptrdiff_t; diff --git a/naiveproxy/src/third_party/libc++/src/include/__atomic/atomic_sync.h b/naiveproxy/src/third_party/libc++/src/include/__atomic/atomic_sync.h index 153001e7b6..ab9bc59fdc 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__atomic/atomic_sync.h +++ b/naiveproxy/src/third_party/libc++/src/include/__atomic/atomic_sync.h @@ -81,7 +81,7 @@ struct __atomic_wait_backoff_impl { _Poll __poll_; memory_order __order_; - using __waitable_traits = __atomic_waitable_traits<__decay_t<_AtomicWaitable> >; + using __waitable_traits _LIBCPP_NODEBUG = __atomic_waitable_traits<__decay_t<_AtomicWaitable> >; _LIBCPP_AVAILABILITY_SYNC _LIBCPP_HIDE_FROM_ABI bool diff --git a/naiveproxy/src/third_party/libc++/src/include/__atomic/contention_t.h b/naiveproxy/src/third_party/libc++/src/include/__atomic/contention_t.h index 6f2a073bc1..5b42a0125f 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__atomic/contention_t.h +++ b/naiveproxy/src/third_party/libc++/src/include/__atomic/contention_t.h @@ -20,12 +20,12 @@ _LIBCPP_BEGIN_NAMESPACE_STD #if defined(__linux__) || (defined(_AIX) && !defined(__64BIT__)) -using __cxx_contention_t = int32_t; +using __cxx_contention_t _LIBCPP_NODEBUG = int32_t; #else -using __cxx_contention_t = int64_t; +using __cxx_contention_t _LIBCPP_NODEBUG = int64_t; #endif // __linux__ || (_AIX && !__64BIT__) -using __cxx_atomic_contention_t = __cxx_atomic_impl<__cxx_contention_t>; +using __cxx_atomic_contention_t _LIBCPP_NODEBUG = __cxx_atomic_impl<__cxx_contention_t>; _LIBCPP_END_NAMESPACE_STD diff --git a/naiveproxy/src/third_party/libc++/src/include/__atomic/memory_order.h b/naiveproxy/src/third_party/libc++/src/include/__atomic/memory_order.h index 294121d1c4..44790fe888 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__atomic/memory_order.h +++ b/naiveproxy/src/third_party/libc++/src/include/__atomic/memory_order.h @@ -24,7 +24,7 @@ _LIBCPP_BEGIN_NAMESPACE_STD // to pin the underlying type in C++20. enum __legacy_memory_order { __mo_relaxed, __mo_consume, __mo_acquire, __mo_release, __mo_acq_rel, __mo_seq_cst }; -using __memory_order_underlying_t = underlying_type<__legacy_memory_order>::type; +using __memory_order_underlying_t _LIBCPP_NODEBUG = underlying_type<__legacy_memory_order>::type; #if _LIBCPP_STD_VER >= 20 diff --git a/naiveproxy/src/third_party/libc++/src/include/__bit/bit_log2.h b/naiveproxy/src/third_party/libc++/src/include/__bit/bit_log2.h index 62936f6786..94ee6c3b2b 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__bit/bit_log2.h +++ b/naiveproxy/src/third_party/libc++/src/include/__bit/bit_log2.h @@ -10,8 +10,8 @@ #define _LIBCPP___BIT_BIT_LOG2_H #include <__bit/countl.h> -#include <__concepts/arithmetic.h> #include <__config> +#include <__type_traits/is_unsigned_integer.h> #include #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) @@ -20,14 +20,15 @@ _LIBCPP_BEGIN_NAMESPACE_STD -#if _LIBCPP_STD_VER >= 20 +#if _LIBCPP_STD_VER >= 14 -template <__libcpp_unsigned_integer _Tp> +template _LIBCPP_HIDE_FROM_ABI constexpr _Tp __bit_log2(_Tp __t) noexcept { - return numeric_limits<_Tp>::digits - 1 - std::countl_zero(__t); + static_assert(__libcpp_is_unsigned_integer<_Tp>::value, "__bit_log2 requires an unsigned integer type"); + return numeric_limits<_Tp>::digits - 1 - std::__countl_zero(__t); } -#endif // _LIBCPP_STD_VER >= 20 +#endif // _LIBCPP_STD_VER >= 14 _LIBCPP_END_NAMESPACE_STD diff --git a/naiveproxy/src/third_party/libc++/src/include/__bit_reference b/naiveproxy/src/third_party/libc++/src/include/__bit_reference index 9fa24c98d4..7e27090cc6 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__bit_reference +++ b/naiveproxy/src/third_party/libc++/src/include/__bit_reference @@ -43,8 +43,8 @@ struct __has_storage_type { template ::value> class __bit_reference { - using __storage_type = typename _Cp::__storage_type; - using __storage_pointer = typename _Cp::__storage_pointer; + using __storage_type _LIBCPP_NODEBUG = typename _Cp::__storage_type; + using __storage_pointer _LIBCPP_NODEBUG = typename _Cp::__storage_pointer; __storage_pointer __seg_; __storage_type __mask_; @@ -55,7 +55,7 @@ class __bit_reference { friend class __bit_iterator<_Cp, false>; public: - using __container = typename _Cp::__self; + using __container _LIBCPP_NODEBUG = typename _Cp::__self; _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 __bit_reference(const __bit_reference&) = default; @@ -135,8 +135,8 @@ inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void swap(bool& __x, template class __bit_const_reference { - using __storage_type = typename _Cp::__storage_type; - using __storage_pointer = typename _Cp::__const_storage_pointer; + using __storage_type _LIBCPP_NODEBUG = typename _Cp::__storage_type; + using __storage_pointer _LIBCPP_NODEBUG = typename _Cp::__const_storage_pointer; __storage_pointer __seg_; __storage_type __mask_; @@ -145,7 +145,7 @@ class __bit_const_reference { friend class __bit_iterator<_Cp, true>; public: - using __container = typename _Cp::__self; + using __container _LIBCPP_NODEBUG = typename _Cp::__self; _LIBCPP_HIDE_FROM_ABI __bit_const_reference(const __bit_const_reference&) = default; __bit_const_reference& operator=(const __bit_const_reference&) = delete; @@ -587,10 +587,10 @@ inline _LIBCPP_HIDE_FROM_ABI __bit_iterator<_Cr, false> swap_ranges( template struct __bit_array { - using difference_type = typename _Cp::difference_type; - using __storage_type = typename _Cp::__storage_type; - using __storage_pointer = typename _Cp::__storage_pointer; - using iterator = typename _Cp::iterator; + using difference_type _LIBCPP_NODEBUG = typename _Cp::difference_type; + using __storage_type _LIBCPP_NODEBUG = typename _Cp::__storage_type; + using __storage_pointer _LIBCPP_NODEBUG = typename _Cp::__storage_pointer; + using iterator _LIBCPP_NODEBUG = typename _Cp::iterator; static const unsigned __bits_per_word = _Cp::__bits_per_word; static const unsigned _Np = 4; @@ -790,8 +790,8 @@ public: using iterator_category = random_access_iterator_tag; private: - using __storage_type = typename _Cp::__storage_type; - using __storage_pointer = + using __storage_type _LIBCPP_NODEBUG = typename _Cp::__storage_type; + using __storage_pointer _LIBCPP_NODEBUG = __conditional_t<_IsConst, typename _Cp::__const_storage_pointer, typename _Cp::__storage_pointer>; static const unsigned __bits_per_word = _Cp::__bits_per_word; diff --git a/naiveproxy/src/third_party/libc++/src/include/__chrono/formatter.h b/naiveproxy/src/third_party/libc++/src/include/__chrono/formatter.h index 3671e6aa52..1086dde381 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__chrono/formatter.h +++ b/naiveproxy/src/third_party/libc++/src/include/__chrono/formatter.h @@ -711,7 +711,7 @@ public: template struct _LIBCPP_TEMPLATE_VIS formatter, _CharT> : public __formatter_chrono<_CharT> { public: - using _Base = __formatter_chrono<_CharT>; + using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; template _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { @@ -722,7 +722,7 @@ public: template struct _LIBCPP_TEMPLATE_VIS formatter, _CharT> : public __formatter_chrono<_CharT> { public: - using _Base = __formatter_chrono<_CharT>; + using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; template _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { @@ -733,7 +733,7 @@ public: template struct _LIBCPP_TEMPLATE_VIS formatter, _CharT> : public __formatter_chrono<_CharT> { public: - using _Base = __formatter_chrono<_CharT>; + using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; template _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { @@ -745,7 +745,7 @@ public: template struct formatter, _CharT> : public __formatter_chrono<_CharT> { public: - using _Base = __formatter_chrono<_CharT>; + using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; template _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { @@ -767,7 +767,7 @@ public: template <__fmt_char_type _CharT> struct _LIBCPP_TEMPLATE_VIS formatter : public __formatter_chrono<_CharT> { public: - using _Base = __formatter_chrono<_CharT>; + using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; template _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { @@ -778,7 +778,7 @@ public: template <__fmt_char_type _CharT> struct _LIBCPP_TEMPLATE_VIS formatter : public __formatter_chrono<_CharT> { public: - using _Base = __formatter_chrono<_CharT>; + using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; template _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { @@ -789,7 +789,7 @@ public: template <__fmt_char_type _CharT> struct _LIBCPP_TEMPLATE_VIS formatter : public __formatter_chrono<_CharT> { public: - using _Base = __formatter_chrono<_CharT>; + using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; template _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { @@ -800,7 +800,7 @@ public: template <__fmt_char_type _CharT> struct _LIBCPP_TEMPLATE_VIS formatter : public __formatter_chrono<_CharT> { public: - using _Base = __formatter_chrono<_CharT>; + using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; template _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { @@ -811,7 +811,7 @@ public: template <__fmt_char_type _CharT> struct _LIBCPP_TEMPLATE_VIS formatter : public __formatter_chrono<_CharT> { public: - using _Base = __formatter_chrono<_CharT>; + using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; template _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { @@ -822,7 +822,7 @@ public: template <__fmt_char_type _CharT> struct _LIBCPP_TEMPLATE_VIS formatter : public __formatter_chrono<_CharT> { public: - using _Base = __formatter_chrono<_CharT>; + using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; template _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { @@ -833,7 +833,7 @@ public: template <__fmt_char_type _CharT> struct _LIBCPP_TEMPLATE_VIS formatter : public __formatter_chrono<_CharT> { public: - using _Base = __formatter_chrono<_CharT>; + using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; template _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { @@ -844,7 +844,7 @@ public: template <__fmt_char_type _CharT> struct _LIBCPP_TEMPLATE_VIS formatter : public __formatter_chrono<_CharT> { public: - using _Base = __formatter_chrono<_CharT>; + using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; template _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { @@ -855,7 +855,7 @@ public: template <__fmt_char_type _CharT> struct _LIBCPP_TEMPLATE_VIS formatter : public __formatter_chrono<_CharT> { public: - using _Base = __formatter_chrono<_CharT>; + using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; template _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { @@ -866,7 +866,7 @@ public: template <__fmt_char_type _CharT> struct _LIBCPP_TEMPLATE_VIS formatter : public __formatter_chrono<_CharT> { public: - using _Base = __formatter_chrono<_CharT>; + using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; template _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { @@ -877,7 +877,7 @@ public: template <__fmt_char_type _CharT> struct _LIBCPP_TEMPLATE_VIS formatter : public __formatter_chrono<_CharT> { public: - using _Base = __formatter_chrono<_CharT>; + using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; template _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { @@ -888,7 +888,7 @@ public: template <__fmt_char_type _CharT> struct _LIBCPP_TEMPLATE_VIS formatter : public __formatter_chrono<_CharT> { public: - using _Base = __formatter_chrono<_CharT>; + using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; template _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { @@ -899,7 +899,7 @@ public: template <__fmt_char_type _CharT> struct _LIBCPP_TEMPLATE_VIS formatter : public __formatter_chrono<_CharT> { public: - using _Base = __formatter_chrono<_CharT>; + using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; template _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { @@ -910,7 +910,7 @@ public: template <__fmt_char_type _CharT> struct _LIBCPP_TEMPLATE_VIS formatter : public __formatter_chrono<_CharT> { public: - using _Base = __formatter_chrono<_CharT>; + using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; template _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { @@ -921,7 +921,7 @@ public: template <__fmt_char_type _CharT> struct _LIBCPP_TEMPLATE_VIS formatter : public __formatter_chrono<_CharT> { public: - using _Base = __formatter_chrono<_CharT>; + using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; template _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { @@ -932,7 +932,7 @@ public: template struct formatter, _CharT> : public __formatter_chrono<_CharT> { public: - using _Base = __formatter_chrono<_CharT>; + using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; template _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { @@ -944,7 +944,7 @@ public: template <__fmt_char_type _CharT> struct formatter : public __formatter_chrono<_CharT> { public: - using _Base = __formatter_chrono<_CharT>; + using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; template _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { @@ -955,7 +955,7 @@ public: template <__fmt_char_type _CharT> struct formatter : public __formatter_chrono<_CharT> { public: - using _Base = __formatter_chrono<_CharT>; + using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; template _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { @@ -968,7 +968,7 @@ public: template struct formatter, _CharT> : public __formatter_chrono<_CharT> { public: - using _Base = __formatter_chrono<_CharT>; + using _Base _LIBCPP_NODEBUG = __formatter_chrono<_CharT>; template _LIBCPP_HIDE_FROM_ABI constexpr typename _ParseContext::iterator parse(_ParseContext& __ctx) { diff --git a/naiveproxy/src/third_party/libc++/src/include/__chrono/hh_mm_ss.h b/naiveproxy/src/third_party/libc++/src/include/__chrono/hh_mm_ss.h index c460b11305..6ea8a28ee0 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__chrono/hh_mm_ss.h +++ b/naiveproxy/src/third_party/libc++/src/include/__chrono/hh_mm_ss.h @@ -30,7 +30,7 @@ template class hh_mm_ss { private: static_assert(__is_duration_v<_Duration>, "template parameter of hh_mm_ss must be a std::chrono::duration"); - using __CommonType = common_type_t<_Duration, chrono::seconds>; + using __CommonType _LIBCPP_NODEBUG = common_type_t<_Duration, chrono::seconds>; _LIBCPP_HIDE_FROM_ABI static constexpr uint64_t __pow10(unsigned __exp) { uint64_t __ret = 1; diff --git a/naiveproxy/src/third_party/libc++/src/include/__chrono/parser_std_format_spec.h b/naiveproxy/src/third_party/libc++/src/include/__chrono/parser_std_format_spec.h index 3976864c12..4df8e603c6 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__chrono/parser_std_format_spec.h +++ b/naiveproxy/src/third_party/libc++/src/include/__chrono/parser_std_format_spec.h @@ -140,7 +140,7 @@ _LIBCPP_HIDE_FROM_ABI constexpr void __validate_time_zone(__flags __flags) { template class _LIBCPP_TEMPLATE_VIS __parser_chrono { - using _ConstIterator = typename basic_format_parse_context<_CharT>::const_iterator; + using _ConstIterator _LIBCPP_NODEBUG = typename basic_format_parse_context<_CharT>::const_iterator; public: template diff --git a/naiveproxy/src/third_party/libc++/src/include/__chrono/weekday.h b/naiveproxy/src/third_party/libc++/src/include/__chrono/weekday.h index 86c780cc71..728cbb8446 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__chrono/weekday.h +++ b/naiveproxy/src/third_party/libc++/src/include/__chrono/weekday.h @@ -79,25 +79,6 @@ _LIBCPP_HIDE_FROM_ABI inline constexpr bool operator==(const weekday& __lhs, con return __lhs.c_encoding() == __rhs.c_encoding(); } -// TODO(LLVM 20): Remove the escape hatch -# ifdef _LIBCPP_ENABLE_REMOVED_WEEKDAY_RELATIONAL_OPERATORS -_LIBCPP_HIDE_FROM_ABI inline constexpr bool operator<(const weekday& __lhs, const weekday& __rhs) noexcept { - return __lhs.c_encoding() < __rhs.c_encoding(); -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr bool operator>(const weekday& __lhs, const weekday& __rhs) noexcept { - return __rhs < __lhs; -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr bool operator<=(const weekday& __lhs, const weekday& __rhs) noexcept { - return !(__rhs < __lhs); -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr bool operator>=(const weekday& __lhs, const weekday& __rhs) noexcept { - return !(__lhs < __rhs); -} -# endif // _LIBCPP_ENABLE_REMOVED_WEEKDAY_RELATIONAL_OPERATORS - _LIBCPP_HIDE_FROM_ABI inline constexpr weekday operator+(const weekday& __lhs, const days& __rhs) noexcept { auto const __mu = static_cast(__lhs.c_encoding()) + __rhs.count(); auto const __yr = (__mu >= 0 ? __mu : __mu - 6) / 7; diff --git a/naiveproxy/src/third_party/libc++/src/include/__chrono/zoned_time.h b/naiveproxy/src/third_party/libc++/src/include/__chrono/zoned_time.h index f57e65c90a..1deba10d96 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__chrono/zoned_time.h +++ b/naiveproxy/src/third_party/libc++/src/include/__chrono/zoned_time.h @@ -66,7 +66,7 @@ class zoned_time { // Using these constraints in the code causes the compiler to give an // error that the constraint depends on itself. To avoid that issue use // the fact it is possible to create this object from a _TimeZonePtr. - using __traits = zoned_traits<_TimeZonePtr>; + using __traits _LIBCPP_NODEBUG = zoned_traits<_TimeZonePtr>; public: using duration = common_type_t<_Duration, seconds>; @@ -186,7 +186,7 @@ template zoned_time(sys_time<_Duration>) -> zoned_time>; template -using __time_zone_representation = +using __time_zone_representation _LIBCPP_NODEBUG = conditional_t, const time_zone*, remove_cvref_t<_TimeZonePtrOrName>>; diff --git a/naiveproxy/src/third_party/libc++/src/include/__compare/ordering.h b/naiveproxy/src/third_party/libc++/src/include/__compare/ordering.h index 297218e6f2..902ef5329d 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__compare/ordering.h +++ b/naiveproxy/src/third_party/libc++/src/include/__compare/ordering.h @@ -120,7 +120,7 @@ inline constexpr partial_ordering partial_ordering::greater(_PartialOrdResult::_ inline constexpr partial_ordering partial_ordering::unordered(_PartialOrdResult::__unordered); class weak_ordering { - using _ValueT = signed char; + using _ValueT _LIBCPP_NODEBUG = signed char; _LIBCPP_HIDE_FROM_ABI explicit constexpr weak_ordering(_OrdResult __v) noexcept : __value_(_ValueT(__v)) {} @@ -190,7 +190,7 @@ inline constexpr weak_ordering weak_ordering::equivalent(_OrdResult::__equiv); inline constexpr weak_ordering weak_ordering::greater(_OrdResult::__greater); class strong_ordering { - using _ValueT = signed char; + using _ValueT _LIBCPP_NODEBUG = signed char; _LIBCPP_HIDE_FROM_ABI explicit constexpr strong_ordering(_OrdResult __v) noexcept : __value_(_ValueT(__v)) {} diff --git a/naiveproxy/src/third_party/libc++/src/include/__compare/synth_three_way.h b/naiveproxy/src/third_party/libc++/src/include/__compare/synth_three_way.h index e48ce49799..63bf56d0cf 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__compare/synth_three_way.h +++ b/naiveproxy/src/third_party/libc++/src/include/__compare/synth_three_way.h @@ -43,7 +43,8 @@ _LIBCPP_HIDE_FROM_ABI inline constexpr auto __synth_three_way = [] -using __synth_three_way_result = decltype(std::__synth_three_way(std::declval<_Tp&>(), std::declval<_Up&>())); +using __synth_three_way_result _LIBCPP_NODEBUG = + decltype(std::__synth_three_way(std::declval<_Tp&>(), std::declval<_Up&>())); #endif // _LIBCPP_STD_VER >= 20 diff --git a/naiveproxy/src/third_party/libc++/src/include/__config b/naiveproxy/src/third_party/libc++/src/include/__config index ace6e1cd73..658a7e16fa 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__config +++ b/naiveproxy/src/third_party/libc++/src/include/__config @@ -629,10 +629,6 @@ typedef __char32_t char32_t; # define _LIBCPP_DECLARE_STRONG_ENUM_EPILOG(x) # endif // _LIBCPP_CXX03_LANG -# if defined(__APPLE__) || defined(__FreeBSD__) || defined(_LIBCPP_MSVCRT_LIKE) || defined(__NetBSD__) -# define _LIBCPP_LOCALE__L_EXTENSIONS 1 -# endif - # ifdef __FreeBSD__ # define _DECLARE_C99_LDBL_MATH 1 # endif @@ -1170,7 +1166,9 @@ typedef __char32_t char32_t; # define _LIBCPP_NOESCAPE # endif -# define _LIBCPP_NODEBUG [[__gnu__::__nodebug__]] +// FIXME: Expand this to [[__gnu__::__nodebug__]] again once the testcase reported in +// https://github.com/llvm/llvm-project/pull/118710 has been analyzed +# define _LIBCPP_NODEBUG # if __has_attribute(__standalone_debug__) # define _LIBCPP_STANDALONE_DEBUG __attribute__((__standalone_debug__)) diff --git a/naiveproxy/src/third_party/libc++/src/include/__cxx03/__chrono/weekday.h b/naiveproxy/src/third_party/libc++/src/include/__cxx03/__chrono/weekday.h index 3c15265311..fd8081fecc 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__cxx03/__chrono/weekday.h +++ b/naiveproxy/src/third_party/libc++/src/include/__cxx03/__chrono/weekday.h @@ -79,25 +79,6 @@ _LIBCPP_HIDE_FROM_ABI inline constexpr bool operator==(const weekday& __lhs, con return __lhs.c_encoding() == __rhs.c_encoding(); } -// TODO(LLVM 20): Remove the escape hatch -# ifdef _LIBCPP_ENABLE_REMOVED_WEEKDAY_RELATIONAL_OPERATORS -_LIBCPP_HIDE_FROM_ABI inline constexpr bool operator<(const weekday& __lhs, const weekday& __rhs) noexcept { - return __lhs.c_encoding() < __rhs.c_encoding(); -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr bool operator>(const weekday& __lhs, const weekday& __rhs) noexcept { - return __rhs < __lhs; -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr bool operator<=(const weekday& __lhs, const weekday& __rhs) noexcept { - return !(__rhs < __lhs); -} - -_LIBCPP_HIDE_FROM_ABI inline constexpr bool operator>=(const weekday& __lhs, const weekday& __rhs) noexcept { - return !(__lhs < __rhs); -} -# endif // _LIBCPP_ENABLE_REMOVED_WEEKDAY_RELATIONAL_OPERATORS - _LIBCPP_HIDE_FROM_ABI inline constexpr weekday operator+(const weekday& __lhs, const days& __rhs) noexcept { auto const __mu = static_cast(__lhs.c_encoding()) + __rhs.count(); auto const __yr = (__mu >= 0 ? __mu : __mu - 6) / 7; diff --git a/naiveproxy/src/third_party/libc++/src/include/__cxx03/__functional/function.h b/naiveproxy/src/third_party/libc++/src/include/__cxx03/__functional/function.h index 1d60391494..891652f1da 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__cxx03/__functional/function.h +++ b/naiveproxy/src/third_party/libc++/src/include/__cxx03/__functional/function.h @@ -853,7 +853,7 @@ public: // construct/copy/destroy: _LIBCPP_HIDE_FROM_ABI function() _NOEXCEPT {} - _LIBCPP_HIDE_FROM_ABI _LIBCPP_HIDE_FROM_ABI function(nullptr_t) _NOEXCEPT {} + _LIBCPP_HIDE_FROM_ABI function(nullptr_t) _NOEXCEPT {} _LIBCPP_HIDE_FROM_ABI function(const function&); _LIBCPP_HIDE_FROM_ABI function(function&&) _NOEXCEPT; template > diff --git a/naiveproxy/src/third_party/libc++/src/include/__cxx03/future b/naiveproxy/src/third_party/libc++/src/include/__cxx03/future index f92bc12669..9f43b87e04 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__cxx03/future +++ b/naiveproxy/src/third_party/libc++/src/include/__cxx03/future @@ -1472,7 +1472,7 @@ public: _LIBCPP_HIDE_FROM_ABI void swap(__packaged_task_function&) _NOEXCEPT; - _LIBCPP_HIDE_FROM_ABI _LIBCPP_HIDE_FROM_ABI _Rp operator()(_ArgTypes...) const; + _LIBCPP_HIDE_FROM_ABI _Rp operator()(_ArgTypes...) const; }; template diff --git a/naiveproxy/src/third_party/libc++/src/include/__cxx03/regex b/naiveproxy/src/third_party/libc++/src/include/__cxx03/regex index c05c8768a8..ea9512cd56 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__cxx03/regex +++ b/naiveproxy/src/third_party/libc++/src/include/__cxx03/regex @@ -5544,9 +5544,7 @@ public: _LIBCPP_HIDE_FROM_ABI bool operator==(const regex_token_iterator& __x) const; #if _LIBCPP_STD_VER >= 20 - _LIBCPP_HIDE_FROM_ABI _LIBCPP_HIDE_FROM_ABI bool operator==(default_sentinel_t) const { - return *this == regex_token_iterator(); - } + _LIBCPP_HIDE_FROM_ABI bool operator==(default_sentinel_t) const { return *this == regex_token_iterator(); } #endif #if _LIBCPP_STD_VER < 20 _LIBCPP_HIDE_FROM_ABI bool operator!=(const regex_token_iterator& __x) const { return !(*this == __x); } diff --git a/naiveproxy/src/third_party/libc++/src/include/__exception/exception_ptr.h b/naiveproxy/src/third_party/libc++/src/include/__exception/exception_ptr.h index 7df46a0e94..6257e6f729 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__exception/exception_ptr.h +++ b/naiveproxy/src/third_party/libc++/src/include/__exception/exception_ptr.h @@ -66,7 +66,7 @@ class _LIBCPP_EXPORTED_FROM_ABI exception_ptr { public: // exception_ptr is basically a COW string. - using __trivially_relocatable = exception_ptr; + using __trivially_relocatable _LIBCPP_NODEBUG = exception_ptr; _LIBCPP_HIDE_FROM_ABI exception_ptr() _NOEXCEPT : __ptr_() {} _LIBCPP_HIDE_FROM_ABI exception_ptr(nullptr_t) _NOEXCEPT : __ptr_() {} diff --git a/naiveproxy/src/third_party/libc++/src/include/__expected/expected.h b/naiveproxy/src/third_party/libc++/src/include/__expected/expected.h index 3d3f11967e..03bbd1623e 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__expected/expected.h +++ b/naiveproxy/src/third_party/libc++/src/include/__expected/expected.h @@ -459,14 +459,14 @@ class expected : private __expected_base<_Tp, _Err> { template friend class expected; - using __base = __expected_base<_Tp, _Err>; + using __base _LIBCPP_NODEBUG = __expected_base<_Tp, _Err>; public: using value_type = _Tp; using error_type = _Err; using unexpected_type = unexpected<_Err>; - using __trivially_relocatable = + using __trivially_relocatable _LIBCPP_NODEBUG = __conditional_t<__libcpp_is_trivially_relocatable<_Tp>::value && __libcpp_is_trivially_relocatable<_Err>::value, expected, void>; @@ -505,7 +505,7 @@ public: private: template - using __can_convert = _And< + using __can_convert _LIBCPP_NODEBUG = _And< is_constructible<_Tp, _UfQual>, is_constructible<_Err, _OtherErrQual>, _If<_Not, bool>>::value, @@ -1363,7 +1363,7 @@ class expected<_Tp, _Err> : private __expected_void_base<_Err> { friend class expected; template - using __can_convert = + using __can_convert _LIBCPP_NODEBUG = _And< is_void<_Up>, is_constructible<_Err, _OtherErrQual>, _Not, expected<_Up, _OtherErr>&>>, @@ -1371,7 +1371,7 @@ class expected<_Tp, _Err> : private __expected_void_base<_Err> { _Not, const expected<_Up, _OtherErr>&>>, _Not, const expected<_Up, _OtherErr>>>>; - using __base = __expected_void_base<_Err>; + using __base _LIBCPP_NODEBUG = __expected_void_base<_Err>; public: using value_type = _Tp; diff --git a/naiveproxy/src/third_party/libc++/src/include/__expected/unexpected.h b/naiveproxy/src/third_party/libc++/src/include/__expected/unexpected.h index cf110bcf69..6904889b8c 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__expected/unexpected.h +++ b/naiveproxy/src/third_party/libc++/src/include/__expected/unexpected.h @@ -48,12 +48,12 @@ template struct __is_std_unexpected> : true_type {}; template -using __valid_std_unexpected = _BoolConstant< // - is_object_v<_Tp> && // - !is_array_v<_Tp> && // - !__is_std_unexpected<_Tp>::value && // - !is_const_v<_Tp> && // - !is_volatile_v<_Tp> // +using __valid_std_unexpected _LIBCPP_NODEBUG = _BoolConstant< // + is_object_v<_Tp> && // + !is_array_v<_Tp> && // + !__is_std_unexpected<_Tp>::value && // + !is_const_v<_Tp> && // + !is_volatile_v<_Tp> // >; template diff --git a/naiveproxy/src/third_party/libc++/src/include/__filesystem/directory_entry.h b/naiveproxy/src/third_party/libc++/src/include/__filesystem/directory_entry.h index 7d0c01b98d..11e07acdbe 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__filesystem/directory_entry.h +++ b/naiveproxy/src/third_party/libc++/src/include/__filesystem/directory_entry.h @@ -22,7 +22,9 @@ #include <__filesystem/perms.h> #include <__fwd/ostream.h> #include <__system_error/errc.h> +#include <__system_error/error_category.h> #include <__system_error/error_code.h> +#include <__system_error/error_condition.h> #include <__utility/move.h> #include <__utility/unreachable.h> #include @@ -274,15 +276,7 @@ private: _LIBCPP_EXPORTED_FROM_ABI error_code __do_refresh() noexcept; _LIBCPP_HIDE_FROM_ABI static bool __is_dne_error(error_code const& __ec) { - if (!__ec) - return true; - switch (static_cast(__ec.value())) { - case errc::no_such_file_or_directory: - case errc::not_a_directory: - return true; - default: - return false; - } + return !__ec || __ec == errc::no_such_file_or_directory || __ec == errc::not_a_directory; } _LIBCPP_HIDE_FROM_ABI void diff --git a/naiveproxy/src/third_party/libc++/src/include/__filesystem/path.h b/naiveproxy/src/third_party/libc++/src/include/__filesystem/path.h index 509d1cc805..0a751ba329 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__filesystem/path.h +++ b/naiveproxy/src/third_party/libc++/src/include/__filesystem/path.h @@ -51,30 +51,30 @@ template struct __can_convert_char : public __can_convert_char<_Tp> {}; template <> struct __can_convert_char { - static const bool value = true; - using __char_type = char; + static const bool value = true; + using __char_type _LIBCPP_NODEBUG = char; }; template <> struct __can_convert_char { - static const bool value = true; - using __char_type = wchar_t; + static const bool value = true; + using __char_type _LIBCPP_NODEBUG = wchar_t; }; # if _LIBCPP_HAS_CHAR8_T template <> struct __can_convert_char { - static const bool value = true; - using __char_type = char8_t; + static const bool value = true; + using __char_type _LIBCPP_NODEBUG = char8_t; }; # endif template <> struct __can_convert_char { - static const bool value = true; - using __char_type = char16_t; + static const bool value = true; + using __char_type _LIBCPP_NODEBUG = char16_t; }; template <> struct __can_convert_char { - static const bool value = true; - using __char_type = char32_t; + static const bool value = true; + using __char_type _LIBCPP_NODEBUG = char32_t; }; template ::value, int> = 0> @@ -95,7 +95,7 @@ typedef string __u8_string; struct _NullSentinel {}; template -using _Void = void; +using _Void _LIBCPP_NODEBUG = void; template struct __is_pathable_string : public false_type {}; @@ -104,7 +104,7 @@ template struct __is_pathable_string< basic_string<_ECharT, _Traits, _Alloc>, _Void::__char_type> > : public __can_convert_char<_ECharT> { - using _Str = basic_string<_ECharT, _Traits, _Alloc>; + using _Str _LIBCPP_NODEBUG = basic_string<_ECharT, _Traits, _Alloc>; _LIBCPP_HIDE_FROM_ABI static _ECharT const* __range_begin(_Str const& __s) { return __s.data(); } @@ -117,7 +117,7 @@ template struct __is_pathable_string< basic_string_view<_ECharT, _Traits>, _Void::__char_type> > : public __can_convert_char<_ECharT> { - using _Str = basic_string_view<_ECharT, _Traits>; + using _Str _LIBCPP_NODEBUG = basic_string_view<_ECharT, _Traits>; _LIBCPP_HIDE_FROM_ABI static _ECharT const* __range_begin(_Str const& __s) { return __s.data(); } @@ -157,7 +157,7 @@ struct __is_pathable_iter< true, _Void::value_type>::__char_type> > : __can_convert_char::value_type> { - using _ECharT = typename iterator_traits<_Iter>::value_type; + using _ECharT _LIBCPP_NODEBUG = typename iterator_traits<_Iter>::value_type; _LIBCPP_HIDE_FROM_ABI static _Iter __range_begin(_Iter __b) { return __b; } @@ -380,13 +380,13 @@ struct _PathExport { class _LIBCPP_EXPORTED_FROM_ABI path { template - using _EnableIfPathable = __enable_if_t<__is_pathable<_SourceOrIter>::value, _Tp>; + using _EnableIfPathable _LIBCPP_NODEBUG = __enable_if_t<__is_pathable<_SourceOrIter>::value, _Tp>; template - using _SourceChar = typename __is_pathable<_Tp>::__char_type; + using _SourceChar _LIBCPP_NODEBUG = typename __is_pathable<_Tp>::__char_type; template - using _SourceCVT = _PathCVT<_SourceChar<_Tp> >; + using _SourceCVT _LIBCPP_NODEBUG = _PathCVT<_SourceChar<_Tp> >; public: # if defined(_LIBCPP_WIN32API) diff --git a/naiveproxy/src/third_party/libc++/src/include/__flat_map/flat_map.h b/naiveproxy/src/third_party/libc++/src/include/__flat_map/flat_map.h index b66bc1cb66..9fe84250b1 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__flat_map/flat_map.h +++ b/naiveproxy/src/third_party/libc++/src/include/__flat_map/flat_map.h @@ -90,7 +90,7 @@ class flat_map { static_assert(!is_same_v<_MappedContainer, std::vector>, "vector is not a sequence container"); template - using __iterator = __key_value_iterator; + using __iterator _LIBCPP_NODEBUG = __key_value_iterator; public: // types diff --git a/naiveproxy/src/third_party/libc++/src/include/__flat_map/key_value_iterator.h b/naiveproxy/src/third_party/libc++/src/include/__flat_map/key_value_iterator.h index 987ac677a4..06a23f3429 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__flat_map/key_value_iterator.h +++ b/naiveproxy/src/third_party/libc++/src/include/__flat_map/key_value_iterator.h @@ -41,9 +41,9 @@ _LIBCPP_BEGIN_NAMESPACE_STD template struct __key_value_iterator { private: - using __key_iterator = ranges::iterator_t; - using __mapped_iterator = ranges::iterator_t<__maybe_const<_Const, _MappedContainer>>; - using __reference = _If<_Const, typename _Owner::const_reference, typename _Owner::reference>; + using __key_iterator _LIBCPP_NODEBUG = ranges::iterator_t; + using __mapped_iterator _LIBCPP_NODEBUG = ranges::iterator_t<__maybe_const<_Const, _MappedContainer>>; + using __reference _LIBCPP_NODEBUG = _If<_Const, typename _Owner::const_reference, typename _Owner::reference>; struct __arrow_proxy { __reference __ref_; diff --git a/naiveproxy/src/third_party/libc++/src/include/__format/buffer.h b/naiveproxy/src/third_party/libc++/src/include/__format/buffer.h index 618b8ef025..9509f19e16 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__format/buffer.h +++ b/naiveproxy/src/third_party/libc++/src/include/__format/buffer.h @@ -322,7 +322,7 @@ struct _LIBCPP_TEMPLATE_VIS __back_insert_iterator_container class _LIBCPP_TEMPLATE_VIS __writer_container { public: - using _CharT = typename _Container::value_type; + using _CharT _LIBCPP_NODEBUG = typename _Container::value_type; _LIBCPP_HIDE_FROM_ABI explicit __writer_container(back_insert_iterator<_Container> __out_it) : __container_{__out_it.__get_container()} {} @@ -340,7 +340,7 @@ private: /// Selects the type of the writer used for the output iterator. template class _LIBCPP_TEMPLATE_VIS __writer_selector { - using _Container = typename __back_insert_iterator_container<_OutIt>::type; + using _Container _LIBCPP_NODEBUG = typename __back_insert_iterator_container<_OutIt>::type; public: using type = @@ -355,7 +355,7 @@ public: template requires(output_iterator<_OutIt, const _CharT&>) class _LIBCPP_TEMPLATE_VIS __format_buffer { - using _Storage = + using _Storage _LIBCPP_NODEBUG = conditional_t<__enable_direct_output<_OutIt, _CharT>, __direct_storage<_CharT>, __internal_storage<_CharT>>; public: @@ -408,7 +408,7 @@ private: template requires(output_iterator<_OutIt, const _CharT&>) struct _LIBCPP_TEMPLATE_VIS __format_to_n_buffer_base { - using _Size = iter_difference_t<_OutIt>; + using _Size _LIBCPP_NODEBUG = iter_difference_t<_OutIt>; public: _LIBCPP_HIDE_FROM_ABI explicit __format_to_n_buffer_base(_OutIt __out_it, _Size __max_size) @@ -438,7 +438,7 @@ protected: template requires(output_iterator<_OutIt, const _CharT&>) class _LIBCPP_TEMPLATE_VIS __format_to_n_buffer_base<_OutIt, _CharT, true> { - using _Size = iter_difference_t<_OutIt>; + using _Size _LIBCPP_NODEBUG = iter_difference_t<_OutIt>; public: _LIBCPP_HIDE_FROM_ABI explicit __format_to_n_buffer_base(_OutIt __out_it, _Size __max_size) @@ -489,8 +489,8 @@ template requires(output_iterator<_OutIt, const _CharT&>) struct _LIBCPP_TEMPLATE_VIS __format_to_n_buffer final : public __format_to_n_buffer_base< _OutIt, _CharT, __enable_direct_output<_OutIt, _CharT>> { - using _Base = __format_to_n_buffer_base<_OutIt, _CharT, __enable_direct_output<_OutIt, _CharT>>; - using _Size = iter_difference_t<_OutIt>; + using _Base _LIBCPP_NODEBUG = __format_to_n_buffer_base<_OutIt, _CharT, __enable_direct_output<_OutIt, _CharT>>; + using _Size _LIBCPP_NODEBUG = iter_difference_t<_OutIt>; public: _LIBCPP_HIDE_FROM_ABI explicit __format_to_n_buffer(_OutIt __out_it, _Size __max_size) @@ -523,7 +523,7 @@ public: // would lead to a circular include with formatter for vector. template <__fmt_char_type _CharT> class _LIBCPP_TEMPLATE_VIS __retarget_buffer { - using _Alloc = allocator<_CharT>; + using _Alloc _LIBCPP_NODEBUG = allocator<_CharT>; public: using value_type = _CharT; diff --git a/naiveproxy/src/third_party/libc++/src/include/__format/concepts.h b/naiveproxy/src/third_party/libc++/src/include/__format/concepts.h index 2c40e3e314..28297c612d 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__format/concepts.h +++ b/naiveproxy/src/third_party/libc++/src/include/__format/concepts.h @@ -44,7 +44,7 @@ concept __fmt_char_type = // (Note testing for (w)format_context would be a valid choice, but requires // selecting the proper one depending on the type of _CharT.) template -using __fmt_iter_for = _CharT*; +using __fmt_iter_for _LIBCPP_NODEBUG = _CharT*; template >> concept __formattable_with = diff --git a/naiveproxy/src/third_party/libc++/src/include/__format/container_adaptor.h b/naiveproxy/src/third_party/libc++/src/include/__format/container_adaptor.h index d3be2e1895..48d42ee7d9 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__format/container_adaptor.h +++ b/naiveproxy/src/third_party/libc++/src/include/__format/container_adaptor.h @@ -37,8 +37,8 @@ _LIBCPP_BEGIN_NAMESPACE_STD template struct _LIBCPP_TEMPLATE_VIS __formatter_container_adaptor { private: - using __maybe_const_container = __fmt_maybe_const; - using __maybe_const_adaptor = __maybe_const, _Adaptor>; + using __maybe_const_container _LIBCPP_NODEBUG = __fmt_maybe_const; + using __maybe_const_adaptor _LIBCPP_NODEBUG = __maybe_const, _Adaptor>; formatter, _CharT> __underlying_; public: diff --git a/naiveproxy/src/third_party/libc++/src/include/__format/format_arg.h b/naiveproxy/src/third_party/libc++/src/include/__format/format_arg.h index a973ccd43c..1c530fd5a5 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__format/format_arg.h +++ b/naiveproxy/src/third_party/libc++/src/include/__format/format_arg.h @@ -208,7 +208,7 @@ _LIBCPP_HIDE_FROM_ABI _Rp __visit_format_arg(_Visitor&& __vis, basic_format_arg< /// separate arrays. template class __basic_format_arg_value { - using _CharT = typename _Context::char_type; + using _CharT _LIBCPP_NODEBUG = typename _Context::char_type; public: /// Contains the implementation for basic_format_arg::handle. diff --git a/naiveproxy/src/third_party/libc++/src/include/__format/format_arg_store.h b/naiveproxy/src/third_party/libc++/src/include/__format/format_arg_store.h index 8b2c95c657..4c5ee9e9e4 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__format/format_arg_store.h +++ b/naiveproxy/src/third_party/libc++/src/include/__format/format_arg_store.h @@ -257,7 +257,7 @@ struct _LIBCPP_TEMPLATE_VIS __format_arg_store { } } - using _Storage = + using _Storage _LIBCPP_NODEBUG = conditional_t<__format::__use_packed_format_arg_store(sizeof...(_Args)), __format::__packed_format_arg_store<_Context, sizeof...(_Args)>, __format::__unpacked_format_arg_store<_Context, sizeof...(_Args)>>; diff --git a/naiveproxy/src/third_party/libc++/src/include/__format/format_functions.h b/naiveproxy/src/third_party/libc++/src/include/__format/format_functions.h index 3991363c01..b920be5acb 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__format/format_functions.h +++ b/naiveproxy/src/third_party/libc++/src/include/__format/format_functions.h @@ -379,7 +379,7 @@ struct _LIBCPP_TEMPLATE_VIS basic_format_string { private: basic_string_view<_CharT> __str_; - using _Context = __format::__compile_time_basic_format_context<_CharT>; + using _Context _LIBCPP_NODEBUG = __format::__compile_time_basic_format_context<_CharT>; static constexpr array<__format::__arg_t, sizeof...(_Args)> __types_{ __format::__determine_arg_t<_Context, remove_cvref_t<_Args>>()...}; diff --git a/naiveproxy/src/third_party/libc++/src/include/__format/formatter_floating_point.h b/naiveproxy/src/third_party/libc++/src/include/__format/formatter_floating_point.h index e04fffb683..ac4be9b619 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__format/formatter_floating_point.h +++ b/naiveproxy/src/third_party/libc++/src/include/__format/formatter_floating_point.h @@ -141,7 +141,7 @@ struct __traits { /// on the stack or the heap. template class _LIBCPP_TEMPLATE_VIS __float_buffer { - using _Traits = __traits<_Fp>; + using _Traits _LIBCPP_NODEBUG = __traits<_Fp>; public: // TODO FMT Improve this constructor to do a better estimate. diff --git a/naiveproxy/src/third_party/libc++/src/include/__format/formatter_string.h b/naiveproxy/src/third_party/libc++/src/include/__format/formatter_string.h index 826d6421c8..30084e5822 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__format/formatter_string.h +++ b/naiveproxy/src/third_party/libc++/src/include/__format/formatter_string.h @@ -59,7 +59,7 @@ public: // Formatter const char*. template <__fmt_char_type _CharT> struct _LIBCPP_TEMPLATE_VIS formatter : public __formatter_string<_CharT> { - using _Base = __formatter_string<_CharT>; + using _Base _LIBCPP_NODEBUG = __formatter_string<_CharT>; template _LIBCPP_HIDE_FROM_ABI typename _FormatContext::iterator format(const _CharT* __str, _FormatContext& __ctx) const { @@ -78,7 +78,7 @@ struct _LIBCPP_TEMPLATE_VIS formatter : public __formatte // Formatter char*. template <__fmt_char_type _CharT> struct _LIBCPP_TEMPLATE_VIS formatter<_CharT*, _CharT> : public formatter { - using _Base = formatter; + using _Base _LIBCPP_NODEBUG = formatter; template _LIBCPP_HIDE_FROM_ABI typename _FormatContext::iterator format(_CharT* __str, _FormatContext& __ctx) const { @@ -89,7 +89,7 @@ struct _LIBCPP_TEMPLATE_VIS formatter<_CharT*, _CharT> : public formatter struct _LIBCPP_TEMPLATE_VIS formatter<_CharT[_Size], _CharT> : public __formatter_string<_CharT> { - using _Base = __formatter_string<_CharT>; + using _Base _LIBCPP_NODEBUG = __formatter_string<_CharT>; template _LIBCPP_HIDE_FROM_ABI typename _FormatContext::iterator @@ -102,7 +102,7 @@ struct _LIBCPP_TEMPLATE_VIS formatter<_CharT[_Size], _CharT> : public __formatte template <__fmt_char_type _CharT, class _Traits, class _Allocator> struct _LIBCPP_TEMPLATE_VIS formatter, _CharT> : public __formatter_string<_CharT> { - using _Base = __formatter_string<_CharT>; + using _Base _LIBCPP_NODEBUG = __formatter_string<_CharT>; template _LIBCPP_HIDE_FROM_ABI typename _FormatContext::iterator @@ -115,7 +115,7 @@ struct _LIBCPP_TEMPLATE_VIS formatter, // Formatter std::string_view. template <__fmt_char_type _CharT, class _Traits> struct _LIBCPP_TEMPLATE_VIS formatter, _CharT> : public __formatter_string<_CharT> { - using _Base = __formatter_string<_CharT>; + using _Base _LIBCPP_NODEBUG = __formatter_string<_CharT>; template _LIBCPP_HIDE_FROM_ABI typename _FormatContext::iterator diff --git a/naiveproxy/src/third_party/libc++/src/include/__format/range_default_formatter.h b/naiveproxy/src/third_party/libc++/src/include/__format/range_default_formatter.h index fb21b0f8be..bb4c520f5e 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__format/range_default_formatter.h +++ b/naiveproxy/src/third_party/libc++/src/include/__format/range_default_formatter.h @@ -40,7 +40,7 @@ concept __const_formattable_range = ranges::input_range && formattable, _CharT>; template -using __fmt_maybe_const = conditional_t<__const_formattable_range<_Rp, _CharT>, const _Rp, _Rp>; +using __fmt_maybe_const _LIBCPP_NODEBUG = conditional_t<__const_formattable_range<_Rp, _CharT>, const _Rp, _Rp>; _LIBCPP_DIAGNOSTIC_PUSH _LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wshadow") @@ -95,7 +95,7 @@ struct _LIBCPP_TEMPLATE_VIS __range_default_formatter; template struct _LIBCPP_TEMPLATE_VIS __range_default_formatter { private: - using __maybe_const_r = __fmt_maybe_const<_Rp, _CharT>; + using __maybe_const_r _LIBCPP_NODEBUG = __fmt_maybe_const<_Rp, _CharT>; range_formatter>, _CharT> __underlying_; public: @@ -122,8 +122,8 @@ public: template struct _LIBCPP_TEMPLATE_VIS __range_default_formatter { private: - using __maybe_const_map = __fmt_maybe_const<_Rp, _CharT>; - using __element_type = remove_cvref_t>; + using __maybe_const_map _LIBCPP_NODEBUG = __fmt_maybe_const<_Rp, _CharT>; + using __element_type _LIBCPP_NODEBUG = remove_cvref_t>; range_formatter<__element_type, _CharT> __underlying_; public: @@ -150,8 +150,8 @@ public: template struct _LIBCPP_TEMPLATE_VIS __range_default_formatter { private: - using __maybe_const_set = __fmt_maybe_const<_Rp, _CharT>; - using __element_type = remove_cvref_t>; + using __maybe_const_set _LIBCPP_NODEBUG = __fmt_maybe_const<_Rp, _CharT>; + using __element_type _LIBCPP_NODEBUG = remove_cvref_t>; range_formatter<__element_type, _CharT> __underlying_; public: diff --git a/naiveproxy/src/third_party/libc++/src/include/__format/unicode.h b/naiveproxy/src/third_party/libc++/src/include/__format/unicode.h index b4f22c739d..46096fda1e 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__format/unicode.h +++ b/naiveproxy/src/third_party/libc++/src/include/__format/unicode.h @@ -123,7 +123,7 @@ class __code_point_view; /// UTF-8 specialization. template <> class __code_point_view { - using _Iterator = basic_string_view::const_iterator; + using _Iterator _LIBCPP_NODEBUG = basic_string_view::const_iterator; public: _LIBCPP_HIDE_FROM_ABI constexpr explicit __code_point_view(_Iterator __first, _Iterator __last) @@ -249,7 +249,7 @@ _LIBCPP_HIDE_FROM_ABI constexpr bool __is_surrogate_pair_low(wchar_t __value) { /// - 4 UTF-32 (for example Linux) template <> class __code_point_view { - using _Iterator = typename basic_string_view::const_iterator; + using _Iterator _LIBCPP_NODEBUG = typename basic_string_view::const_iterator; public: static_assert(sizeof(wchar_t) == 2 || sizeof(wchar_t) == 4, "sizeof(wchar_t) has a not implemented value"); @@ -300,8 +300,8 @@ private: // This implements the extended rules see // https://www.unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries class __extended_grapheme_cluster_break { - using __EGC_property = __extended_grapheme_custer_property_boundary::__property; - using __inCB_property = __indic_conjunct_break::__property; + using __EGC_property _LIBCPP_NODEBUG = __extended_grapheme_custer_property_boundary::__property; + using __inCB_property _LIBCPP_NODEBUG = __indic_conjunct_break::__property; public: _LIBCPP_HIDE_FROM_ABI constexpr explicit __extended_grapheme_cluster_break(char32_t __first_code_point) @@ -527,7 +527,7 @@ private: /// Therefore only this code point is extracted. template class __extended_grapheme_cluster_view { - using _Iterator = typename basic_string_view<_CharT>::const_iterator; + using _Iterator _LIBCPP_NODEBUG = typename basic_string_view<_CharT>::const_iterator; public: _LIBCPP_HIDE_FROM_ABI constexpr explicit __extended_grapheme_cluster_view(_Iterator __first, _Iterator __last) @@ -572,7 +572,7 @@ __extended_grapheme_cluster_view(_Iterator, _Iterator) -> __extended_grapheme_cl // This makes it easier to write code agnostic of the _LIBCPP_HAS_UNICODE define. template class __code_point_view { - using _Iterator = typename basic_string_view<_CharT>::const_iterator; + using _Iterator _LIBCPP_NODEBUG = typename basic_string_view<_CharT>::const_iterator; public: _LIBCPP_HIDE_FROM_ABI constexpr explicit __code_point_view(_Iterator __first, _Iterator __last) diff --git a/naiveproxy/src/third_party/libc++/src/include/__functional/binary_function.h b/naiveproxy/src/third_party/libc++/src/include/__functional/binary_function.h index ddee3b1703..bde8b03ef8 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__functional/binary_function.h +++ b/naiveproxy/src/third_party/libc++/src/include/__functional/binary_function.h @@ -42,11 +42,11 @@ struct __binary_function_keep_layout_base { _LIBCPP_DIAGNOSTIC_PUSH _LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wdeprecated-declarations") template -using __binary_function = binary_function<_Arg1, _Arg2, _Result>; +using __binary_function _LIBCPP_NODEBUG = binary_function<_Arg1, _Arg2, _Result>; _LIBCPP_DIAGNOSTIC_POP #else template -using __binary_function = __binary_function_keep_layout_base<_Arg1, _Arg2, _Result>; +using __binary_function _LIBCPP_NODEBUG = __binary_function_keep_layout_base<_Arg1, _Arg2, _Result>; #endif _LIBCPP_END_NAMESPACE_STD diff --git a/naiveproxy/src/third_party/libc++/src/include/__functional/bind.h b/naiveproxy/src/third_party/libc++/src/include/__functional/bind.h index f82c151724..e31ad29790 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__functional/bind.h +++ b/naiveproxy/src/third_party/libc++/src/include/__functional/bind.h @@ -198,7 +198,7 @@ __apply_functor(_Fp& __f, _BoundArgs& __bound_args, __tuple_indices<_Indx...>, _ template class __bind : public __weak_result_type<__decay_t<_Fp> > { protected: - using _Fd = __decay_t<_Fp>; + using _Fd _LIBCPP_NODEBUG = __decay_t<_Fp>; typedef tuple<__decay_t<_BoundArgs>...> _Td; private: diff --git a/naiveproxy/src/third_party/libc++/src/include/__functional/boyer_moore_searcher.h b/naiveproxy/src/third_party/libc++/src/include/__functional/boyer_moore_searcher.h index 52a58d57a8..1e49cc5464 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__functional/boyer_moore_searcher.h +++ b/naiveproxy/src/third_party/libc++/src/include/__functional/boyer_moore_searcher.h @@ -92,7 +92,7 @@ class _LIBCPP_TEMPLATE_VIS boyer_moore_searcher { private: using difference_type = typename std::iterator_traits<_RandomAccessIterator1>::difference_type; using value_type = typename std::iterator_traits<_RandomAccessIterator1>::value_type; - using __skip_table_type = + using __skip_table_type _LIBCPP_NODEBUG = _BMSkipTable::difference_type; using value_type = typename iterator_traits<_RandomAccessIterator1>::value_type; - using __skip_table_type = + using __skip_table_type _LIBCPP_NODEBUG = _BMSkipTable -using __fast_forward = __conditional_t::value, _Tp, _Tp&&>; +using __fast_forward _LIBCPP_NODEBUG = __conditional_t::value, _Tp, _Tp&&>; // __policy_invoker calls an instance of __alloc_func held in __policy_storage. @@ -847,14 +847,14 @@ class _LIBCPP_TEMPLATE_VIS function<_Rp(_ArgTypes...)> }; template - using _EnableIfLValueCallable = __enable_if_t<__callable<_Fp&>::value>; + using _EnableIfLValueCallable _LIBCPP_NODEBUG = __enable_if_t<__callable<_Fp&>::value>; public: typedef _Rp result_type; // construct/copy/destroy: _LIBCPP_HIDE_FROM_ABI function() _NOEXCEPT {} - _LIBCPP_HIDE_FROM_ABI _LIBCPP_HIDE_FROM_ABI function(nullptr_t) _NOEXCEPT {} + _LIBCPP_HIDE_FROM_ABI function(nullptr_t) _NOEXCEPT {} _LIBCPP_HIDE_FROM_ABI function(const function&); _LIBCPP_HIDE_FROM_ABI function(function&&) _NOEXCEPT; template > diff --git a/naiveproxy/src/third_party/libc++/src/include/__functional/not_fn.h b/naiveproxy/src/third_party/libc++/src/include/__functional/not_fn.h index 4b3ce5524a..e6f14be799 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__functional/not_fn.h +++ b/naiveproxy/src/third_party/libc++/src/include/__functional/not_fn.h @@ -16,6 +16,8 @@ #include <__type_traits/decay.h> #include <__type_traits/enable_if.h> #include <__type_traits/is_constructible.h> +#include <__type_traits/is_member_pointer.h> +#include <__type_traits/is_pointer.h> #include <__utility/forward.h> #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) @@ -48,6 +50,27 @@ _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 auto not_fn(_Fn&& __f) { #endif // _LIBCPP_STD_VER >= 17 +#if _LIBCPP_STD_VER >= 26 + +template +struct __nttp_not_fn_t { + template + [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Args&&... __args) const + noexcept(noexcept(!std::invoke(_Fn, std::forward<_Args>(__args)...))) + -> decltype(!std::invoke(_Fn, std::forward<_Args>(__args)...)) { + return !std::invoke(_Fn, std::forward<_Args>(__args)...); + } +}; + +template +[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI constexpr auto not_fn() noexcept { + if constexpr (using _Ty = decltype(_Fn); is_pointer_v<_Ty> || is_member_pointer_v<_Ty>) + static_assert(_Fn != nullptr, "f cannot be equal to nullptr"); + return __nttp_not_fn_t<_Fn>(); +} + +#endif // _LIBCPP_STD_VER >= 26 + _LIBCPP_END_NAMESPACE_STD #endif // _LIBCPP___FUNCTIONAL_NOT_FN_H diff --git a/naiveproxy/src/third_party/libc++/src/include/__functional/perfect_forward.h b/naiveproxy/src/third_party/libc++/src/include/__functional/perfect_forward.h index 8fd68db3d6..37c3d15b4b 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__functional/perfect_forward.h +++ b/naiveproxy/src/third_party/libc++/src/include/__functional/perfect_forward.h @@ -94,7 +94,7 @@ public: // __perfect_forward implements a perfect-forwarding call wrapper as explained in [func.require]. template -using __perfect_forward = __perfect_forward_impl<_Op, index_sequence_for<_Args...>, _Args...>; +using __perfect_forward _LIBCPP_NODEBUG = __perfect_forward_impl<_Op, index_sequence_for<_Args...>, _Args...>; #endif // _LIBCPP_STD_VER >= 17 diff --git a/naiveproxy/src/third_party/libc++/src/include/__functional/unary_function.h b/naiveproxy/src/third_party/libc++/src/include/__functional/unary_function.h index 69b1bc9422..769ffc9893 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__functional/unary_function.h +++ b/naiveproxy/src/third_party/libc++/src/include/__functional/unary_function.h @@ -39,11 +39,11 @@ struct __unary_function_keep_layout_base { _LIBCPP_DIAGNOSTIC_PUSH _LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wdeprecated-declarations") template -using __unary_function = unary_function<_Arg, _Result>; +using __unary_function _LIBCPP_NODEBUG = unary_function<_Arg, _Result>; _LIBCPP_DIAGNOSTIC_POP #else template -using __unary_function = __unary_function_keep_layout_base<_Arg, _Result>; +using __unary_function _LIBCPP_NODEBUG = __unary_function_keep_layout_base<_Arg, _Result>; #endif _LIBCPP_END_NAMESPACE_STD diff --git a/naiveproxy/src/third_party/libc++/src/include/__hash_table b/naiveproxy/src/third_party/libc++/src/include/__hash_table index 9c821ea690..7788f68774 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__hash_table +++ b/naiveproxy/src/third_party/libc++/src/include/__hash_table @@ -111,8 +111,8 @@ struct __hash_node_base { template struct __hash_node : public __hash_node_base< __rebind_pointer_t<_VoidPtr, __hash_node<_Tp, _VoidPtr> > > { typedef _Tp __node_value_type; - using _Base = __hash_node_base<__rebind_pointer_t<_VoidPtr, __hash_node<_Tp, _VoidPtr> > >; - using __next_pointer = typename _Base::__next_pointer; + using _Base _LIBCPP_NODEBUG = __hash_node_base<__rebind_pointer_t<_VoidPtr, __hash_node<_Tp, _VoidPtr> > >; + using __next_pointer _LIBCPP_NODEBUG = typename _Base::__next_pointer; size_t __hash_; diff --git a/naiveproxy/src/third_party/libc++/src/include/__iterator/aliasing_iterator.h b/naiveproxy/src/third_party/libc++/src/include/__iterator/aliasing_iterator.h index aeb5b4a88e..e01127142a 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__iterator/aliasing_iterator.h +++ b/naiveproxy/src/third_party/libc++/src/include/__iterator/aliasing_iterator.h @@ -31,8 +31,8 @@ struct __aliasing_iterator_wrapper { class __iterator { _BaseIter __base_ = nullptr; - using __iter_traits = iterator_traits<_BaseIter>; - using __base_value_type = typename __iter_traits::value_type; + using __iter_traits _LIBCPP_NODEBUG = iterator_traits<_BaseIter>; + using __base_value_type _LIBCPP_NODEBUG = typename __iter_traits::value_type; static_assert(__has_random_access_iterator_category<_BaseIter>::value, "The base iterator has to be a random access iterator!"); @@ -120,7 +120,7 @@ struct __aliasing_iterator_wrapper { // This is required to avoid ADL instantiations on _BaseT template -using __aliasing_iterator = typename __aliasing_iterator_wrapper<_BaseT, _Alias>::__iterator; +using __aliasing_iterator _LIBCPP_NODEBUG = typename __aliasing_iterator_wrapper<_BaseT, _Alias>::__iterator; _LIBCPP_END_NAMESPACE_STD diff --git a/naiveproxy/src/third_party/libc++/src/include/__iterator/concepts.h b/naiveproxy/src/third_party/libc++/src/include/__iterator/concepts.h index 1c227933a4..6e5ac1d3af 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__iterator/concepts.h +++ b/naiveproxy/src/third_party/libc++/src/include/__iterator/concepts.h @@ -67,10 +67,10 @@ template concept indirectly_readable = __indirectly_readable_impl>; template -using __projected_iterator_t = typename _Tp::__projected_iterator; +using __projected_iterator_t _LIBCPP_NODEBUG = typename _Tp::__projected_iterator; template -using __projected_projection_t = typename _Tp::__projected_projection; +using __projected_projection_t _LIBCPP_NODEBUG = typename _Tp::__projected_projection; template concept __specialization_of_projected = requires { @@ -89,7 +89,7 @@ struct __indirect_value_t_impl<_Tp> { }; template -using __indirect_value_t = typename __indirect_value_t_impl<_Tp>::type; +using __indirect_value_t _LIBCPP_NODEBUG = typename __indirect_value_t_impl<_Tp>::type; template using iter_common_reference_t = common_reference_t, __indirect_value_t<_Tp>>; @@ -274,7 +274,7 @@ concept indirectly_copyable_storable = #endif // _LIBCPP_STD_VER >= 20 template -using __has_random_access_iterator_category_or_concept +using __has_random_access_iterator_category_or_concept _LIBCPP_NODEBUG #if _LIBCPP_STD_VER >= 20 = integral_constant>; #else // _LIBCPP_STD_VER < 20 diff --git a/naiveproxy/src/third_party/libc++/src/include/__iterator/insert_iterator.h b/naiveproxy/src/third_party/libc++/src/include/__iterator/insert_iterator.h index b331104201..e0ee0ce035 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__iterator/insert_iterator.h +++ b/naiveproxy/src/third_party/libc++/src/include/__iterator/insert_iterator.h @@ -29,10 +29,10 @@ _LIBCPP_BEGIN_NAMESPACE_STD #if _LIBCPP_STD_VER >= 20 template -using __insert_iterator_iter_t = ranges::iterator_t<_Container>; +using __insert_iterator_iter_t _LIBCPP_NODEBUG = ranges::iterator_t<_Container>; #else template -using __insert_iterator_iter_t = typename _Container::iterator; +using __insert_iterator_iter_t _LIBCPP_NODEBUG = typename _Container::iterator; #endif _LIBCPP_SUPPRESS_DEPRECATED_PUSH diff --git a/naiveproxy/src/third_party/libc++/src/include/__iterator/iterator_traits.h b/naiveproxy/src/third_party/libc++/src/include/__iterator/iterator_traits.h index eb6ba8b62f..db68dd2c37 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__iterator/iterator_traits.h +++ b/naiveproxy/src/third_party/libc++/src/include/__iterator/iterator_traits.h @@ -47,7 +47,7 @@ _LIBCPP_BEGIN_NAMESPACE_STD #if _LIBCPP_STD_VER >= 20 template -using __with_reference = _Tp&; +using __with_reference _LIBCPP_NODEBUG = _Tp&; template concept __can_reference = requires { typename __with_reference<_Tp>; }; @@ -80,19 +80,20 @@ struct __iter_traits_cache { using type = _If< __is_primary_template >::value, _Iter, iterator_traits<_Iter> >; }; template -using _ITER_TRAITS = typename __iter_traits_cache<_Iter>::type; +using _ITER_TRAITS _LIBCPP_NODEBUG = typename __iter_traits_cache<_Iter>::type; struct __iter_concept_concept_test { template - using _Apply = typename _ITER_TRAITS<_Iter>::iterator_concept; + using _Apply _LIBCPP_NODEBUG = typename _ITER_TRAITS<_Iter>::iterator_concept; }; struct __iter_concept_category_test { template - using _Apply = typename _ITER_TRAITS<_Iter>::iterator_category; + using _Apply _LIBCPP_NODEBUG = typename _ITER_TRAITS<_Iter>::iterator_category; }; struct __iter_concept_random_fallback { template - using _Apply = __enable_if_t< __is_primary_template >::value, random_access_iterator_tag >; + using _Apply _LIBCPP_NODEBUG = + __enable_if_t<__is_primary_template >::value, random_access_iterator_tag>; }; template @@ -106,7 +107,7 @@ struct __iter_concept_cache { }; template -using _ITER_CONCEPT = typename __iter_concept_cache<_Iter>::type::template _Apply<_Iter>; +using _ITER_CONCEPT _LIBCPP_NODEBUG = typename __iter_concept_cache<_Iter>::type::template _Apply<_Iter>; template struct __has_iterator_typedefs { @@ -364,7 +365,7 @@ struct __iterator_traits<_Ip> { template struct iterator_traits : __iterator_traits<_Ip> { - using __primary_template = iterator_traits; + using __primary_template _LIBCPP_NODEBUG = iterator_traits; }; #else // _LIBCPP_STD_VER >= 20 @@ -397,7 +398,7 @@ struct __iterator_traits<_Iter, true> template struct _LIBCPP_TEMPLATE_VIS iterator_traits : __iterator_traits<_Iter, __has_iterator_typedefs<_Iter>::value> { - using __primary_template = iterator_traits; + using __primary_template _LIBCPP_NODEBUG = iterator_traits; }; #endif // _LIBCPP_STD_VER >= 20 @@ -430,16 +431,19 @@ template struct __has_iterator_concept_convertible_to<_Tp, _Up, false> : false_type {}; template -using __has_input_iterator_category = __has_iterator_category_convertible_to<_Tp, input_iterator_tag>; +using __has_input_iterator_category _LIBCPP_NODEBUG = __has_iterator_category_convertible_to<_Tp, input_iterator_tag>; template -using __has_forward_iterator_category = __has_iterator_category_convertible_to<_Tp, forward_iterator_tag>; +using __has_forward_iterator_category _LIBCPP_NODEBUG = + __has_iterator_category_convertible_to<_Tp, forward_iterator_tag>; template -using __has_bidirectional_iterator_category = __has_iterator_category_convertible_to<_Tp, bidirectional_iterator_tag>; +using __has_bidirectional_iterator_category _LIBCPP_NODEBUG = + __has_iterator_category_convertible_to<_Tp, bidirectional_iterator_tag>; template -using __has_random_access_iterator_category = __has_iterator_category_convertible_to<_Tp, random_access_iterator_tag>; +using __has_random_access_iterator_category _LIBCPP_NODEBUG = + __has_iterator_category_convertible_to<_Tp, random_access_iterator_tag>; // __libcpp_is_contiguous_iterator determines if an iterator is known by // libc++ to be contiguous, either because it advertises itself as such @@ -466,48 +470,49 @@ template class __wrap_iter; template -using __has_exactly_input_iterator_category = +using __has_exactly_input_iterator_category _LIBCPP_NODEBUG = integral_constant::value && !__has_iterator_category_convertible_to<_Tp, forward_iterator_tag>::value>; template -using __has_exactly_forward_iterator_category = +using __has_exactly_forward_iterator_category _LIBCPP_NODEBUG = integral_constant::value && !__has_iterator_category_convertible_to<_Tp, bidirectional_iterator_tag>::value>; template -using __has_exactly_bidirectional_iterator_category = +using __has_exactly_bidirectional_iterator_category _LIBCPP_NODEBUG = integral_constant::value && !__has_iterator_category_convertible_to<_Tp, random_access_iterator_tag>::value>; template -using __iter_value_type = typename iterator_traits<_InputIterator>::value_type; +using __iter_value_type _LIBCPP_NODEBUG = typename iterator_traits<_InputIterator>::value_type; template -using __iter_key_type = __remove_const_t::value_type::first_type>; +using __iter_key_type _LIBCPP_NODEBUG = + __remove_const_t::value_type::first_type>; template -using __iter_mapped_type = typename iterator_traits<_InputIterator>::value_type::second_type; +using __iter_mapped_type _LIBCPP_NODEBUG = typename iterator_traits<_InputIterator>::value_type::second_type; template -using __iter_to_alloc_type = +using __iter_to_alloc_type _LIBCPP_NODEBUG = pair::value_type::first_type, typename iterator_traits<_InputIterator>::value_type::second_type>; template -using __iterator_category_type = typename iterator_traits<_Iter>::iterator_category; +using __iterator_category_type _LIBCPP_NODEBUG = typename iterator_traits<_Iter>::iterator_category; template -using __iterator_pointer_type = typename iterator_traits<_Iter>::pointer; +using __iterator_pointer_type _LIBCPP_NODEBUG = typename iterator_traits<_Iter>::pointer; template -using __iter_diff_t = typename iterator_traits<_Iter>::difference_type; +using __iter_diff_t _LIBCPP_NODEBUG = typename iterator_traits<_Iter>::difference_type; template -using __iter_reference = typename iterator_traits<_Iter>::reference; +using __iter_reference _LIBCPP_NODEBUG = typename iterator_traits<_Iter>::reference; #if _LIBCPP_STD_VER >= 20 diff --git a/naiveproxy/src/third_party/libc++/src/include/__iterator/projected.h b/naiveproxy/src/third_party/libc++/src/include/__iterator/projected.h index 1c560ec055..d12f0167de 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__iterator/projected.h +++ b/naiveproxy/src/third_party/libc++/src/include/__iterator/projected.h @@ -26,9 +26,9 @@ _LIBCPP_BEGIN_NAMESPACE_STD template struct __projected_impl { struct __type { - using __primary_template = __type; - using __projected_iterator = _It; - using __projected_projection = _Proj; + using __primary_template _LIBCPP_NODEBUG = __type; + using __projected_iterator _LIBCPP_NODEBUG = _It; + using __projected_projection _LIBCPP_NODEBUG = _Proj; using value_type = remove_cvref_t>; indirect_result_t<_Proj&, _It> operator*() const; // not defined @@ -38,9 +38,9 @@ struct __projected_impl { template struct __projected_impl<_It, _Proj> { struct __type { - using __primary_template = __type; - using __projected_iterator = _It; - using __projected_projection = _Proj; + using __primary_template _LIBCPP_NODEBUG = __type; + using __projected_iterator _LIBCPP_NODEBUG = _It; + using __projected_projection _LIBCPP_NODEBUG = _Proj; using value_type = remove_cvref_t>; using difference_type = iter_difference_t<_It>; diff --git a/naiveproxy/src/third_party/libc++/src/include/__iterator/ranges_iterator_traits.h b/naiveproxy/src/third_party/libc++/src/include/__iterator/ranges_iterator_traits.h index 859e708204..9a31b651eb 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__iterator/ranges_iterator_traits.h +++ b/naiveproxy/src/third_party/libc++/src/include/__iterator/ranges_iterator_traits.h @@ -24,13 +24,13 @@ _LIBCPP_BEGIN_NAMESPACE_STD #if _LIBCPP_STD_VER >= 23 template -using __range_key_type = __remove_const_t::first_type>; +using __range_key_type _LIBCPP_NODEBUG = __remove_const_t::first_type>; template -using __range_mapped_type = typename ranges::range_value_t<_Range>::second_type; +using __range_mapped_type _LIBCPP_NODEBUG = typename ranges::range_value_t<_Range>::second_type; template -using __range_to_alloc_type = +using __range_to_alloc_type _LIBCPP_NODEBUG = pair::first_type, typename ranges::range_value_t<_Range>::second_type>; #endif diff --git a/naiveproxy/src/third_party/libc++/src/include/__iterator/reverse_iterator.h b/naiveproxy/src/third_party/libc++/src/include/__iterator/reverse_iterator.h index 5e88d86ad5..5bd1f868d3 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__iterator/reverse_iterator.h +++ b/naiveproxy/src/third_party/libc++/src/include/__iterator/reverse_iterator.h @@ -329,8 +329,8 @@ __reverse_range(_Range&& __range) { template struct __unwrap_iter_impl >, __b> { - using _UnwrappedIter = decltype(__unwrap_iter_impl<_Iter>::__unwrap(std::declval<_Iter>())); - using _ReverseWrapper = reverse_iterator >; + using _UnwrappedIter _LIBCPP_NODEBUG = decltype(__unwrap_iter_impl<_Iter>::__unwrap(std::declval<_Iter>())); + using _ReverseWrapper _LIBCPP_NODEBUG = reverse_iterator >; static _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR _ReverseWrapper __rewrap(_ReverseWrapper __orig_iter, _UnwrappedIter __unwrapped_iter) { diff --git a/naiveproxy/src/third_party/libc++/src/include/__iterator/segmented_iterator.h b/naiveproxy/src/third_party/libc++/src/include/__iterator/segmented_iterator.h index 8cb54a35a7..7a8e1addea 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__iterator/segmented_iterator.h +++ b/naiveproxy/src/third_party/libc++/src/include/__iterator/segmented_iterator.h @@ -72,7 +72,7 @@ template struct __has_specialization<_Tp, sizeof(_Tp) * 0> : true_type {}; template -using __is_segmented_iterator = __has_specialization<__segmented_iterator_traits<_Iterator> >; +using __is_segmented_iterator _LIBCPP_NODEBUG = __has_specialization<__segmented_iterator_traits<_Iterator> >; _LIBCPP_END_NAMESPACE_STD diff --git a/naiveproxy/src/third_party/libc++/src/include/__locale b/naiveproxy/src/third_party/libc++/src/include/__locale index b675e01bac..01c3a2e345 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__locale +++ b/naiveproxy/src/third_party/libc++/src/include/__locale @@ -50,7 +50,7 @@ _LIBCPP_HIDE_FROM_ABI const _Facet& use_facet(const locale&); class _LIBCPP_EXPORTED_FROM_ABI locale { public: // locale is essentially a shared_ptr that doesn't support weak_ptrs and never got a move constructor. - using __trivially_relocatable = locale; + using __trivially_relocatable _LIBCPP_NODEBUG = locale; // types: class _LIBCPP_EXPORTED_FROM_ABI facet; @@ -516,6 +516,8 @@ protected: }; #endif // _LIBCPP_HAS_WIDE_CHARACTERS +inline _LIBCPP_HIDE_FROM_ABI bool __libcpp_isascii(int __c) { return (__c & ~0x7F) == 0; } + template <> class _LIBCPP_EXPORTED_FROM_ABI ctype : public locale::facet, public ctype_base { const mask* __tab_; @@ -527,25 +529,25 @@ public: explicit ctype(const mask* __tab = nullptr, bool __del = false, size_t __refs = 0); _LIBCPP_HIDE_FROM_ABI bool is(mask __m, char_type __c) const { - return isascii(__c) ? (__tab_[static_cast(__c)] & __m) != 0 : false; + return std::__libcpp_isascii(__c) ? (__tab_[static_cast(__c)] & __m) != 0 : false; } _LIBCPP_HIDE_FROM_ABI const char_type* is(const char_type* __low, const char_type* __high, mask* __vec) const { for (; __low != __high; ++__low, ++__vec) - *__vec = isascii(*__low) ? __tab_[static_cast(*__low)] : 0; + *__vec = std::__libcpp_isascii(*__low) ? __tab_[static_cast(*__low)] : 0; return __low; } _LIBCPP_HIDE_FROM_ABI const char_type* scan_is(mask __m, const char_type* __low, const char_type* __high) const { for (; __low != __high; ++__low) - if (isascii(*__low) && (__tab_[static_cast(*__low)] & __m)) + if (std::__libcpp_isascii(*__low) && (__tab_[static_cast(*__low)] & __m)) break; return __low; } _LIBCPP_HIDE_FROM_ABI const char_type* scan_not(mask __m, const char_type* __low, const char_type* __high) const { for (; __low != __high; ++__low) - if (!isascii(*__low) || !(__tab_[static_cast(*__low)] & __m)) + if (!std::__libcpp_isascii(*__low) || !(__tab_[static_cast(*__low)] & __m)) break; return __low; } diff --git a/naiveproxy/src/third_party/libc++/src/include/__locale_dir/locale_base_api.h b/naiveproxy/src/third_party/libc++/src/include/__locale_dir/locale_base_api.h index c8097beb90..bb0da889f4 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__locale_dir/locale_base_api.h +++ b/naiveproxy/src/third_party/libc++/src/include/__locale_dir/locale_base_api.h @@ -56,6 +56,7 @@ // int __strcoll(const char*, const char*, __locale_t); // size_t __strxfrm(char*, const char*, size_t, __locale_t); // +// int __iswctype(wint_t, wctype_t, __locale_t); // int __iswspace(wint_t, __locale_t); // int __iswprint(wint_t, __locale_t); // int __iswcntrl(wint_t, __locale_t); @@ -116,11 +117,7 @@ # include <__locale_dir/locale_base_api/musl.h> # endif -# ifdef _LIBCPP_LOCALE__L_EXTENSIONS -# include <__locale_dir/locale_base_api/bsd_locale_defaults.h> -# else -# include <__locale_dir/locale_base_api/bsd_locale_fallbacks.h> -# endif +# include <__locale_dir/locale_base_api/bsd_locale_fallbacks.h> # include <__cstddef/size_t.h> # include <__utility/forward.h> @@ -135,7 +132,7 @@ namespace __locale { // // Locale management // -using __locale_t = locale_t; +using __locale_t _LIBCPP_NODEBUG = locale_t; inline _LIBCPP_HIDE_FROM_ABI __locale_t __newlocale(int __category_mask, const char* __name, __locale_t __loc) { return newlocale(__category_mask, __name, __loc); @@ -192,6 +189,9 @@ inline _LIBCPP_HIDE_FROM_ABI int __wcscoll(const wchar_t* __s1, const wchar_t* _ inline _LIBCPP_HIDE_FROM_ABI size_t __wcsxfrm(wchar_t* __dest, const wchar_t* __src, size_t __n, __locale_t __loc) { return wcsxfrm_l(__dest, __src, __n, __loc); } +inline _LIBCPP_HIDE_FROM_ABI int __iswctype(wint_t __ch, wctype_t __type, __locale_t __loc) { + return iswctype_l(__ch, __type, __loc); +} inline _LIBCPP_HIDE_FROM_ABI int __iswspace(wint_t __ch, __locale_t __loc) { return iswspace_l(__ch, __loc); } inline _LIBCPP_HIDE_FROM_ABI int __iswprint(wint_t __ch, __locale_t __loc) { return iswprint_l(__ch, __loc); } inline _LIBCPP_HIDE_FROM_ABI int __iswcntrl(wint_t __ch, __locale_t __loc) { return iswcntrl_l(__ch, __loc); } diff --git a/naiveproxy/src/third_party/libc++/src/include/__locale_dir/locale_base_api/bsd_locale_defaults.h b/naiveproxy/src/third_party/libc++/src/include/__locale_dir/locale_base_api/bsd_locale_defaults.h deleted file mode 100644 index 73ab635d28..0000000000 --- a/naiveproxy/src/third_party/libc++/src/include/__locale_dir/locale_base_api/bsd_locale_defaults.h +++ /dev/null @@ -1,116 +0,0 @@ -// -*- C++ -*- -//===----------------------------------------------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// -// The BSDs have lots of *_l functions. We don't want to define those symbols -// on other platforms though, for fear of conflicts with user code. So here, -// we will define the mapping from an internal macro to the real BSD symbol. -//===----------------------------------------------------------------------===// - -#ifndef _LIBCPP___LOCALE_DIR_LOCALE_BASE_API_BSD_LOCALE_DEFAULTS_H -#define _LIBCPP___LOCALE_DIR_LOCALE_BASE_API_BSD_LOCALE_DEFAULTS_H - -#include -#include -#include -#if _LIBCPP_HAS_WIDE_CHARACTERS -# include -#endif - -// must come after the includes above since the functions it includes depend on -// what headers have been included up to that point. -#if defined(__APPLE__) || defined(__FreeBSD__) -# include -#endif - -#include <__config> -#include <__cstddef/size_t.h> -#include <__std_mbstate_t.h> -#include <__utility/forward.h> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -# pragma GCC system_header -#endif - -_LIBCPP_BEGIN_NAMESPACE_STD - -inline _LIBCPP_HIDE_FROM_ABI decltype(MB_CUR_MAX) __libcpp_mb_cur_max_l(locale_t __loc) { return MB_CUR_MAX_L(__loc); } - -#if _LIBCPP_HAS_WIDE_CHARACTERS -inline _LIBCPP_HIDE_FROM_ABI wint_t __libcpp_btowc_l(int __c, locale_t __loc) { return ::btowc_l(__c, __loc); } - -inline _LIBCPP_HIDE_FROM_ABI int __libcpp_wctob_l(wint_t __c, locale_t __loc) { return ::wctob_l(__c, __loc); } - -inline _LIBCPP_HIDE_FROM_ABI size_t __libcpp_wcsnrtombs_l( - char* __dest, const wchar_t** __src, size_t __nwc, size_t __len, mbstate_t* __ps, locale_t __loc) { - return ::wcsnrtombs_l(__dest, __src, __nwc, __len, __ps, __loc); -} - -inline _LIBCPP_HIDE_FROM_ABI size_t __libcpp_wcrtomb_l(char* __s, wchar_t __wc, mbstate_t* __ps, locale_t __loc) { - return ::wcrtomb_l(__s, __wc, __ps, __loc); -} - -inline _LIBCPP_HIDE_FROM_ABI size_t __libcpp_mbsnrtowcs_l( - wchar_t* __dest, const char** __src, size_t __nms, size_t __len, mbstate_t* __ps, locale_t __loc) { - return ::mbsnrtowcs_l(__dest, __src, __nms, __len, __ps, __loc); -} - -inline _LIBCPP_HIDE_FROM_ABI size_t -__libcpp_mbrtowc_l(wchar_t* __pwc, const char* __s, size_t __n, mbstate_t* __ps, locale_t __loc) { - return ::mbrtowc_l(__pwc, __s, __n, __ps, __loc); -} - -inline _LIBCPP_HIDE_FROM_ABI int __libcpp_mbtowc_l(wchar_t* __pwc, const char* __pmb, size_t __max, locale_t __loc) { - return ::mbtowc_l(__pwc, __pmb, __max, __loc); -} - -inline _LIBCPP_HIDE_FROM_ABI size_t __libcpp_mbrlen_l(const char* __s, size_t __n, mbstate_t* __ps, locale_t __loc) { - return ::mbrlen_l(__s, __n, __ps, __loc); -} -#endif // _LIBCPP_HAS_WIDE_CHARACTERS - -inline _LIBCPP_HIDE_FROM_ABI lconv* __libcpp_localeconv_l(locale_t& __loc) { return ::localeconv_l(__loc); } - -#if _LIBCPP_HAS_WIDE_CHARACTERS -inline _LIBCPP_HIDE_FROM_ABI size_t -__libcpp_mbsrtowcs_l(wchar_t* __dest, const char** __src, size_t __len, mbstate_t* __ps, locale_t __loc) { - return ::mbsrtowcs_l(__dest, __src, __len, __ps, __loc); -} -#endif - -_LIBCPP_DIAGNOSTIC_PUSH -_LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wgcc-compat") -_LIBCPP_GCC_DIAGNOSTIC_IGNORED("-Wformat-nonliteral") // GCC doesn't support [[gnu::format]] on variadic templates -#ifdef _LIBCPP_COMPILER_CLANG_BASED -# define _LIBCPP_VARIADIC_ATTRIBUTE_FORMAT(...) _LIBCPP_ATTRIBUTE_FORMAT(__VA_ARGS__) -#else -# define _LIBCPP_VARIADIC_ATTRIBUTE_FORMAT -#endif - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_VARIADIC_ATTRIBUTE_FORMAT(__printf__, 4, 5) int __libcpp_snprintf_l( - char* __s, size_t __n, locale_t __loc, const char* __format, _Args&&... __args) { - return ::snprintf_l(__s, __n, __loc, __format, std::forward<_Args>(__args)...); -} - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_VARIADIC_ATTRIBUTE_FORMAT(__printf__, 3, 4) int __libcpp_asprintf_l( - char** __s, locale_t __loc, const char* __format, _Args&&... __args) { - return ::asprintf_l(__s, __loc, __format, std::forward<_Args>(__args)...); -} - -template -_LIBCPP_HIDE_FROM_ABI _LIBCPP_VARIADIC_ATTRIBUTE_FORMAT(__scanf__, 3, 4) int __libcpp_sscanf_l( - const char* __s, locale_t __loc, const char* __format, _Args&&... __args) { - return ::sscanf_l(__s, __loc, __format, std::forward<_Args>(__args)...); -} -_LIBCPP_DIAGNOSTIC_POP -#undef _LIBCPP_VARIADIC_ATTRIBUTE_FORMAT - -_LIBCPP_END_NAMESPACE_STD - -#endif // _LIBCPP___LOCALE_DIR_LOCALE_BASE_API_BSD_LOCALE_DEFAULTS_H diff --git a/naiveproxy/src/third_party/libc++/src/include/__locale_dir/support/bsd_like.h b/naiveproxy/src/third_party/libc++/src/include/__locale_dir/support/bsd_like.h index da31aeaf3c..b3933c71c6 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__locale_dir/support/bsd_like.h +++ b/naiveproxy/src/third_party/libc++/src/include/__locale_dir/support/bsd_like.h @@ -94,6 +94,10 @@ inline _LIBCPP_HIDE_FROM_ABI size_t __strxfrm(char* __dest, const char* __src, s } #if _LIBCPP_HAS_WIDE_CHARACTERS +inline _LIBCPP_HIDE_FROM_ABI int __iswctype(wint_t __c, wctype_t __type, __locale_t __loc) { + return ::iswctype_l(__c, __type, __loc); +} + inline _LIBCPP_HIDE_FROM_ABI int __iswspace(wint_t __c, __locale_t __loc) { return ::iswspace_l(__c, __loc); } inline _LIBCPP_HIDE_FROM_ABI int __iswprint(wint_t __c, __locale_t __loc) { return ::iswprint_l(__c, __loc); } diff --git a/naiveproxy/src/third_party/libc++/src/include/__locale_dir/support/windows.h b/naiveproxy/src/third_party/libc++/src/include/__locale_dir/support/windows.h index 03d05a410f..eca0e17d94 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__locale_dir/support/windows.h +++ b/naiveproxy/src/third_party/libc++/src/include/__locale_dir/support/windows.h @@ -206,6 +206,9 @@ inline _LIBCPP_HIDE_FROM_ABI size_t __strxfrm(char* __dest, const char* __src, s } #ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS +inline _LIBCPP_HIDE_FROM_ABI int __iswctype(wint_t __c, wctype_t __type, __locale_t __loc) { + return ::_iswctype_l(__c, __type, __loc); +} inline _LIBCPP_HIDE_FROM_ABI int __iswspace(wint_t __c, __locale_t __loc) { return ::_iswspace_l(__c, __loc); } inline _LIBCPP_HIDE_FROM_ABI int __iswprint(wint_t __c, __locale_t __loc) { return ::_iswprint_l(__c, __loc); } inline _LIBCPP_HIDE_FROM_ABI int __iswcntrl(wint_t __c, __locale_t __loc) { return ::_iswcntrl_l(__c, __loc); } diff --git a/naiveproxy/src/third_party/libc++/src/include/__mdspan/extents.h b/naiveproxy/src/third_party/libc++/src/include/__mdspan/extents.h index edbc30a7a4..65a697769b 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__mdspan/extents.h +++ b/naiveproxy/src/third_party/libc++/src/include/__mdspan/extents.h @@ -129,14 +129,14 @@ private: // Static values member static constexpr size_t __size_ = sizeof...(_Values); static constexpr size_t __size_dynamic_ = ((_Values == _DynTag) + ... + 0); - using _StaticValues = __static_array<_TStatic, _Values...>; - using _DynamicValues = __possibly_empty_array<_TDynamic, __size_dynamic_>; + using _StaticValues _LIBCPP_NODEBUG = __static_array<_TStatic, _Values...>; + using _DynamicValues _LIBCPP_NODEBUG = __possibly_empty_array<_TDynamic, __size_dynamic_>; // Dynamic values member _LIBCPP_NO_UNIQUE_ADDRESS _DynamicValues __dyn_vals_; // static mapping of indices to the position in the dynamic values array - using _DynamicIdxMap = __static_partial_sums(_Values == _DynTag)...>; + using _DynamicIdxMap _LIBCPP_NODEBUG = __static_partial_sums(_Values == _DynTag)...>; template _LIBCPP_HIDE_FROM_ABI static constexpr _DynamicValues __zeros(index_sequence<_Indices...>) noexcept { @@ -292,7 +292,8 @@ private: static constexpr rank_type __rank_dynamic_ = ((_Extents == dynamic_extent) + ... + 0); // internal storage type using __maybe_static_array - using _Values = __mdspan_detail::__maybe_static_array<_IndexType, size_t, dynamic_extent, _Extents...>; + using _Values _LIBCPP_NODEBUG = + __mdspan_detail::__maybe_static_array<_IndexType, size_t, dynamic_extent, _Extents...>; [[no_unique_address]] _Values __vals_; public: diff --git a/naiveproxy/src/third_party/libc++/src/include/__memory/allocation_guard.h b/naiveproxy/src/third_party/libc++/src/include/__memory/allocation_guard.h index 66d6a5002c..66edcd92ed 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__memory/allocation_guard.h +++ b/naiveproxy/src/third_party/libc++/src/include/__memory/allocation_guard.h @@ -45,8 +45,8 @@ _LIBCPP_BEGIN_NAMESPACE_STD // custom allocator. template struct __allocation_guard { - using _Pointer = typename allocator_traits<_Alloc>::pointer; - using _Size = typename allocator_traits<_Alloc>::size_type; + using _Pointer _LIBCPP_NODEBUG = typename allocator_traits<_Alloc>::pointer; + using _Size _LIBCPP_NODEBUG = typename allocator_traits<_Alloc>::size_type; template // we perform the allocator conversion inside the constructor _LIBCPP_HIDE_FROM_ABI explicit __allocation_guard(_AllocT __alloc, _Size __n) diff --git a/naiveproxy/src/third_party/libc++/src/include/__memory/pointer_traits.h b/naiveproxy/src/third_party/libc++/src/include/__memory/pointer_traits.h index e35cfb7c3b..afe3d1bf8a 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__memory/pointer_traits.h +++ b/naiveproxy/src/third_party/libc++/src/include/__memory/pointer_traits.h @@ -176,10 +176,10 @@ public: #ifndef _LIBCPP_CXX03_LANG template -using __rebind_pointer_t = typename pointer_traits<_From>::template rebind<_To>; +using __rebind_pointer_t _LIBCPP_NODEBUG = typename pointer_traits<_From>::template rebind<_To>; #else template -using __rebind_pointer_t = typename pointer_traits<_From>::template rebind<_To>::other; +using __rebind_pointer_t _LIBCPP_NODEBUG = typename pointer_traits<_From>::template rebind<_To>::other; #endif // to_address @@ -276,7 +276,7 @@ struct __pointer_of<_Tp> { }; template -using __pointer_of_t = typename __pointer_of<_Tp>::type; +using __pointer_of_t _LIBCPP_NODEBUG = typename __pointer_of<_Tp>::type; template struct __pointer_of_or { @@ -290,7 +290,7 @@ struct __pointer_of_or<_Tp, _Up> { }; template -using __pointer_of_or_t = typename __pointer_of_or<_Tp, _Up>::type; +using __pointer_of_or_t _LIBCPP_NODEBUG = typename __pointer_of_or<_Tp, _Up>::type; template concept __resettable_smart_pointer = requires(_Smart __s) { __s.reset(); }; diff --git a/naiveproxy/src/third_party/libc++/src/include/__memory/shared_ptr.h b/naiveproxy/src/third_party/libc++/src/include/__memory/shared_ptr.h index 97e4031499..06b1fc488c 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__memory/shared_ptr.h +++ b/naiveproxy/src/third_party/libc++/src/include/__memory/shared_ptr.h @@ -141,7 +141,7 @@ struct __for_overwrite_tag {}; template struct __shared_ptr_emplace : __shared_weak_count { - using __value_type = __remove_cv_t<_Tp>; + using __value_type _LIBCPP_NODEBUG = __remove_cv_t<_Tp>; template -using __shared_ptr_nullptr_deleter_ctor_reqs = _And, __well_formed_deleter<_Dp, nullptr_t> >; +using __shared_ptr_nullptr_deleter_ctor_reqs _LIBCPP_NODEBUG = + _And, __well_formed_deleter<_Dp, nullptr_t> >; #if defined(_LIBCPP_ABI_ENABLE_SHARED_PTR_TRIVIAL_ABI) # define _LIBCPP_SHARED_PTR_TRIVIAL_ABI __attribute__((__trivial_abi__)) @@ -315,7 +316,7 @@ public: // A shared_ptr contains only two raw pointers which point to the heap and move constructing already doesn't require // any bookkeeping, so it's always trivially relocatable. - using __trivially_relocatable = shared_ptr; + using __trivially_relocatable _LIBCPP_NODEBUG = shared_ptr; private: element_type* __ptr_; @@ -1210,7 +1211,7 @@ public: // A weak_ptr contains only two raw pointers which point to the heap and move constructing already doesn't require // any bookkeeping, so it's always trivially relocatable. - using __trivially_relocatable = weak_ptr; + using __trivially_relocatable _LIBCPP_NODEBUG = weak_ptr; private: element_type* __ptr_; diff --git a/naiveproxy/src/third_party/libc++/src/include/__memory/unique_ptr.h b/naiveproxy/src/third_party/libc++/src/include/__memory/unique_ptr.h index 2368f7b03e..29d391fc80 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__memory/unique_ptr.h +++ b/naiveproxy/src/third_party/libc++/src/include/__memory/unique_ptr.h @@ -153,7 +153,7 @@ public: // // This unique_ptr implementation only contains a pointer to the unique object and a deleter, so there are no // references to itself. This means that the entire structure is trivially relocatable if its members are. - using __trivially_relocatable = __conditional_t< + using __trivially_relocatable _LIBCPP_NODEBUG = __conditional_t< __libcpp_is_trivially_relocatable::value && __libcpp_is_trivially_relocatable::value, unique_ptr, void>; @@ -189,7 +189,7 @@ private: (!is_reference<_Dp>::value && is_convertible<_UDel, _Dp>::value) >; template - using _EnableIfDeleterAssignable = __enable_if_t< is_assignable<_Dp&, _UDel&&>::value >; + using _EnableIfDeleterAssignable _LIBCPP_NODEBUG = __enable_if_t< is_assignable<_Dp&, _UDel&&>::value >; public: template > @@ -419,7 +419,7 @@ public: // // This unique_ptr implementation only contains a pointer to the unique object and a deleter, so there are no // references to itself. This means that the entire structure is trivially relocatable if its members are. - using __trivially_relocatable = __conditional_t< + using __trivially_relocatable _LIBCPP_NODEBUG = __conditional_t< __libcpp_is_trivially_relocatable::value && __libcpp_is_trivially_relocatable::value, unique_ptr, void>; @@ -430,9 +430,9 @@ private: _LIBCPP_COMPRESSED_PAIR(pointer, __ptr_, deleter_type, __deleter_); #ifdef _LIBCPP_ABI_BOUNDED_UNIQUE_PTR - using _BoundsChecker = __unique_ptr_array_bounds_stored; + using _BoundsChecker _LIBCPP_NODEBUG = __unique_ptr_array_bounds_stored; #else - using _BoundsChecker = __unique_ptr_array_bounds_stateless; + using _BoundsChecker _LIBCPP_NODEBUG = __unique_ptr_array_bounds_stateless; #endif _LIBCPP_NO_UNIQUE_ADDRESS _BoundsChecker __checker_; diff --git a/naiveproxy/src/third_party/libc++/src/include/__memory/unique_temporary_buffer.h b/naiveproxy/src/third_party/libc++/src/include/__memory/unique_temporary_buffer.h index ca6292338c..dea7fa8e18 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__memory/unique_temporary_buffer.h +++ b/naiveproxy/src/third_party/libc++/src/include/__memory/unique_temporary_buffer.h @@ -45,7 +45,7 @@ struct __temporary_buffer_deleter { }; template -using __unique_temporary_buffer = unique_ptr<_Tp, __temporary_buffer_deleter<_Tp> >; +using __unique_temporary_buffer _LIBCPP_NODEBUG = unique_ptr<_Tp, __temporary_buffer_deleter<_Tp> >; template inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_NO_CFI _LIBCPP_CONSTEXPR_SINCE_CXX23 __unique_temporary_buffer<_Tp> diff --git a/naiveproxy/src/third_party/libc++/src/include/__node_handle b/naiveproxy/src/third_party/libc++/src/include/__node_handle index d0b35bfd19..8f32f2de83 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__node_handle +++ b/naiveproxy/src/third_party/libc++/src/include/__node_handle @@ -188,10 +188,10 @@ struct __map_node_handle_specifics { }; template -using __set_node_handle = __basic_node_handle< _NodeType, _Alloc, __set_node_handle_specifics>; +using __set_node_handle _LIBCPP_NODEBUG = __basic_node_handle< _NodeType, _Alloc, __set_node_handle_specifics>; template -using __map_node_handle = __basic_node_handle< _NodeType, _Alloc, __map_node_handle_specifics>; +using __map_node_handle _LIBCPP_NODEBUG = __basic_node_handle< _NodeType, _Alloc, __map_node_handle_specifics>; template struct _LIBCPP_TEMPLATE_VIS __insert_return_type { diff --git a/naiveproxy/src/third_party/libc++/src/include/__pstl/backend_fwd.h b/naiveproxy/src/third_party/libc++/src/include/__pstl/backend_fwd.h index 2132e8dbce..a7d53b6a1c 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__pstl/backend_fwd.h +++ b/naiveproxy/src/third_party/libc++/src/include/__pstl/backend_fwd.h @@ -53,11 +53,13 @@ struct __serial_backend_tag; struct __std_thread_backend_tag; # if defined(_LIBCPP_PSTL_BACKEND_SERIAL) -using __current_configuration = __backend_configuration<__serial_backend_tag, __default_backend_tag>; +using __current_configuration _LIBCPP_NODEBUG = __backend_configuration<__serial_backend_tag, __default_backend_tag>; # elif defined(_LIBCPP_PSTL_BACKEND_STD_THREAD) -using __current_configuration = __backend_configuration<__std_thread_backend_tag, __default_backend_tag>; +using __current_configuration _LIBCPP_NODEBUG = + __backend_configuration<__std_thread_backend_tag, __default_backend_tag>; # elif defined(_LIBCPP_PSTL_BACKEND_LIBDISPATCH) -using __current_configuration = __backend_configuration<__libdispatch_backend_tag, __default_backend_tag>; +using __current_configuration _LIBCPP_NODEBUG = + __backend_configuration<__libdispatch_backend_tag, __default_backend_tag>; # else // ...New vendors can add parallel backends here... diff --git a/naiveproxy/src/third_party/libc++/src/include/__pstl/dispatch.h b/naiveproxy/src/third_party/libc++/src/include/__pstl/dispatch.h index ea40fa79eb..828842368e 100644 --- a/naiveproxy/src/third_party/libc++/src/include/__pstl/dispatch.h +++ b/naiveproxy/src/third_party/libc++/src/include/__pstl/dispatch.h @@ -58,7 +58,8 @@ struct __find_first_implemented<_Algorithm, __backend_configuration<_B1, _Bn...> __find_first_implemented<_Algorithm, __backend_configuration<_Bn...>, _ExecutionPolicy> > {}; template